大家好,我是技术界的小萌新,今天要和大家分享一些干货。在阅读之前请先点赞,给我一点鼓励吧!这对我来说很重要 (*^▽^*)
在Python中,if
、while
、for
这些关键字用于控制程序的执行流程,它们统称为控制流语句。
(Control Flow Statements)。
if
语句用于基于条件判断来执行不同的代码分支。while
循环用于在满足特定条件时重复执行一段代码。for
循环用于遍历序列(如列表、元组、字典等)中的每个元素,执行代码块。这些控制流语句是编程中实现逻辑控制和决策的基本结构。
if 条件判断:
条件成立 True 时执行的代码
else:
条件不成立 False 时执行代码
if 条件1:
elif 条件2:
elif 条件3:
else:
所有条件不满足时执行语句
提醒:
多个 elif 之间是互斥且有序的,上一个条件满足后就不会在进行后续判断。
表示多个 if 判断成功、失败的嵌套分支,用于多条件、多层次的逻辑判断。
if 条件1:
语句1
语句2
if 条件1.1:
条件1满足,条件1.1满足后执行语句
elif:
条件1.1不满足后执行语句
elif 条件2:
条件1不满足、条件2满足后执行语句
else:
所有条件不满足时执行语句
提醒:
注意每个判断块之间的层次关系。
Python中的三元操作符(ternary operator)是一种简洁的表达式处理方式,可以根据语句结果进行赋值。 if-else
的逻辑是简洁的,它在单行中根据条件是否满足来选择两个值中的一个进行赋值。如下示例:
x = 10
y = 20
result = x if x > y else y
print(result)
打印:
20
x > y (condition)
是一个布尔表达式,它会被评估为True
或False
。条件
为True
,则result
将被赋予值 x
。条件
为False
,则result
将被赋予值 y
。 这种表达式在很多编程语言中都有,但在 Python 中使用时,它特别简洁,因为它避免了需要写完整的if-else
语句。
其他应用场景:
根据条件改变函数的返回值 return
:
def get_message(status):
return "Success" if status else "Failure"
简化其他复杂表达式需要进行if-else
逻辑判断的情景:
value = 5
print("Greater than 3" if value > 3 else "3 or less")
注意:
- 条件表达式应该尽量保持简单,如果逻辑过于复杂,使用完整的 if-else 语句可能更清晰。
- 条件表达式的结果可以是任何类型的表达式,不仅限于返回两个值。
while 条件:
语句1
语句2
# 二分法循环猜数游戏
def computer_guesses_number():
# 设置数字范围
lower_bound = 1
upper_bound = 100
attempts = 0
print("欢迎来到猜数字游戏!")
print(f"请在心里想好一个 {lower_bound} 到 {upper_bound} 之间的数字。")
input("按 Enter 键继续...")
while lower_bound <= upper_bound:
attempts += 1
# 使用二分法进行猜测
guess = (lower_bound + upper_bound) // 2
print(f"我的猜测是: {guess}")
feedback = input("如果猜得太高,请输入 'H';如果猜得太低,请输入 'L';如果猜对了,请输入 'C': ").upper()
if feedback == 'H':
upper_bound = guess - 1
elif feedback == 'L':
lower_bound = guess + 1
elif feedback == 'C':
print(f"太棒了!我猜中了你的数字 {guess}!")
print(f"我总共猜了 {attempts} 次。")
return
else:
print("无效输入,请输入 'H', 'L' 或 'C'。")
# 运行游戏
computer_guesses_number()
# 经典打印99乘法表
i=1
while i<=9: # 外循环控制 行数
j=1
while j<=i: # 内循环控制 列数
print(f"{j} * {i} = {i*j}\t",end='') # 给 end 传参,一行多个输出不换行,\t 控制格式每个输出控制对其格式
j+=1
print()
i+=1
while 特点:循环条件自定义,可自行控制循环条件。
for 特点:for 循环本质是一种 “轮询” 机制,对一批数据集进行 “逐个处理”,无法自定义循环条件。
基础语法:
for 临时变量 in 待处理数据集:
循环执行的代码
列表推导式(List Comprehension)是 Python 中一种优雅且简洁的构建列表的方法,它提供了一种基于现有列表(或其他可迭代对象)创建新列表的表达式。列表推导式通常用于从一个列表中选择、过滤或应用函数变换元素,并生成一个新的列表。
基本语法:
新的列表 = [表达式 for 变量 in 可迭代对象 if 条件 ] # if 条件 (可选)
表达式
:对每个元素进行的操作或计算。变量
:在可迭代对象中遍历的元素的临时变量。可迭代对象
:要遍历的列表、元组、字典等。条件
(可选):一个布尔表达式,用于过滤可迭代对象中的元素,if 条件为真时,可迭代对象中的变量才可应用到表达式中。示例:
1) 简单列表推导式: 从一个范围中创建一个新列表,包含平方的数字:
squares = [x**2 for x in range(10)] # range(10) = [0, 1, 2, 3, 4, 5, 6, 7, 8, 9],从 0 计数无下标 10
print(squares)
打印:
[0, 1, 4, 9, 16, 25, 36, 49, 64, 81]
2) 带条件的列表推导式:创建一个新列表,只包含原列表中的偶数:
original_list = [1, 2, 3, 4, 5, 6]
even_numbers = [num for num in original_list if num % 2 == 0]
print(even_numbers)
打印:
[2, 4, 6]
3) 嵌套列表推导式:创建一个二维列表,其中包含乘法表:
multiplication_table = [[x * y for y in range(1, 11)] for x in range(1, 6)]
print(multiplication_table)
打印:
[
[1, 2, 3, 4, 5, 6, 7, 8, 9, 10],
[2, 4, 6, 8, 10, 12, 14, 16, 18, 20],
[3, 6, 9, 12, 15, 18, 21, 24, 27, 30],
[4, 8, 12, 16, 20, 24, 28, 32, 36, 40],
[5, 10, 15, 20, 25, 30, 35, 40, 45, 50]
]
列表推导式的优点包括:
for
循环更易读。for
循环执行更快。 然而,也要注意不要过度使用列表推导式,特别是当逻辑变得复杂或难以理解时,传统的for
循环可能更清晰。此外,列表推导式不适用于非常大的数据集,因为它们会一次性在内存中创建整个列表,这可能会导致性能问题或内存不足。在这些情况下,生成器表达式可能是更好的选择。
continue
: 中断当前块当前次的循环,进入下一次循环。
break
: 中断当前循环块的循环,进入循环体外执行后续代码。
在使用控制流语句时,开发者可能会遇到一些常见的错误和陷阱。了解这些潜在问题可以帮助你编写更健壮和可靠的代码。以下是一些常见的错误和如何避免它们:
while
或for
循环中,如果循环条件永远为真,或者没有适当的退出机制,将导致无限循环。break
语句退出循环。IndexError
。if-else
语句中,错误的逻辑判断可能导致代码执行错误的分支。try-except
语句时,如果没有正确地管理资源,如文件句柄或网络连接,可能会导致资源泄露。finally
子句或上下文管理器(with
语句)来确保资源被正确关闭。try-except
块中,如果没有捕获所有可能的异常,或者捕获了异常但没有适当的错误处理逻辑,可能会导致程序崩溃或产生不可预料的行为。continue
)使用不当:
continue
可能会跳过某些重要的执行步骤,导致逻辑错误。continue
,并确保它不会影响循环的预期行为。if-else
语句。break
)的误用:
break
可能只退出内层循环,而不是所有循环。break
的意图,并在需要退出所有循环时使用标志变量或异常。通过了解这些常见的错误和陷阱,你可以更加小心地使用控制流语句,并编写出更加健壮和易于维护的代码。此外,编写单元测试和进行代码审查也是预防和发现这些错误的有效方法。
文章到这里就结束了,希望我的分享能为你的技术之旅增添一抹亮色。如果你喜欢这篇文章,请点赞收藏支持我,给予我前行的动力!