Python 运算符、条件判断与循环控制,让程序从顺序执行变成真正会做事
第一篇文章里,我们让程序能接收输入、保存数据、输出结果。
但那种程序还是太老实了。
它只能从上到下一行一行执行。真实程序一定会遇到选择和重复,比如密码对不对,成绩是否及格,订单要不要打折,一批数据要不要逐个处理。
这篇文章讲两个核心能力:
- 条件判断,让程序走不同分支。
- 循环控制,让程序重复处理任务。
把这两个能力连起来,你就能写出大量真正有用的小程序。
运算符先掌握三类
运算符很多,但入门阶段先掌握三类。
算术运算符:
print(10 + 3)
print(10 - 3)
print(10 * 3)
print(10 / 3)
print(10 // 3)
print(10 % 3)
print(2 ** 3)
这里有几个容易混淆的点。
/ 是普通除法,结果通常是小数。
// 是整除,只保留整数部分。
% 是取余数,经常用来判断能不能整除。
** 是幂运算。
比较运算符:
print(10 > 3)
print(10 >= 3)
print(10 < 3)
print(10 <= 3)
print(10 == 3)
print(10 != 3)
比较结果只有两个,True 或 False。
逻辑运算符:
age = 20
has_ticket = True
print(age >= 18 and has_ticket)
print(age >= 18 or has_ticket)
print(not has_ticket)
and 表示两个条件都成立。
or 表示至少一个条件成立。
not 表示取反。
短路逻辑,不只是语法细节
and 和 or 有短路逻辑。
print(False and 1 / 0)
这行不会报错。因为 and 左边已经是 False,整体不可能为真,右边不会继续计算。
再看:
print(True or 1 / 0)
也不会报错。因为 or 左边已经是 True,整体一定为真。
实际写代码时,短路逻辑经常用来避免空值错误:
name = ""
if name and len(name) > 3:
print("名字长度大于 3")
else:
print("名字为空或长度不够")
如果 name 是空字符串,后面的 len(name) > 3 不会造成问题。
if 条件判断
最基本的判断:
score = int(input("请输入成绩:"))
if score >= 60:
print("及格")
else:
print("不及格")
Python 用缩进表示代码块。
属于 if 的代码必须缩进。
多分支判断:
score = int(input("请输入成绩:"))
if score >= 90:
print("优秀")
elif score >= 80:
print("良好")
elif score >= 60:
print("及格")
else:
print("需要继续努力")
分支顺序很重要。
如果你先写 score >= 60,那么 90 分也会先命中及格分支,后面的优秀分支就没机会执行。
真值判断
Python 里不只有 True 和 False 能放进 if。
下面这些值会被当成假:
False
None
0
0.0
""
[]
{}
set()
比如:
name = input("请输入姓名:")
if name:
print(f"你好,{name}")
else:
print("你还没有输入姓名")
空字符串会被当成假。
这类写法很常用,但初学阶段要知道它背后的规则,不要觉得神秘。
登录判断案例
ok_account = "18888888888"
ok_password = "666888"
account = input("请输入账号:")
password = input("请输入密码:")
if account == ok_account and password == ok_password:
print("登录成功")
else:
print("账号或密码错误")
流程图:
这个案例看起来简单,但包含了实际系统里很重要的思想:
多个条件共同决定结果。
闰年判断案例
规则:
能被 4 整除但不能被 100 整除,或者能被 400 整除,就是闰年。
year = int(input("请输入年份:"))
normal_leap = year % 4 == 0 and year % 100 != 0
century_leap = year % 400 == 0
if normal_leap or century_leap:
print(f"{year} 是闰年")
else:
print(f"{year} 是平年")
这里不要急着把所有条件塞进一行。
拆成 normal_leap 和 century_leap,读起来更清楚。
match 适合处理固定选项
Python 3.10 之后支持 match。
command = input("请输入命令:")
match command:
case "start":
print("开始运行")
case "stop":
print("停止运行")
case "restart":
print("重新启动")
case _:
print("未知命令")
如果是简单范围判断,比如成绩等级,用 if 更自然。
如果是多个固定命令,比如菜单选择,match 更清楚。
循环解决重复问题
判断解决选择。
循环解决重复。
循环的通用流程是:
写循环时不要先背语法,先想三件事:
- 重复做什么。
- 什么条件下继续。
- 什么条件下停止。
while 循环
while 适合“不确定循环几次,但知道停止条件”的场景。
password = ""
while password != "666888":
password = input("请输入密码:")
print("密码正确")
只要密码不正确,就继续输入。
计数循环:
count = 1
while count <= 5:
print(f"第 {count} 次循环")
count = count + 1
count = count + 1 非常重要。
忘了它,就会死循环。
for 循环
for 适合遍历一批数据。
students = ["小明", "小红", "小刚"]
for student in students:
print(f"{student},欢迎学习 Python")
每次循环,列表里的一个元素会交给变量 student。
遍历字符串:
word = "Python"
for char in word:
print(char)
字符串也是可遍历对象。
range() 的完整用法
for i in range(5):
print(i)
输出 0 到 4。
常见写法:
range(5) # 0, 1, 2, 3, 4
range(1, 6) # 1, 2, 3, 4, 5
range(1, 10, 2) # 1, 3, 5, 7, 9
range() 不包含结束值。
这和后面学切片时的规则一致。
循环里的三种常见模式
第一种,计数器。
count = 0
for number in range(1, 101):
if number % 2 == 0:
count = count + 1
print(f"偶数数量:{count}")
第二种,累加器。
total = 0
for number in range(1, 101):
total = total + number
print(total)
第三种,标志位。
numbers = [3, 8, 11, 20]
has_even = False
for number in numbers:
if number % 2 == 0:
has_even = True
break
if has_even:
print("列表中有偶数")
else:
print("列表中没有偶数")
这三种模式在真实代码里特别常见。
break 和 continue
break 结束整个循环:
for number in range(1, 11):
if number == 5:
break
print(number)
输出 1 到 4。
continue 跳过本次循环:
for number in range(1, 6):
if number == 3:
continue
print(number)
输出 1、2、4、5。
选择标准很简单:
如果后面都不用做了,用 break。
如果只是这一次不用做,下一次还继续,用 continue。
完整案例,订单优惠批量计算
需求:
用户输入多个订单金额,输入 q 结束。金额满 200 打 8 折,满 100 减 20,否则原价。
total_income = 0
while True:
raw_amount = input("请输入订单金额,输入 q 结束:")
if raw_amount == "q":
break
amount = float(raw_amount)
if amount >= 200:
final_amount = amount * 0.8
elif amount >= 100:
final_amount = amount - 20
else:
final_amount = amount
total_income = total_income + final_amount
print(f"本单应付:{final_amount:.2f} 元")
print(f"今日总收入:{total_income:.2f} 元")
这个案例把判断和循环连起来了。
循环负责持续处理订单。
判断负责计算每一单的优惠规则。
常见错误和修复
把 = 当成 ==
= 是赋值。
== 是比较。
age = 18
if age == 18:
print("刚成年")
忘记冒号
错误示例:
if age >= 18
print("成年")
正确:
if age >= 18:
print("成年")
死循环
count = 1
while count <= 5:
print(count)
修复:
count = 1
while count <= 5:
print(count)
count = count + 1
分支顺序错误
错误:
score = 95
if score >= 60:
print("及格")
elif score >= 90:
print("优秀")
修复:
score = 95
if score >= 90:
print("优秀")
elif score >= 60:
print("及格")
练习,猜数字游戏
要求:
- 程序内置答案
answer = 7。 - 用户反复输入数字。
- 猜大了提示太大,猜小了提示太小。
- 猜对后结束。
参考代码:
answer = 7
while True:
guess = int(input("请输入你猜的数字:"))
if guess > answer:
print("太大了")
elif guess < answer:
print("太小了")
else:
print("猜对了")
break
能写出这个程序,说明你已经把输入、类型转换、判断和循环串起来了。
参考资料
- Python 官方流程控制教程:https://docs.python.org/3/tutorial/controlflow.html
更多推荐



所有评论(0)