系列文章目录
python学习—合并TXT文本文件
python学习—统计嵌套文件夹内的文件数量并建立索引表格
python学习—查找指定目录下的指定类型文件
python学习—年会不能停,游戏抽签抽奖
功能说明
在Python中,循环语句是程序控制流程的重要组成部分,它们允许代码重复执行特定的任务,直到满足特定条件为止。
Python中的控制流语句包括:
-
if语句:是条件控制的基础,用于根据条件执行不同代码块,用于检查一个或多个条件是否为True,如果条件为True则执行相应的代码块。
可以与else子句结合,当if条件为假时执行else后的代码块;
可以使用elif(else if的缩写)添加额外的条件检查;
任何非零或非空的值都被视为True,零、空字符串、空列表、空元组、空字典被视为False;
比较运算符:==:等于、 !=:不等于、 <:小于、>:大于、<=:小于或等于、 >=:大于或等于;
逻辑运算符:and:如果两边的条件都为真,结果才为真;or:如果两边的条件至少有一个为真,结果就为真。
短路逻辑:and操作符:如果左侧条件为假,不会评估右侧条件;or操作符:如果左侧条件为真,不会评估右侧条件;
可以在一个if语句内嵌套另一个if或elif语句,以处理更复杂的逻辑。 -
for循环:用于迭代一个序列或其他可迭代对象中的元素,并执行相应的代码块。
常见形式:for item in sequence:,其中item是序列中的元素,sequence是要遍历的对象;
可以与enumerate()函数一起使用,以便同时访问索引和值;
可以与else子句结合,当循环正常完成(即没有break语句中断)后执行else后的代码块。 -
while循环:在条件为True时,重复执行代码块,直到条件变为False;
可以与break语句配合,当满足某个条件时提前退出循环;
可以使用continue语句跳过当前循环迭代的剩余部分,直接进入下一次迭代;
可以与else子句结合,当循环自然结束(即条件变为False)后执行else后的代码块。
本文章目标为:
- 1 掌握 3种循环;
- 2 掌握控制流 。
知识点:终止死循环
涉及到循环,控制流,代码很容易出现死循环,在IDE中终止死循环的方法,
以pycharm为例,在终端窗口,输入ctrl + c 终止死循环。
1 if语句
在Python中,if 语句是实现条件逻辑的基础构造。Python没有switch语句,因此多分支条件主要通过if-elif-else结构来实现。
(1) 最简单的if语句。
age = 25
if age >= 18:
print("你已经是成年人了。")
运行结果:
你已经是成年人了。
(2) if …elif… else…语句,在条件不满足时执行另一段代码,或者可以与多个 elif (else if 的缩写)结合。
if 条件表达式:
条件为真时执行的代码块
elif 条件表达式:
如果上一个条件为假,且此条件为真时执行的代码块
else:
所有条件都不满足时执行的代码块
age = int(input("请输入您的年龄:"))
if age < 18:
print("您是未成年人。")
elif age < 60:
print("您是成年人。")
else:
print("您是老年人。")
运行结果:
请输入您的年龄:>? 40
您是成年人。
注意:
-
if、elif、else后面的冒号 : 是必需的,它标志着接下来的代码块。
-
代码块必须正确缩进,Python使用缩进来区分代码块的范围,通常使用四个空格作为一级缩进。
-
条件表达式的结果会被评估为布尔值,即True或False。如果表达式的结果为True,对应的代码块将被执行。
2 for循环
在Python中,for循环是一种迭代结构,用于遍历序列(如列表、元组、字符串)或其他可迭代对象中的元素。
(1)最简单的for应用:range()里面的值是终止值,不含该值。
range()函数可以生成一个数字序列,range(n)生成从0到n-1的整数序列
print('My name is')
for i in range(5):
print('Jimmy Five Times (' + str(i) + ')')
print()
运行结果:
My name is
Jimmy Five Times (0)
Jimmy Five Times (1)
Jimmy Five Times (2)
Jimmy Five Times (3)
Jimmy Five Times (4)
从 0 加到 5:
total =0
for num in range(5+1):
total =total +num
print(total)
print()
运行结果:
15
(2) for循环,起始值,终止值,range(a,b),左含右不含
for i in range(12,16):
print(i)
print()
运行结果:
12
13
14
15
(3) 迭代步长 参数,range(a,b,c),c是每次迭代的增加值
for i in range(0,10,2):
print(i)
print()
运行结果:
0
2
4
6
8
(4) 反向迭代 步长为 负数
for i in range(5,-1,-1):
print(i)
print()
运行结果:
5
4
3
2
1
0
(5) 遍历 字典的键.
dictionary = {'name': 'Alice', 'age': 30, 'city': 'New York'}
for key in dictionary:
print(key)
运行结果:
name
age
city
(6) 遍历 字典的键值对.
dictionary = {'name': 'Alice', 'age': 30, 'city': 'New York'}
for key, value in dictionary.items():
print(f"{key}: {value}")
运行结果:
name: Alice
age: 30
city: New York
(7) 遍历 集合.
numbers = {1, 2, 3, 4, 5}
for num in numbers:
print(num)
运行结果:
1
2
3
4
5
(8) for循环可以与else子句结合
当循环正常完成(即没有break语句中断)后执行else后的代码块。
for i in range(5):
if i == 3:
break
print(i)
else:
print("Loop completed normally.")
break表示中断,即代码终止运行,跳出循环结束。因为break语句在 i == 3 时触发,所以else块不会执行。
运行结果:
0
1
2
如果把break 换成 continue,continue表示 继续运行后续的代码。else块将会执行.
for i in range(5):
if i == 3:
continue
print(i)
else:
print("Loop completed normally.")
运行结果:
0
1
2
4
Loop completed normally.
(9) 使用enumerate()函数同时获取序列的索引和值
enumerate()函数 是Python内置的一个非常有用的功能,它可以在遍历序列时同时获取元素的索引和值。
fruits = ['apple', 'banana', 'cherry', 'date', 'elderberry']
# 使用enumerate()遍历列表
for index, fruit in enumerate(fruits):
print(f"索引: {index}, 品种: {fruit}")
enumerate(fruits) 返回一个枚举对象,其中每个元素都是一个包含索引和对应值的元组 (index, value)。
for循环会依次解包这些元组,index 变量接收索引,fruit 变量接收对应的值。
这样,就可以在循环中同时访问到 序列的索引 和 值,而不需要自己维护一个计数器。
运行结果:
索引: 0, 品种: apple
索引: 1, 品种: banana
索引: 2, 品种: cherry
索引: 3, 品种: date
索引: 4, 品种: elderberry
3 while循环
在Python中,while循环用于在满足特定条件时重复执行一段代码。while循环会一直运行,直到指定的条件变为False。
while 条件:
# 当条件为真时执行的代码块
# 可选的 continue 语句
# 如果执行,会跳过当前循环体剩余的部分并继续下一轮循环
# 可选的 break 语句
# 如果执行,会退出整个循环,不再检查条件...
(1) 最简单的 while语句
条件为真,一直执行下去,就死循环了。
while True:
print('Hello world.')
运行结果:
Hello world.
Hello world.
Hello world.
…
在终端窗口 输入 CTRL+ c,结束死循环。
(2) 正常的while语句,条件不满足时,跳出循环。
counter = 0
while counter < 5:
print(counter)
counter += 1
运行结果:
0
1
2
3
4
(3) 读取用户输入直到满足特定条件
guess = None
while guess != "quit":
guess = input("请输入一个数字(输入'quit'退出):")
if guess.isdigit():
# 处理数字输入
pass
elif guess.lower() == "quit":
break
else:
print("无效输入,请重新尝试。")
print("游戏结束")
运行结果:
请输入一个数字(输入’quit’退出):>? 10
请输入一个数字(输入’quit’退出):>? 100
请输入一个数字(输入’quit’退出):>? quit
游戏结束
(4) 使用while-else结构
numbers = [-5, 0, -3, 2, 9, -1, 7]
found_positive = False
index = 0
while index < len(numbers):
if numbers[index] > 0:
found_positive = True
print(f"找到的第一个正整数是:{numbers[index]}")
break
else:
index += 1
else:
if not found_positive:
print("列表中没有正整数")
while 循环检查 index 是否小于列表长度,如果是,则检查当前元素是否大于0。
如果找到一个正整数,found_positive 设置为 True,打印该正整数并使用 break 退出循环。
如果遍历完整个列表都没有找到正整数,else 子句会执行,打印一条消息表示列表中没有正整数。
运行结果:
找到的第一个正整数是:2
4 综合练习
使用if语句、for循环和while循环的代码示例 ,找到某个数值区间内的 第一个 质数。
# 用户输入
user_input = input("请输入一个起始数字和一个上限数值(用逗号分隔):")
start, limit = map(int, user_input.split(','))
# 验证输入
if start < 2 or limit < 2:
print("起始数字和上限都应大于或等于2")
else:
prime_candidate = start
while prime_candidate <= limit:
# 检查是否为质数
for i in range(2, prime_candidate):
if prime_candidate % i == 0:
prime_candidate += 1 # 跳过非质数
break
else:
print(f"找到的第一个质数是:{prime_candidate}")
break # 找到质数,退出循环
else:
print("在给定范围内没有找到质数")
- 输入的起始数字和上限被读取并转换为整数。
- 使用if语句验证输入的合法性。
- 使用while循环遍历从 start 到 limit 的数字。
- 在while循环内部,使用for循环检查当前数字是否为质数。
- 如果当前数字不是质数,for循环结束后,prime_candidate 递增并继续下一个数字。
- 如果当前数字是质数,else 子句与 for 循环配对,表示没有执行 break 语句跳出 for 循环 ,因此打印找到的质数并退出while循环。
- 如果 while 循环结束后仍未找到质数,执行 else 子句,表示在给定范围内没有找到质数
运行结果:
请输入一个起始数字和一个上限数值(用逗号分隔):>? 10,1000
找到的第一个质数是:11
5 后记
在phthon编程中,避免无限循环,确保循环条件有改变的途径。
使用列表推导式(List Comprehensions)和生成器表达式(Generator Expressions)可以更高效地处理循环和创建新列表。
注意循环中的复杂度,避免不必要的嵌套循环,以提高代码效率。
理解并熟练运用这些循环语句是编写高效Python代码的关键。在实际编程中,根据问题的需求选择合适的循环类型,并结合控制语句来编写灵活的代码 。