Python 运算符、条件判断与循环控制,让程序从顺序执行变成真正会做事
2026/6/15 21:19:58 网站建设 项目流程

第一篇文章里,我们让程序能接收输入、保存数据、输出结果。

但那种程序还是太老实了。

它只能从上到下一行一行执行。真实程序一定会遇到选择和重复,比如密码对不对,成绩是否及格,订单要不要打折,一批数据要不要逐个处理。

这篇文章讲两个核心能力:

  1. 条件判断,让程序走不同分支。
  2. 循环控制,让程序重复处理任务。

把这两个能力连起来,你就能写出大量真正有用的小程序。

运算符先掌握三类

运算符很多,但入门阶段先掌握三类。

算术运算符:

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)

比较结果只有两个,TrueFalse

逻辑运算符:

age=20has_ticket=Trueprint(age>=18andhas_ticket)print(age>=18orhas_ticket)print(nothas_ticket)

and表示两个条件都成立。

or表示至少一个条件成立。

not表示取反。

短路逻辑,不只是语法细节

andor有短路逻辑。

print(Falseand1/0)

这行不会报错。因为and左边已经是False,整体不可能为真,右边不会继续计算。

再看:

print(Trueor1/0)

也不会报错。因为or左边已经是True,整体一定为真。

实际写代码时,短路逻辑经常用来避免空值错误:

name=""ifnameandlen(name)>3:print("名字长度大于 3")else:print("名字为空或长度不够")

如果name是空字符串,后面的len(name) > 3不会造成问题。

if条件判断

最基本的判断:

score=int(input("请输入成绩:"))ifscore>=60:print("及格")else:print("不及格")

Python 用缩进表示代码块。

属于if的代码必须缩进。

多分支判断:

score=int(input("请输入成绩:"))ifscore>=90:print("优秀")elifscore>=80:print("良好")elifscore>=60:print("及格")else:print("需要继续努力")

分支顺序很重要。

如果你先写score >= 60,那么 90 分也会先命中及格分支,后面的优秀分支就没机会执行。

真值判断

Python 里不只有TrueFalse能放进if

下面这些值会被当成假:

FalseNone00.0""[]{}set()

比如:

name=input("请输入姓名:")ifname:print(f"你好,{name}")else:print("你还没有输入姓名")

空字符串会被当成假。

这类写法很常用,但初学阶段要知道它背后的规则,不要觉得神秘。

登录判断案例

ok_account="18888888888"ok_password="666888"account=input("请输入账号:")password=input("请输入密码:")ifaccount==ok_accountandpassword==ok_password:print("登录成功")else:print("账号或密码错误")

流程图:

输入账号和密码

账号正确?

登录失败

密码正确?

登录成功

这个案例看起来简单,但包含了实际系统里很重要的思想:

多个条件共同决定结果。

闰年判断案例

规则:

能被 4 整除但不能被 100 整除,或者能被 400 整除,就是闰年。

year=int(input("请输入年份:"))normal_leap=year%4==0andyear%100!=0century_leap=year%400==0ifnormal_leaporcentury_leap:print(f"{year}是闰年")else:print(f"{year}是平年")

这里不要急着把所有条件塞进一行。

拆成normal_leapcentury_leap,读起来更清楚。

match适合处理固定选项

Python 3.10 之后支持match

command=input("请输入命令:")matchcommand:case"start":print("开始运行")case"stop":print("停止运行")case"restart":print("重新启动")case_:print("未知命令")

如果是简单范围判断,比如成绩等级,用if更自然。

如果是多个固定命令,比如菜单选择,match更清楚。

循环解决重复问题

判断解决选择。

循环解决重复。

循环的通用流程是:

进入循环

是否继续?

执行循环体

更新状态或进入下一个元素

退出循环

写循环时不要先背语法,先想三件事:

  1. 重复做什么。
  2. 什么条件下继续。
  3. 什么条件下停止。

while循环

while适合“不确定循环几次,但知道停止条件”的场景。

password=""whilepassword!="666888":password=input("请输入密码:")print("密码正确")

只要密码不正确,就继续输入。

计数循环:

count=1whilecount<=5:print(f"第{count}次循环")count=count+1

count = count + 1非常重要。

忘了它,就会死循环。

for循环

for适合遍历一批数据。

students=["小明","小红","小刚"]forstudentinstudents:print(f"{student},欢迎学习 Python")

每次循环,列表里的一个元素会交给变量student

遍历字符串:

word="Python"forcharinword:print(char)

字符串也是可遍历对象。

range()的完整用法

foriinrange(5):print(i)

输出 0 到 4。

常见写法:

range(5)# 0, 1, 2, 3, 4range(1,6)# 1, 2, 3, 4, 5range(1,10,2)# 1, 3, 5, 7, 9

range()不包含结束值。

这和后面学切片时的规则一致。

循环里的三种常见模式

第一种,计数器。

count=0fornumberinrange(1,101):ifnumber%2==0:count=count+1print(f"偶数数量:{count}")

第二种,累加器。

total=0fornumberinrange(1,101):total=total+numberprint(total)

第三种,标志位。

numbers=[3,8,11,20]has_even=Falsefornumberinnumbers:ifnumber%2==0:has_even=Truebreakifhas_even:print("列表中有偶数")else:print("列表中没有偶数")

这三种模式在真实代码里特别常见。

breakcontinue

break结束整个循环:

fornumberinrange(1,11):ifnumber==5:breakprint(number)

输出 1 到 4。

continue跳过本次循环:

fornumberinrange(1,6):ifnumber==3:continueprint(number)

输出 1、2、4、5。

选择标准很简单:

如果后面都不用做了,用break

如果只是这一次不用做,下一次还继续,用continue

完整案例,订单优惠批量计算

需求:

用户输入多个订单金额,输入q结束。金额满 200 打 8 折,满 100 减 20,否则原价。

total_income=0whileTrue:raw_amount=input("请输入订单金额,输入 q 结束:")ifraw_amount=="q":breakamount=float(raw_amount)ifamount>=200:final_amount=amount*0.8elifamount>=100:final_amount=amount-20else:final_amount=amount total_income=total_income+final_amountprint(f"本单应付:{final_amount:.2f}元")print(f"今日总收入:{total_income:.2f}元")

这个案例把判断和循环连起来了。

循环负责持续处理订单。

判断负责计算每一单的优惠规则。

常见错误和修复

=当成==

=是赋值。

==是比较。

age=18ifage==18:print("刚成年")

忘记冒号

错误示例:

if age >= 18 print("成年")

正确:

ifage>=18:print("成年")

死循环

count=1whilecount<=5:print(count)

修复:

count=1whilecount<=5:print(count)count=count+1

分支顺序错误

错误:

score=95ifscore>=60:print("及格")elifscore>=90:print("优秀")

修复:

score=95ifscore>=90:print("优秀")elifscore>=60:print("及格")

练习,猜数字游戏

要求:

  1. 程序内置答案answer = 7
  2. 用户反复输入数字。
  3. 猜大了提示太大,猜小了提示太小。
  4. 猜对后结束。

参考代码:

answer=7whileTrue:guess=int(input("请输入你猜的数字:"))ifguess>answer:print("太大了")elifguess<answer:print("太小了")else:print("猜对了")break

能写出这个程序,说明你已经把输入、类型转换、判断和循环串起来了。

参考资料

  • Python 官方流程控制教程:https://docs.python.org/3/tutorial/controlflow.html

需要专业的网站建设服务?

联系我们获取免费的网站建设咨询和方案报价,让我们帮助您实现业务目标

立即咨询