本章涉及内容:

  • 循环
  • 先判断后循环与先循环后判断
  • 判断表达式和循环体
  • while语句
  • for语句和range函数
  • 增量赋值运算符
  • 递增计数
  • 递减计数
  • 计算1到n的和
  • break语句和else代码块
  • continue语句
  • 无限循环
  • 多重循环

1. while语句

关于while语句

循环结构可以实现以下功能:

  • 重复执行相同或相似的处理操作
  • 变更条件的同时重复执行处理
  • 重复执行处理直到某个条件成立

while循环示例

递增计数
a = int(input("整数a: "))
b = int(input("整数b: "))

a, b = sorted([a, b])

counter = a
while counter <= b:
    print(counter, end=' ')
    counter = counter + 1
print()

运行结果:

递增计数

这段代码用于获取用户输入的两个整数,并按顺序打印这两个整数之间的所有整数(包括这两个整数本身)。下面是代码的逐行解释:

  1. a = int(input("整数a: ")):这行代码提示用户输入一个整数,作为变量a的值。input()函数用于获取用户输入的字符串,然后int()函数将这个字符串转换成一个整数。
  2. b = int(input("整数b: ")):这行代码与第一行类似,它提示用户输入另一个整数,作为变量b的值。
  3. a, b = sorted([a, b]):这行代码首先将变量ab的值放入一个列表中,然后使用sorted()函数对这个列表进行排序。sorted()函数返回一个新的列表,其中包含按升序排列的元素。之后,这个排序后的列表被解包(unpack)到变量ab中,这样变量a就包含了两个整数中较小的一个,而变量b包含了较大的一个。
  4. counter = a:这行代码将变量counter初始化为a的值。counter用于在接下来的循环中作为计数器,从a开始递增直到b
  5. while counter <= b:这是一个while循环的开始,循环的条件是counter小于或等于b。只要条件为真,循环体内的代码就会执行。
  6. print(counter, end=' '):这行代码打印当前的counter值,后面跟着一个空格(由end=' '参数指定)。这意味着每打印一个数字后不会换行,而是在同一行继续打印下一个数字。
  7. counter = counter + 1:这行代码将counter的值增加1。这是循环的递增部分,确保了循环能够向前推进。
  8. print():当while循环结束后,这行代码执行,打印一个换行符。这是为了在打印完所有数字后,将光标移动到下一行,以便于后续的输出或命令行提示符不会紧接着数字序列出现。

这段代码的作用是让用户输入两个整数,然后按顺序打印从较小的整数开始到较大的整数结束的所有整数。

递减计数
a = int(input('整数a: '))
while a >= 0:
    print(a, end=' ')
    a -= 1
print()

运行结果:

递减计数

这段代码的核心功能是使用 while 循环逆序打印从用户输入的整数 a 开始到 0 的所有整数。下面是 while 循环相关的解释:

  • a = int(input('整数a: ')):用户输入一个整数,作为变量 a 的初始值。
  • while a >= 0:这是 while 循环的条件。循环会一直执行,直到 a 不再大于或等于 0。每次循环迭代都会检查这个条件。
  • print(a, end=' '):在循环体内,当前的 a 值被打印出来,后面跟着一个空格(end=' ' 参数的作用),而不是默认的换行符。这样,所有打印的数字会在同一行上显示。
  • a -= 1:这是 a 的递减操作,等同于 a = a - 1。每次循环迭代后,a 的值都会减少 1。这是循环向结束条件靠近的关键步骤。
  • print():当 a 的值小于 0,while 循环终止。这时执行 print() 函数,打印一个换行符,确保命令行提示符或后续输出出现在新的一行上。

总的来说,这段代码使用 while 循环从用户输入的整数 a 开始递减打印,直到打印到 0 为止。

计算1到n的和
print("计算1到n的和")

n = int(input("n的值:"))
sum = 0
i = 1
while i <= n:
    sum += i
    i += 1
print('1到', n, '的和为:', sum)

运行结果:

计算1到n的和

这段代码是一个简单的Python程序,用来计算从1加到n的和。下面是每一行代码的解释:

  1. print("计算1到n的和")
    这一行是打印输出,向用户展示这个程序的功能,即计算从1加到n的和。
  2. n = int(input("n的值:"))
    这一行代码首先显示提示信息"n的值:",然后等待用户输入一个值。用户输入的值通过input()函数获取,然后使用int()函数将这个值转换成一个整数,并赋值给变量n
  3. sum = 0
    这里初始化一个变量sum,用来存储从1加到n的总和,初始值设为0。
  4. i = 1
    这里初始化一个计数器变量i,它将用于while循环中,表示当前加到哪个数了,初始值设为1。
  5. while i <= n:
    这是一个while循环的开始,条件是i小于等于n。只要这个条件为真,循环就会继续执行。
  6. sum += i
    这一行是循环体的一部分,它将变量i的当前值加到变量sum上,等价于sum = sum + i
  7. i += 1
    这一行也是循环体的一部分,它将计数器i的值增加1,等价于i = i + 1。这是为了在下一次循环迭代中处理下一个数。
  8. print('1到', n, '的和为:', sum)
    当while循环结束(即i大于n时),这一行将执行。它会打印出从1到n的和,显示给用户。

总结起来,这个程序首先让用户输入一个整数n,然后通过while循环将从1到n的所有整数相加,并最终打印出总和。

else代码块和break

在Python中,while 循环可以有一个可选的 else 代码块,它在循环正常结束时执行,即没有遇到 break 语句导致的提前退出。

如果循环因为条件不再为真而退出,else 代码块将被执行。但是,如果循环因为 break 语句而退出,else 代码块将不会执行。

这是一个简单的例子来展示如何使用 while 循环的 else 代码块:

count = 0

while count < 5:
    print(count)
    count += 1
    if count == 3:
        break
else:
    print("Loop finished without break")

print("Done")

上面的代码会输出:

0
1
2
Done

在这个例子中,当 count 增加到3时,break 语句被执行,循环提前退出,因此 else 代码块没有被执行。如果我们移除 if 语句和 break,则 else 代码块会在循环自然结束后执行:

count = 0

while count < 5:
    print(count)
    count += 1
else:
    print("Loop finished without break")

print("Done")

这次的输出将会是:

0
1
2
3
4
Loop finished without break
Done

在这个修改后的例子中,因为没有 break 语句导致的提前退出,所以 else 代码块被执行了。

continue语句

在Python中,continue 语句用于跳过当前循环的剩余部分,并继续下一次迭代。continue 语句通常与某种形式的条件语句(如 if)一起使用,以决定是否跳过当前循环的迭代。

continue语句执行时,当前迭代中continue之后的代码将不会执行,而是直接开始下一次循环的迭代。continue语句可以用在while循环和for循环中。

下面是一个使用continue语句的简单例子:

for i in range(1, 10):
    if i % 2 == 0:  # 如果i是偶数
        continue    # 跳过当前迭代
    print(i)        # 只有当i是奇数时,这行代码才会执行

在这个例子中,continue语句导致打印语句只在i为奇数时执行。因此,输出将是1到9之间的所有奇数:

1
3
5
7
9

需要注意的是,continue语句只影响当前迭代的剩余部分,它不会终止整个循环。循环会继续执行,直到其自然结束或遇到break语句。

Python"自带电池"特性

在 Python 社区中,有一个常用的表达:“Python自带电池”("Python comes with batteries included"),这句话的意思是 Python 标准库(Standard Library)提供了大量的模块和功能,这些模块和功能几乎可以处理日常编程中遇到的各种任务,而无需另外安装第三方库。

Python 的标准库包含了很多有用的模块,例如:

  • datetime:用于处理日期和时间。
  • collections:提供了一些额外的数据结构,如 namedtuple, deque, Counter 等。
  • jsoncsv:用于处理 JSON 和 CSV 文件。
  • sqlite3:提供了一个轻量级的数据库引擎。
  • http:用于处理 HTTP 请求。
  • re:正则表达式库,用于字符串匹配和搜索。
  • mathrandom:数学运算和随机数生成。
  • unittest:用于编写测试用例的测试框架。
  • logging:提供了灵活的日志记录系统。

标准库的强大之处在于它的广泛性和易用性,这使得 Python 成为一个非常适合快速开发的语言。不过,对于更专业化或者性能要求更高的场景,可能需要使用到第三方库,比如在科学计算中经常用到的 NumPy、Pandas、Matplotlib 等。

2. for语句

与上一节while相同,for语句也可以用于控制程序中的循环。

关于for语句

在Python中,for语句用于遍历序列(如列表、元组、字符串)或其他可迭代对象。for循环的基本语法如下:

for element in sequence:
    # do something with element

这里,sequence 是你想要遍历的序列,element 是序列中的每个元素的引用。

下面是几个使用 for 语句的例子:

  1. 遍历列表:
fruits = ['apple', 'banana', 'cherry']
for fruit in fruits:
    print(fruit)

这会依次打印出列表中的每个水果名称。

  1. 遍历字符串:
for letter in 'Python':
    print(letter)

这会打印出字符串 "Python" 中的每个字符。

  1. 使用 range() 函数:
for i in range(5):
    print(i)

这会打印出数字 0 到 4。range(5) 生成一个包含从 0 到 4 的整数序列。

  1. 遍历字典:
dict = {'name': 'John', 'age': 25, 'gender': 'Male'}
for key in dict:
    print(key, dict[key])

这会打印出字典中每个键及其对应的值。

  1. 使用 enumerate() 函数遍历列表并同时获取索引和值:
fruits = ['apple', 'banana', 'cherry']
for index, fruit in enumerate(fruits):
    print(index, fruit)

这会打印出列表中每个水果的索引和名称。

  1. 使用列表推导式:
squares = [x**2 for x in range(10)]

这将创建一个包含前10个整数平方的列表。

for循环是Python中非常重要的控制流语句,它让代码可以执行重复的任务,而无需手动编写多次相同的代码。

range函数

在Python中,range() 函数是一个内置函数,用于生成一个不可变的数字序列。这个序列通常用在for循环中进行迭代。

range() 函数可以接受一到三个整数参数:

  1. start(可选):序列的起始值,默认为0。
  2. stop:序列的结束值,但不包括该值本身。
  3. step(可选):步长,默认为1。

如果只提供一个参数,那么它会被认为是stop值,而start将默认为0,step默认为1。

以下是range()函数的一些用法示例:

# 使用一个参数(这将创建一个从0开始到5(不包括5)的序列)
for i in range(5):
    print(i)  # 输出: 0, 1, 2, 3, 4

# 使用两个参数(这将创建一个从1开始到5(不包括5)的序列)
for i in range(1, 5):
    print(i)  # 输出: 1, 2, 3, 4

# 使用三个参数(这将创建一个从1开始到10(不包括10)的序列,步长为2)
for i in range(1, 10, 2):
    print(i)  # 输出: 1, 3, 5, 7, 9

请注意,range()生成的是一个range对象,它在Python 3中是一个迭代器,不会立即生成所有值,而是在迭代时按需生成。这意味着它在处理大范围的数字时是内存高效的。如果确实需要一个列表,可以通过将range()的结果传递给list()函数来转换:

numbers = list(range(5))
print(numbers)  # 输出: [0, 1, 2, 3, 4]

在Python 2中,range()会直接返回一个列表,但是为了大范围数字序列的内存效率,通常推荐使用xrange(),它的行为类似于Python 3中的range()。在Python 3中,xrange()已经被移除,只保留了新的range()实现。

for循环同样支持elsebreakcontinue,且这些语句的用法与while相同

3. 多重循环

如果在循环语句的循环体中使用循环语句,就可以进行二重循环或三重循环。这种循环称为多重循环。

九九乘法表

# 外层循环负责行数,从1到9
for i in range(1, 10):
    # 内层循环负责列数,从1到i
    for j in range(1, i + 1):
        # 打印乘法表的一项,end=' '意味着打印后不换行,而是空格
        print(f"{j} * {i} = {i * j}", end=' ')
    # 当一行打印结束后换行
    print()

运行结果:

打印输出九九乘法表

在这个例子中,外层循环遍历了1到9的数字,代表九九乘法表的行,而内层循环则根据外层循环的当前值遍历从1到当前值的数字,代表每行的列。每次内层循环迭代时,都会打印出一个乘法表达式及其结果。使用end=' '参数确保在同一行内打印所有列,而print()在内层循环结束后调用,以换行到下一行。
最后修改:2023 年 11 月 30 日
如果觉得我的文章对你有用,请随意赞赏