☰
Python入门篇之条件、循环
2026/10/16 7:22:16 网站建设 项目流程

前言


入门阶段真正的分水岭,不是「会不会写print」,而是「会不会让程序自己做判断、自己重复做事」。条件语句决定「走哪条路」,循环语句决定「重复几遍」。这两件事构成了所有程序的骨架。


初学者的典型误解有三个:一是以为if后面的括号是必需的(那是 C/Java 的习惯,Python 里不需要);二是以为else if是关键字(Python 里写成elif);三是不知道 Python 的循环也带else子句,而且它和if的else含义完全不同。


本文用 Python 3 讲解条件与循环的最基本用法,包括布尔判断、if/elif/else、while、for、break/continue,以及容易被忽略的循环else。文中所有写法都可在 Python 3.8 及以上直接运行。


一、先弄清「真」与「假」


Python 的条件判断不要求必须是bool对象,任何对象都能被判断真假。规则是:



  • 假值:False、None、数值0、空字符串""、空列表[]、空元组()、空字典{}、空集合set()

  • 真值:其余一切,包括非空容器和非零数值


# 适用于 Python 3 全版本
print(bool("")) # False,空字符串是假
print(bool("0")) # True,非空字符串是真(注意不是数字 0)
print(bool([0])) # True,非空列表是真,哪怕里面装的是 0
print(bool(0.0)) # False

理解这一点很重要:if items:和if len(items) > 0:大多数时候等价,但前者会在items是None时也走假分支,而后者会抛TypeError。


比较运算符和逻辑运算符:




运算符含义示例



==值相等3 == 3为True

!=值不等3 != 4为True

is是否是同一个对象判断None时用

and逻辑与,短路a and b

or逻辑或,短路a or b

not逻辑非not a



二、条件语句:if / elif / else


基本形态如下,注意冒号和缩进:


# 适用于 Python 3 全版本
score = 78

if score >= 90:
grade = "A"
elif score >= 80:
grade = "B"
elif score >= 60:
grade = "C"
else:
grade = "D"

print(grade) # C

几个必须记牢的点:



  1. 条件表达式后面必须有冒号:。

  2. 代码块靠缩进表示,同一块内缩进量必须一致(通常 4 个空格)。

  3. elif是「else if」的缩写,一个if后面可以有任意多个elif,最多一个else。

  4. 判断顺序是从上到下,命中第一个为真的分支后就整条if语句结束,后面的条件不再求值。所以范围判断要从窄到宽排。


Python 还有一种把条件写在一行里的条件表达式(常被叫做三元运算符):


# 适用于 Python 3 全版本
age = 20
label = "成年" if age >= 18 else "未成年"
print(label) # 成年

它的形式是「值为真时取的值 if 条件 else 值为假时取的值」,顺序和 C 的? :不一致,别写反。


三、循环语句:while 与 for


3.1 while:条件为真就一直做


# 适用于 Python 3 全版本
count = 0
total = 0
while count < 5:
total += count
count += 1 # 忘掉这一行就会死循环
print(total) # 10

while用于「不知道要循环几次」的场景。循环体里必须有机会改变条件,否则就是死循环。


3.2 for:遍历可迭代对象


Python 的for是「遍历」而不是 C 那种「计数器循环」。凡是可迭代对象(列表、字符串、字典、文件、range 对象等)都能直接遍历:


# 适用于 Python 3 全版本
fruits = ["apple", "banana", "cherry"]
for fruit in fruits:
print(fruit)

for ch in "abc":
print(ch) # 逐个字符

for i in range(3): # range(3) 产生 0, 1, 2
print(i)

range()的常见形态:




调用产生的序列



range(5)0, 1, 2, 3, 4

range(2, 6)2, 3, 4, 5

range(0, 10, 3)0, 3, 6, 9

range(5, 0, -1)5, 4, 3, 2, 1



range对象是惰性的,不会一次性生成整张列表,所以在 Python 3 里range(10**9)本身不占内存。这一点和 Python 2 的range返回列表、需要xrange的旧习惯完全不同——xrange在 Python 3 里已被移除。


3.3 需要下标时用 enumerate


不要写for i in range(len(fruits))再去索引,直接用enumerate:


# 适用于 Python 3 全版本
fruits = ["apple", "banana", "cherry"]
for index, fruit in enumerate(fruits):
print(index, fruit)
# 0 apple
# 1 banana
# 2 cherry

四、break、continue 与循环的 else



  • break:立即结束整个循环

  • continue:跳过本次剩余部分,进入下一次迭代

  • 循环的else:只有循环正常结束(条件变假或迭代器耗尽)时才执行;被break打断则不执行


# 适用于 Python 3 全版本
numbers = [1, 3, 5, 6, 7]

for n in numbers:
if n % 2 == 0:
print(f"找到偶数 {n}")
break
else:
print("没有偶数")
# 输出:找到偶数 6

循环else的经典用途就是「查找未命中」的分支,能避免额外设一个布尔标记变量。


实战:一个猜数字小游戏


下面这段代码综合了本文全部知识点,可直接保存为guess.py运行(需要 Python 3.8+):


# 适用于 Python 3.8+
import random

def main():
answer = random.randint(1, 100)
tries = 0
while True:
raw = input("猜一个 1 到 100 的整数(q 退出):")
if raw.strip().lower() == "q":
print(f"已退出,答案是 {answer}")
break
if not raw.strip().lstrip("-").isdigit():
print("请输入整数。")
continue
guess = int(raw)
tries += 1
if guess < answer:
print("小了")
elif guess > answer:
print("大了")
else:
print(f"猜对了!共用了 {tries} 次。")
break

if __name__ == "__main__":
main()

这段代码同时演示了:while True配合break的输入循环、continue跳过非法输入、if/elif/else三分支、以及input()返回的永远是字符串所以需要int()转换。


常见坑点



  1. 把elif写成else if


❌else if score >= 80:—— 这是 C/Java 的写法,Python 会报SyntaxError✅elif score >= 80:



  1. 漏写冒号


❌if x > 0换行直接写代码块 ✅if x > 0:冒号不能省



  1. 用=做比较


❌if x = 1:—— 在 Python 3 里这是语法错误(2 里也只是意外合法) ✅if x == 1:



  1. while里忘了改变量导致死循环


❌while count < 5: total += count✅ 循环体内加上count += 1



  1. 缩进不一致


❌ 同一代码块里一行 4 空格、一行 2 空格,或空格与制表符混用 ✅ 全文件统一用 4 个空格,混用时 Python 会抛TabError



  1. 误以为循环else总会执行


❌ 认为for ... else的else就等于「循环结束后必做」 ✅else只在循环没有被break打断时执行;想无条件收尾应用finally或循环后直接写



  1. 用range(len(x))手动索引


❌for i in range(len(fruits)): print(fruits[i])✅for fruit in fruits:直接迭代;需要下标时用enumerate(fruits)



  1. 以为range()返回列表


❌ 说「range(5)是一个[0,1,2,3,4]列表」 ✅ 它返回惰性的range对象,要列表得写list(range(5))


总结




主题关键结论



真假判断空容器、0、None、""为假,其余为真

条件语句if/elif/else,冒号加缩进,从上到下命中即停

条件表达式A if 条件 else B,与 C 的三元顺序不同

while条件为真就循环,须保证条件会变

for遍历可迭代对象,不是计数器循环

range惰性对象,range(start, stop, step)

循环控制break跳出、continue跳过

循环else未被break打断时才执行



条件和循环是「能写程序」的最低门槛。把真假判断、elif的匹配顺序和循环else的语义这三件事吃透,后面学函数、类、异常时就不会被语法细节反复绊倒。




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

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

立即咨询