资讯动态

Python入门篇之条件、循环

发布时间:2026/10/16 7:22:26 来源:尧图企业网站定制
前言入门阶段真正的分水岭不是「会不会写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非空字符串是真注意不是数字 0print(bool([0])) # True非空列表是真哪怕里面装的是 0print(bool(0.0)) # False理解这一点很重要if items:和if len(items) 0:大多数时候等价但前者会在items是None时也走假分支而后者会抛TypeError。比较运算符和逻辑运算符运算符含义示例值相等3 3为True!值不等3 ! 4为Trueis是否是同一个对象判断None时用and逻辑与短路a and bor逻辑或短路a or bnot逻辑非not a二、条件语句if / elif / else基本形态如下注意冒号和缩进# 适用于 Python 3 全版本score 78if score 90:grade Aelif score 80:grade Belif score 60:grade Celse:grade Dprint(grade) # C几个必须记牢的点条件表达式后面必须有冒号:。代码块靠缩进表示同一块内缩进量必须一致通常 4 个空格。elif是「else if」的缩写一个if后面可以有任意多个elif最多一个else。判断顺序是从上到下命中第一个为真的分支后就整条if语句结束后面的条件不再求值。所以范围判断要从窄到宽排。Python 还有一种把条件写在一行里的条件表达式常被叫做三元运算符# 适用于 Python 3 全版本age 20label 成年 if age 18 else 未成年print(label) # 成年它的形式是「值为真时取的值 if 条件 else 值为假时取的值」顺序和 C 的? :不一致别写反。三、循环语句while 与 for3.1 while条件为真就一直做# 适用于 Python 3 全版本count 0total 0while count 5:total countcount 1 # 忘掉这一行就会死循环print(total) # 10while用于「不知道要循环几次」的场景。循环体里必须有机会改变条件否则就是死循环。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, 2print(i)range()的常见形态调用产生的序列range(5)0, 1, 2, 3, 4range(2, 6)2, 3, 4, 5range(0, 10, 3)0, 3, 6, 9range(5, 0, -1)5, 4, 3, 2, 1range对象是惰性的不会一次性生成整张列表所以在 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 与循环的 elsebreak立即结束整个循环continue跳过本次剩余部分进入下一次迭代循环的else只有循环正常结束条件变假或迭代器耗尽时才执行被break打断则不执行# 适用于 Python 3 全版本numbers [1, 3, 5, 6, 7]for n in numbers:if n % 2 0:print(f找到偶数 {n})breakelse:print(没有偶数)# 输出找到偶数 6循环else的经典用途就是「查找未命中」的分支能避免额外设一个布尔标记变量。实战一个猜数字小游戏下面这段代码综合了本文全部知识点可直接保存为guess.py运行需要 Python 3.8# 适用于 Python 3.8import randomdef main():answer random.randint(1, 100)tries 0while True:raw input(猜一个 1 到 100 的整数q 退出)if raw.strip().lower() q:print(f已退出答案是 {answer})breakif not raw.strip().lstrip(-).isdigit():print(请输入整数。)continueguess int(raw)tries 1if guess answer:print(小了)elif guess answer:print(大了)else:print(f猜对了共用了 {tries} 次。)breakif __name__ __main__:main()这段代码同时演示了while True配合break的输入循环、continue跳过非法输入、if/elif/else三分支、以及input()返回的永远是字符串所以需要int()转换。常见坑点把elif写成else if❌else if score 80:—— 这是 C/Java 的写法Python 会报SyntaxError✅elif score 80:漏写冒号❌if x 0换行直接写代码块 ✅if x 0:冒号不能省用做比较❌if x 1:—— 在 Python 3 里这是语法错误2 里也只是意外合法 ✅if x 1:while里忘了改变量导致死循环❌while count 5: total count✅ 循环体内加上count 1缩进不一致❌ 同一代码块里一行 4 空格、一行 2 空格或空格与制表符混用 ✅ 全文件统一用 4 个空格混用时 Python 会抛TabError误以为循环else总会执行❌ 认为for ... else的else就等于「循环结束后必做」 ✅else只在循环没有被break打断时执行想无条件收尾应用finally或循环后直接写用range(len(x))手动索引❌for i in range(len(fruits)): print(fruits[i])✅for fruit in fruits:直接迭代需要下标时用enumerate(fruits)以为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的语义这三件事吃透后面学函数、类、异常时就不会被语法细节反复绊倒。

读完文章,也想定制专属网站?

尧图设计师 24 小时内与您沟通定制方案

免费获取报价 →
↑