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

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

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

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

  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 = 20
has_ticket = True

print(age >= 18 and has_ticket)
print(age >= 18 or has_ticket)
print(not has_ticket)

and 表示两个条件都成立。

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

not 表示取反。

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

andor 有短路逻辑。

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 里不只有 TrueFalse 能放进 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_leapcentury_leap,读起来更清楚。

match 适合处理固定选项

Python 3.10 之后支持 match

command = input("请输入命令:")

match command:
    case "start":
        print("开始运行")
    case "stop":
        print("停止运行")
    case "restart":
        print("重新启动")
    case _:
        print("未知命令")

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

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

循环解决重复问题

判断解决选择。

循环解决重复。

循环的通用流程是:

进入循环

是否继续?

执行循环体

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

退出循环

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

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

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("列表中没有偶数")

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

breakcontinue

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("及格")

练习,猜数字游戏

要求:

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

参考代码:

answer = 7

while True:
    guess = int(input("请输入你猜的数字:"))

    if guess > answer:
        print("太大了")
    elif guess < answer:
        print("太小了")
    else:
        print("猜对了")
        break

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

参考资料

Logo

这里是“一人公司”的成长家园。我们提供从产品曝光、技术变现到法律财税的全栈内容,并连接云服务、办公空间等稀缺资源,助你专注创造,无忧运营。

更多推荐