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')
print('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([]) == 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 中,条件语句的最一般形式:

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!')

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

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 循环允许对布尔条件进行重复测试,直到条件不能得到满足。for 循环提供了遍历序列的迭代(例如字符串的字符、列表的元素或给定范围内的数字等)。

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, 'orange': 3.5, 'banana': 4.0}
for k, v in fruits.items():
    print(k, 'corresponds to', v)

3.3 中断循环

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

break

要结束循环,可使用 break,假设要找到最大的三位水仙花数(每个位上的数字的 3 次幂之和等于它本身的三位数),可以从 999 开始向下迭代,找到一个水仙花数后,无需继续迭代,直接跳出循环:

for i in range(999, 99, -1):
    b = i % 10
    t = (i // 10) % 10
    h = i // 100
    if b ** 3 + t ** 3 + h ** 3 == i:
        print(i)
        break

运行此程序,将在打印 407 后结束,在上述示例中,可以看到通过将 range 的步长设置为负数,让 range 反向迭代。

常规的 while 循环会在循环开头时进行判断用来结束循环,但有时我们想要循环在循环体中结束,这时就需要用到 while True/break 语法了,使用 while True 可以使循环永不结束,然后在循环体内使用 if 语句,当 if 语句的条件得到满足时调用 break 结束循环,例如在登陆界面中,只有用户输入了正确的用户名才能进行下一步操作:

users = ['root', 'admin', 'user_1']
while True:
    user = input('Please enter your name: ')
    if user in users:
        break
    print('User does not exist!')
print('The user name is correct!')

continue

当指定语句 continue 时,它结束当前迭代,并跳到下一次迭代开头。这基本上意味着跳过循环体中余下的语句,但不结束循环,例如计算所有水仙花数,如果使用语句 continue,则可以写为:

for i in range(100, 1000):
    b = i % 10
    t = (i // 10) % 10
    h = i // 100
    if b ** 3 + t ** 3 + h ** 3 != i:
        continue
    print(i)

程序输出结果如下:

153

370

371

407

4. 控制语句综合嵌套

控制语句可以进行复杂的综合嵌套,可以通过打印九九乘法表来综合使用控制语句:

for i in range(1, 10):
    for j in range(1, 10):
        if i > j:
            print('{} * {} = {}'.format(i, j, i*j), end = '\t')
        elif i == j:
            print('{} * {} = {}'.format(i, j, i*j))
        else:
            continue

5. 列表解析式

列表推导是利用列表创建新列表的方式,列表推导的工作原理类似于 for 循环:

>>> [i**2 for i in range(10)]
[0, 1, 4, 9, 16, 25, 36, 49, 64, 81]

在列表推导中也可以进行嵌套,例如添加更多的 for 循环和 if 语句:

>>> [[i, j] for i in range(10) for j in range(10) if i % 3 == 0 and j % 4 == 0]
[[0, 0], [0, 4], [0, 8], [3, 0], [3, 4], [3, 8], [6, 0], [6, 4], [6, 8], [9, 0], [9, 4], [9, 8]]

等价于:

new_list = []
for i in range(10):
    for j in range(1):
        if i % 3 == 0 and j % 4 == 0:
            new_list.append([i, j])

除了列表推导式外,还可以使用花括号来执行字典推导:

>>> print({i: i**3 for i in range(10)})
{0: 0, 1: 1, 2: 8, 3: 27, 4: 64, 5: 125, 6: 216, 7: 343, 8: 512, 9: 729} 

注意:

1、循环也是以冒号(:)结尾

2、条件为各种算术表达式,

a) 当为真时,循环体语句组 1,重复执行

b) 当为假是,循环体语句组 2,停止执行

3、如果循环体忘记累计,条件判断一直为真,则为死循环。循环体一直实行。

a) 死循环有时候经常被用来构建无限循环

b) 可以使用 ctrl+c 终止,或者停止 IDE

总结

到此这篇关于Python基础教程之控制结构的文章就介绍到这了,更多相关Python控制结构内容请搜索我们以前的文章或继续浏览下面的相关文章希望大家以后多多支持我们!

(0)

相关推荐

  • python脚本框架webpy模板控制结构

    目录 for while if-else 实例 控制结构就是for,while,if-else,if-elif,while-else,在web.py中其实和我们以前学过的一样,操作基本是相同的,但是里面还是有一些不同! for $for row in range(10): 第$row行 $def with(funs) $for row in funs: 第$row行 这里一定要记住funs不要添加$ 如果funs是list,那$ros具体list的一些属性,在while中你可以看到 while

  • Python的控制结构之For、While、If循环问题

    传统Python语言的主要控制结构是for循环.然而,需要注意的是for循环在Pandas中不常用,因此Python中for循环的有效执行并不适用于Pandas模式.一些常见控制结构如下. for循环 while循环 if/else语句 try/except语句 生成器表达式 列表推导式 模式匹配 所有的程序最终都需要一种控制执行流的方式.本节介绍一些控制执行流的技术. 01 for循环 for循环是Python的一种最基本的控制结构.使用for循环的一种常见模式是使用range函数生成数值范围

  • 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基础教程之异常处理详解

    目录 前言 异常 错误与异常 语法错误 异常 异常处理 自主抛出异常 自定义异常 finally子句 总结 前言 最近发现有些东西长时间不用就要忘了,坚持每天复习总结一个小知识点吧~ 异常是什么呢?就是在代码执行过程中非预期的执行结果,随着代码越来越复杂,代码中的执行逻辑也会越来越复杂,如果没有处理好异常情况,很有可能造成软件执行错误,导致重大损失.相反,如果合理的处理异常情况,则可以增强软件的稳定性,提高体验感. 异常 在Python中,使用异常对象(exception object)来表示代

  • Python基础教程之异常详解

    一.摘要 Python使用被称为异常 的特殊对象来管理程序执行期间发生的错误.每当发生让Python不知所措的错误时,它都会创建一个异常对象.如果你编写了处理该异常的代码,程序将继续运行:如果你未对异常进行处理,程序将停止,并显示一个traceback,其中包含有关异常的报告. 异常是使用try-except 代码块处理的.try-except 代码块让Python执行指定的操作,同时告诉Python发生异常时怎么办.使用了try-except 代码块时,即便出现异常,程序也将继续运行:显示你编

  • python基础教程之序列详解

    sequence 序列 sequence(序列)是一组有顺序的元素的集合 (严格的说,是对象的集合,但鉴于我们还没有引入"对象"概念,暂时说元素) 序列可以包含一个或多个元素,也可以没有任何元素. 我们之前所说的基本数据类型,都可以作为序列的元素.元素还可以是另一个序列,以及我们以后要介绍的其他对象. 序列有两种:tuple(定值表: 也有翻译为元组) 和 list (表) 复制代码 代码如下: >>>s1 = (2, 1.3, 'love', 5.6, 9, 12,

  • Python基础之time库详解

    一.前言 time库运行访问多种类型的时钟,这些时钟用于不同的场景.本篇,将详细讲解time库的应用知识. 二.获取各种时钟 既然time库提供了多种类型的时钟.下面我们直接来获取这些时钟,对比其具体的用途.具体代码如下: import time print(time.monotonic()) print(time.monotonic_ns()) print(time.perf_counter()) print(time.perf_counter_ns()) print(time.process

  • Python基础之元类详解

    1.python 中一切皆是对象,类本身也是一个对象,当使用关键字 class 的时候,python 解释器在加载 class 的时候会创建一个对象(这里的对象指的是类而非类的实例) class Student: pass s = Student() print(type(s)) # <class '__main__.Student'> print(type(Student)) # <class 'type'> 2.什么是元类 元类是类的类,是类的模板 元类是用来控制如何创建类的,

  • Python基础之字符串格式化详解

    一.前言 Python的字符串格式化有两种方式:百分号方式 和 format方式 百分号的方式相对来说比较老, format方式则是相对比较先进,企图替换古老的方式,目前两者都支持. 二.百分号 %[(name)][flags][width].[precision]typecode """ (name) 可选,用于选择指定的key flags 可选,可供选择的值有: + 右对齐:正数前加正好,负数前加负号: - 左对齐:正数前无符号,负数前加负号: 空格 右对齐:正数前加空格

  • Python基础之hashlib模块详解

    一.hashlib简介 1.什么叫hash: hash是一种算法(不同的hash算法只是复杂度不一样)(3.x里代替了md5模块和sha模块,主要提供 SHA1, SHA224, SHA256, SHA384, SHA512 ,MD5 算法),该算法接受传入的内容,经过运算得到一串hash值 2.hash值的特点是(hash值/产品有三大特性:): 只要传入的内容一样,得到的hash值必然一样=====>要用明文传输密码文件完整性校验 不能由hash值返解成内容=======>把密码做成has

  • python基础之装饰器详解

    一.前言 装饰器:本质就是函数,功能是为其他函数添加附加功能 原则: 1.不修改被修饰函数的源代码 2.不修改被修饰函数的调用方式 装饰器 = 高阶函数 + 函数嵌套 + 闭包 二.高阶函数 高阶函数定义: 1.函数接收的参数是一个函数 2.函数的返回值是一个函数名 3.满足上述条件任意一个,都可以称为高阶函数 test 函数是高阶函数,接受了一个foo 作为参数 import time def foo(): time.sleep(3) print("sleep 3s") def te

  • Python基础之条件语句详解

    一.环境介绍 Python版本Python 3.8.8 ( Pycharm版本2021.1.2 二.条件判断介绍 Python条件语句是通过一条或多条语句的执行结果(True或者False)来决定执行的代码块. 语句块是在条件为真(条件语句)时执行或者执行多次(循环语句)的一组语句.在代码前放置空格来缩进语句即可创建语句块. 三.if语句的使用 1.if的第一种使用方法 对于if语句,若条件判定为真,那么后面的语句块就会被执行.若条件判定为假,语句块就会被跳过,不会执行. # 条件判断 # 第一

随机推荐