开发者

Python基础教程之控制结构详解

目录
  • 0. 学习目标
  • 1. 代码块与缩进
  • 2. 条件语句
    • 2.1 if 语句
    • 2.2 if 语句的嵌套
    • 2.3 断言
  • 3. 循环
    • 3.1 while 循环
    • 3.2 for 循环
    • 3.3 中断循环
  • 4. 控制语句综合嵌套
    • 5. 列表解析式
      • 注意:
        • 总结

          0. 学习目标

          python 是简洁、易学、面向对象的编程语言。它不仅拥有强大的原生数据类型,也提供了简单易用的控制语句。在《Python基础教程》的系列博文中,我们已经介绍了 Python 中的内置原生数据类型,并且也了解了程序如何利用输入、输出语句与用户进行交互。本节的主要目标是介绍 Python 的控制语句,为接下来的学习奠定基础,本文会完整的介绍学习数据结构和算法所需的 Python 基础知识及基本思想,并给出相应的实战示例及解释。

          • 理解并掌握 Python 条件语句与循环语句
          • 掌握 Python 条件语句与循环语句的复杂嵌套以及列表解析式

          1. 代码块与缩进

          代码块是一组语句,Python 中用于定义代码块的语法对于所有控制结构来说是相同的,可用于满足条件时执行代码( if 语句),也可用于代码多次执行(循环)等。代码块是通过缩进代码(可以使用空格或制表符)来创建的。在Python中,使用冒号 (:) 指出接下来是一个代码块,在同一个代码块中,各行代码的缩进量(一般每级缩进 4 个空格)必须相同:

          if condition is True:
              print('this is a block')
              print('another line of this block')
          pri编程客栈nt('escaped the previous block')
          

          在指定函数体和类体时,代码块的原则同样适用。

          2. 条件语句

          以上示例语句都是逐条执行的,但实际应用中让程序选择执行特定的语句块是必备的。这时布尔类型就派上用场了。

          用作布尔表达式时,标准值 False 和 None、数值 0、空序列(如空字符串、空元组和空字典等)都被视为假,而其他值均被视为真。这意味着任何 Python 值都可解释为真值,但 True 和 False 为标准真值。在 C 语言中,标准真值为 0 (表示假)和 1 (表示真)。实际上,True 和 False 是 0 和 1 的别名,其作用是完全相同的:

          >>> bool('')
          False
          >>> bool([0])
          True
          >>> bool('Hello world')
          True
          >>> True == 1
          True
          >>> True + 2
          3
          

          程序运行时,Python 会在需要时自动将任意值转换为布尔值,而无需显式地进行转换:

          # test_bool.py
          string_test = 'Hello world'
          if string_test:
              print('Automatic conversion ')
          

          以上脚本执行结果如下,表明 Python 执行了自动转换:

          Automatic conversion

          需要注意的是,虽然值转换为真值后可能相等,例如 bool({}) == bool([]) www.cppcns.com== False,但本身它们并不相等,即 {} != []

          >>> bool({}) == bool([])
          True
          >>> {} == []
          False
          

          2.1 if 语句

          条件语句(也称 if 语句)能够有条件地执行代码,如果条件( if 和冒号之间的表达式)为真,就执行后续代码块;如果条件为假,就不执行:

          if flag == True:
              flag = False
          print(flag)
          

          上示 if 语句也称单路分支结构,如果 flag 为 True,则将其变为 False,再打印 flag 值。还有另一种条件结构称为二元分支(也称 if...else 语句):

          answer = input('Please enter your answer: ')
          if answer == 'A':
              print('Right!')
          else:
              print('Error!')
          

          在上述例子中,Python 会检查用户输入答案,如果输入为 A,则打印 “Right!”,否则,会执行else 分支打印 “Error!”。

          要检查多个条件,可使用 elif,elif 是 else if 的缩写,可以将其理解为包含条件的 else 子句:

          num = int(input('Please enter a number: ')) 
          if num > 0: 
              print('The number is positive') 
          elif num < 0: 
              print('The number is negative') 
          else: 
              print('The number is zero') 
          

          需要注意的是,在使用 elif 时,最后的 else 是必需的,它用来在所有分支条件都不满足的情况下提供默认分支。

          上述三种条件结构可以用以下流程图表示:

          Python基础教程之控制结构详解

          综上,我们可以总结出 Python 中,条件语句的最一般形式:

          if first_condition:
              first_block
          elif second_condition:
              second_block
          elif third_condition:
              third_block
          else:
              fourth_block
          

          每个条件都是一个布尔表达式,每个代码块包含一个或多个满足条件时要执行的语句。如果第一个条件为真,则执行第一个代码块,而不会评估其他条件。如果第一个条件失败,则继续判断第二个条件,以此类推。if 语句可以包括任意数量的 elif 子句 (也可以为 0 个),最后一个 else 子句是可选的。

          2.2 if 语句的嵌套

          条件结构支持嵌套,即在 if 语句中调用任意数量的 if 语句:

          if alcohol < 20:
              print('Does not constitute drinking behavior!')
          else:
              if alcohol > 80:
                  print('Already meet drinking and driving standards!')
              else:
                  print('Has reached the standard for drunk driving!')
          

          上述程序所表达的逻辑可以用流程图表示:

          Python基础教程之控制结构详解

          2.3 断言

          为了让程序在错误条件出现时立即中止,Python 还提供了类似 if 语句的关键字:assert,使用此关键字可以要求某些条件必须得到满足。assert 语句类似检查点,当我们知道程序的执行必须满足特定条件,才能正确地运行时,使用assert 语句可以及时终止程序运行,类似网站注册时邮箱格式正确性的检查:

          >>> mail_1 = 'test123456789@gmail.com'
          >>> assert mail_1.endswith('.com')
          >>> mail_2 = 'test123456789@gmail.con'
          >>> assert mail_2.endswith('.com')
          Traceback (most recent call last):
            File "<stdin>", line 1, in <module>
          AssertionError
          

          为了说明程序终止的原因,可以在 assert 语句后添加说明字符串:

          >>> assert mail_2.endswith('.com'),' Email must end with .com '
          Traceback (most recent call last):
            File "<stdin>", line 1, in <module>
          AssertionError:  Email must end with .com
          

          3. 循环

          我们已经学习了如何在条件为真(或假)时执行代码块,但如何重复操作代码块多次呢?例如,打印 1—100 内的所有的偶数。我们当然可以写出 50 行 print 语句,但如果是这样,我们就不需要 Python 了。

          Python 提供了两种不同的循环结构。while 循环允许对布尔条件进行重复测试,直到条件不能得到满足。foTEQUWQSyHr 循环提供了遍历序列的迭代(例如字符串的字符、列表的元素或给定范围内的数字等)。

          Python基础教程之控制结构详解

          3.1 while 循环

          while 语句会在给定条件为真时重复执行代码块。例如,在下面的示例中,变量 number 被初始化为 0,并且在 while 循环中,它每迭代一次就递增 1,每次执行循环体前,首先进行条件判断,因此直到 number 等于 5 时结束循环:

          number = 0
          while number < 5:
              print('A total of {} time(s)'.format(number))
              number += 1
          

          程序运行结果如下:

          A total of 0 time(s)

          A total of 1 time(s)

          A total of 2 time(s)

          A total of 3 time(s)

          A total of 4 time(s)

          3.2 for 循环

          while 语句可用于在条件为真时反复执行代码块,但有时候我们可能需要为序列中每个元素执行代码块。

          为了介绍 for 循环,我们首先要了解可迭代对象,可迭代对象是可使用 for 循环进行遍历的对象,对于现阶段,我们可以只需将可迭代对象视为序列即可。

          for 语句可以用于遍历一个序列中的每个元素:

          fruits = ['apple', 'orange', 'banana', 'lemon']
          for fruit in fruits:
              print(fruit)
          

          for 语句将列表 fruits 中的每一个值依次赋给变量 fruit。然后,代码块就会被执行。for 语句的常见用法是在一定的值范围内进行有限次编程客栈数的迭代。

          我们已经在介绍数据类型 list 时,简单的介绍过内置函数 range 用于创建范围,range 语法类似于切片,包含起始位置,但不包含结束位置。实际上,如果只提供了一个位置,将把这个位置视为结束位置,而起始位置为 0。同时也可以为 range 函数提供步长参数,在范围内每隔若个元素提取一个元素:

          for i in range(0, 10, 2):
              print('The square of {} equals {}'.format(i, i**2))
          

          程序的输出结果如下:

          The square of 0 equals 0

          The square of 2 equals 4

          The square of 4 equals 16

          The square of 6 equals 36

          The square of 8 equals 64

          使用 for 循环还可以遍历字典,默认情况下,是遍历字典的键,如果需要遍历所有的值或键-值对,就需要用到字典的 values 和 items 方法了:

          fruits = {'apple': 5.0, 'orange': 3.5, 'banana': 4.0}
          for k in fruits:
              print(k, 'corresponds to', fruits[k])
          

          上示代码等价于:

          fruits = {'apple': 5.0,http://www.cppcns.com 'orange': 3.5, 'banana': 4.0}
          for k, v in fruits.items():
              print(k, 'corresponds to', v)
          

          3.3 中断循环

          通常,循环会不断地执行代码块,直到条件为假或迭代完序列中的所有元素。但有时,我们可能需要开始新迭代(跳到下一次迭代开头,并不结束循环)或直接结束循环。

          0

          上一篇:

          下一篇:

          精彩评论

          暂无评论...
          验证码 换一张
          取 消

          最新开发

          开发排行榜