一、顺序语句
默认情况下,Python 会按照代码从上到下的顺序依次执行。
例如:
python
print("1")
print("2")
print("3")
执行结果一定是:
text
1
2
3
不会突然变成 321 或者 132。
这种按照书写顺序依次执行的代码,就属于顺序语句。程序本质上是把一个个任务按照明确的顺序交给计算机完成,所以执行顺序非常重要。
但是实际程序不可能永远这么简单。
比如:
text
如果成绩 >= 60,输出及格
否则,输出不及格
这就需要让程序进行判断。
二、条件语句
条件语句主要解决一个问题:
如果某个条件成立,就执行一段代码;否则执行另一段代码。
所以它也叫分支语句。
程序执行到条件判断这里之后,后面的路线可能就不一样了。
Python 中主要有三种写法:
python
if
if - else
if - elif - else
三、if 语句
最简单的:
python
if 条件:
代码
如果条件表达式的结果是 True,执行代码块。
如果条件是 False,就直接跳过。
例如判断一个数是不是正数:
python
a = int(input("请输入一个整数: "))
if a > 0:
print("正数")
输入:
text
10
输出:
text
正数
如果输入 -10,这个 if 中的代码就不会执行。
四、if - else
如果存在两种情况:
text
条件成立
条件不成立
就可以使用:
python
if 条件:
代码1
else:
代码2
例如判断奇偶数:
python
a = int(input("请输入一个整数: "))
if a % 2 == 0:
print("偶数")
else:
print("奇数")
这里的逻辑非常清楚:
text
a % 2 == 0
↓
True → 偶数
False → 奇数
五、if - elif - else
当情况不止两种的时候,就可以使用 elif。
比如判断一个整数:
python
a = int(input("请输入一个整数: "))
if a > 0:
print("正数")
elif a < 0:
print("负数")
else:
print("为 0")
执行的时候会从上往下判断:
text
第一个条件成立 → 执行第一段
第一个不成立,第二个成立 → 执行第二段
前面都不成立 → 执行 else
Python 中写多条件分支时不是:
text
else if
而是直接写:
python
elif
六、Python条件语句和C++最大的区别:缩进
这个地方是刚学 Python 时特别容易出问题的。
C++ 中通常写:
cpp
if (a > 0)
{
cout << "positive";
}
Python 没有 {} 来表示代码块,而是使用缩进。
python
if a > 0:
print("positive")
这里的 print 前面有缩进,它就属于 if 的代码块。
Python 的条件语句有两个明显特点:
第一,if 后面的条件不需要加括号。
第二,条件末尾要加:
text
:
第三,代码块通过缩进表示,而不是 {}。通常使用 4 个空格或者一个 Tab。
七、缩进到底有多重要?
例如:
python
a = input("请输入一个整数: ")
if a == "1":
print("hello")
print("world")
这里两个 print 都有缩进,所以它们都属于 if。
也就是说:
text
a == "1" 成立
↓
hello
world
都会执行。
但是如果写成:
python
a = input("请输入一个整数: ")
if a == "1":
print("hello")
print("world")
那么只有 hello 属于 if。
world 已经跑到了 if 外面,所以无论条件是否成立都会执行。
这个区别看起来很小,但是写复杂代码时特别容易出错。
八、代码块还可以继续嵌套
Python 中代码块可以嵌套。
比如:
python
a = input("请输入第一个整数: ")
b = input("请输入第二个整数: ")
if a == "1":
if b == "2":
print("hello")
print("world")
print("python")
这里:
text
print("hello")
有两级缩进,属于第二层 if。
text
print("world")
只有一级缩进,属于第一层 if。
而:
text
print("python")
没有缩进,所以不属于上面的条件语句。
所以 Python 写嵌套代码时,一定要看清楚每一行到底属于哪一级代码块。
九、条件语句练习:判断闰年
闰年的判断就能明显感受到条件嵌套。
一种写法可以分情况处理:
python
year = int(input("请输入年份: "))
if year % 100 == 0:
if year % 400 == 0:
print("闰年")
else:
print("平年")
else:
if year % 4 == 0:
print("闰年")
else:
print("平年")
这里先判断是不是整百年,然后再根据不同情况继续判断。
可以看到,条件语句不仅可以一个套一个,还可以在里面继续进行判断。
十、pass:什么也不做
有时候 Python 的语法要求这里必须有一条语句,但是暂时又不想写具体代码,就可以使用:
python
pass
例如:
python
if a != 1:
pass
else:
print("hello")
pass 本身不会对程序产生实际操作,它只是占一个位置,让代码结构完整。
所以可以把它理解成:
这里暂时留空,但语法上需要有东西。
十一、循环语句
条件语句解决的是:
根据不同情况选择不同代码。
循环解决的是:
同一段代码需要重复执行很多次怎么办?
比如打印:
text
1
2
3
4
5
...
10
如果手写十个 print,当然可以,但明显很麻烦。
这时候就需要循环。
Python 这里主要接触:
text
while
for
十二、while循环
最基本的语法:
python
while 条件:
循环体
执行逻辑:
text
条件为 True
↓
执行循环体
↓
再次判断条件
↓
条件为 True → 继续
条件为 False → 结束
例如打印 1~10:
python
num = 1
while num <= 10:
print(num)
num += 1
这里一定要注意:
python
num += 1
不能忘。
如果忘记修改 num:
python
num = 1
while num <= 10:
print(num)
那么 num 永远都是 1,条件永远成立,程序就会一直循环下去。
十三、使用 while 计算 1~100 的和
python
sum = 0
num = 1
while num <= 100:
sum += num
num += 1
print(sum)
这个代码其实就是把前面学到的变量和运算符组合起来。
循环每执行一次:
text
sum 加上当前 num
num 再加 1
直到:
text
num > 100
循环结束。
十四、用 while 计算阶乘
例如计算 5!:
python
result = 1
n = 1
while n <= 5:
result *= n
n += 1
print(result)
计算过程:
text
1 × 1
1 × 2
1 × 2 × 3
1 × 2 × 3 × 4
1 × 2 × 3 × 4 × 5
最终得到:
text
120
还可以继续套一层循环,计算:
text
1! + 2! + 3! + 4! + 5!
这就出现了嵌套循环:
python
num = 1
sum = 0
while num <= 5:
factorResult = 1
i = 1
while i <= num:
factorResult *= i
i += 1
sum += factorResult
num += 1
print(sum)
也就是说:
循环里面还可以继续套循环。
十五、for循环
for 循环也是 Python 中非常常用的一种循环。
基本格式:
python
for 循环变量 in 可迭代对象:
循环体
这里的"可迭代对象"可以简单理解成:
里面有多个元素,可以一个一个拿出来。
十六、range()函数
如果只是想循环执行固定次数,最常用的就是:
python
range()
例如:
python
for i in range(1, 11):
print(i)
输出:
text
1
2
3
4
5
6
7
8
9
10
这里的:
python
range(1, 11)
表示:
text
[1, 11)
也就是包含 1,不包含 11。
这个左闭右开的规则一定要记住。
十七、range()的第三个参数
range 还可以指定步长。
例如:
python
for i in range(2, 12, 2):
print(i)
输出:
text
2
4
6
8
10
这里:
text
2
就是每次增加的步长。
所以可以理解为:
text
起点
终点
步长
步长还可以是负数:
python
for i in range(10, 0, -1):
print(i)
就能实现从 10 输出到 1。
十八、for循环和C++的区别
C++ 中经常这样写:
cpp
for(int i = 1; i <= 10; i++)
{
cout << i;
}
Python 的 for 没有这种:
text
初始化
条件判断
变量更新
而是直接:
python
for i in range(1, 11):
print(i)
十九、break
break 的作用是:
直接结束整个循环。
例如:
python
for i in range(1, 6):
if i == 3:
break
print(f"吃完第 {i} 个包子")
当 i == 3 时执行 break,循环直接结束,所以后面的 4、5 都不会继续。
简单记:
text
break
↓
整个循环结束
二十、continue
continue 则不同。
它表示:
结束本次循环,直接进入下一次循环。
例如:
python
for i in range(1, 6):
if i == 3:
continue
print(f"吃完第 {i} 个包子")
执行到 3 时跳过当前这一次。
所以输出的会是:
text
吃完第 1 个包子
吃完第 2 个包子
吃完第 4 个包子
吃完第 5 个包子
3 被跳过了,但整个循环并没有结束。
所以这两个一定要区分:
text
continue → 跳过本次循环
break → 结束整个循环
二十一、while True:一直循环,自己决定什么时候结束
实际编程时经常会看到:
python
while True:
它表示先进入一个无限循环,然后在循环内部根据条件决定什么时候 break。
例如不断输入数字,使用 ; 作为结束标志:
python
sum = 0
count = 0
while True:
num = input("请输入数字: ")
if num == ';':
break
num = float(num)
sum += num
count += 1
print(sum / count)
程序会一直读取数据。
直到用户输入:
text
;
才执行:
python
break
然后结束循环。
这种写法以后会经常遇到。
二十二、综合案例:人生重开模拟器
前面的 if、while、for 学完之后,已经可以开始写稍微复杂一些的程序了。
这里用了一个"人生重开模拟器"的案例。
虽然这是一个小游戏,但是里面实际上把前面学到的内容基本都串起来了:
text
输入
变量
类型转换
if
elif
else
while
for
continue
break
随机数
嵌套条件
所以这种综合案例对于理解控制语句很有帮助。
二十三、先设置角色属性
游戏一开始有四个属性:
text
颜值 face
体质 strong
智力 iq
家境 home
每个属性的范围是:
text
[1, 10]
并且四项属性总和不能超过:
text
20
如果输入不符合要求,就重新输入。
这里最适合使用:
python
while True:
因为程序不知道用户什么时候才能输入正确的数据。
例如:
python
while True:
face = int(input("设定颜值(1-10): "))
strong = int(input("设定体质(1-10): "))
iq = int(input("设定智力(1-10): "))
home = int(input("设定家境(1-10): "))
if face < 1 or face > 10:
print("颜值设置有误!")
continue
if strong < 1 or strong > 10:
print("体质设置有误!")
continue
if iq < 1 or iq > 10:
print("智力设置有误!")
continue
if home < 1 or home > 10:
print("家境设置有误!")
continue
if face + strong + iq + home > 20:
print("总点数超过了 20!")
continue
print("初始属性设定完成!")
break
这里同时用了:
text
while True
if
continue
break
输入错误:
text
continue
重新输入。
输入正确:
text
break
结束属性设置。
这个例子非常适合理解 break 和 continue 的实际区别。
二十四、随机数
游戏里面还用到了:
python
random.randint()
例如:
python
point = random.randint(1, 6)
可以生成一个 [1, 6] 范围内的随机整数,可以把它理解成掷一次骰子。
例如:
python
point = random.randint(1, 6)
if point % 2 == 1:
gender = 'boy'
else:
gender = 'girl'
根据随机数是奇数还是偶数来决定角色性别。
后面出生环境的生成,也是通过随机数配合 if - elif - else 完成的。
二十五、再用 for 模拟年龄增长
到了人生经历部分,就可以使用:
python
for age in range(1, 11):
模拟角色从 1 岁到 10 岁。
每一年先生成一个随机数,然后根据:
text
性别
年龄
颜值
体质
智力
家境
等不同条件决定这一年发生什么事情。
比如:
python
for age in range(1, 11):
info = f'你今年 {age} 岁, '
point = random.randint(1, 3)
接下来通过大量的:
python
if
elif
else
判断不同情况。
这一部分其实就是前面条件语句和循环语句的综合应用。
二十六、程序甚至可以直接退出
在某些特殊事件中,程序需要提前结束。
例如:
python
sys.exit(0)
可以直接退出程序。
如果角色夭折,就会:
python
print(info)
print("游戏结束!")
sys.exit(0)
直接结束后面的程序。
所以这里又多认识了一个控制程序执行流程的方法。
二十七、time.sleep()
python
time.sleep(1)
可以让程序暂停 1 秒。
这样每一年的人生经历不会瞬间全部打印出来,看起来更像一个真正运行的小游戏。
二十八、人生重开模拟器代码示例
python
# 人生重开模拟器
# 在 python 中, 如果想引入其它模块, 需要先使用 import 语句, 把模块的名字给"导入"进来
import random
import sys
import time
print('+-------------------------------------------+')
print('| |')
print('| 花有重开日 人无再少年 |')
print('| |')
print('| 欢迎来到人生重开模拟器 |')
print('| |')
print('+-------------------------------------------+')
# 设置初始属性
# 颜值, 体质, 智力, 家境, 总和不能超过 20, 每一项取值都是 1-10 之间
# 使用循环, 使玩家在输入错误的时候, 可以重新输入
while True:
print("请设置初始属性(可用点数总数为20)")
face = int(input("请输入颜值(1-10): "))
strong = int(input("请输入体质(1-10): "))
iq = int(input("请输入智力(1-10): "))
home = int(input("请输入家境(1-10): "))
if face < 1 or face > 10:
print("颜值设置有误!")
continue
if strong < 1 or strong > 10:
print("体质设置有误!")
continue
if iq < 1 or iq > 10:
print("智力设置有误!")
continue
if home < 1 or home > 10:
print("家境设置有误!")
continue
if face + strong + iq + home > 20:
print("总属性和超出20, 设置有误!")
continue
print("初始属性输入完毕!")
print(f"颜值: {face}, 体质: {strong}, 智力: {iq}, 家境: {home}")
break
# 生成角色的性别
# 使用 random.randint(begin, end), 就能生成 [begin, end] 随机整数
point = random.randint(1, 6)
if point % 2 == 1:
gender = 'boy'
print("你是个男孩")
else:
gender = 'girl'
print("你是个女孩")
# 设定角色的出生点
point = random.randint(1, 3)
if home == 10:
print("你出生在帝都, 你的父母是高官政要")
home += 1
face += 1
iq += 1
elif 7 <= home <= 9:
if point == 1:
print("你出生在大城市, 父母是公务员")
face += 2
elif point == 2:
print("你出生在大城市, 父母是企业高管")
home += 2
else:
print("你出生在大城市, 父母是大学教授")
iq += 2
elif 4 <= home <= 6:
if point == 1:
print("你出生在三线城市, 父母是医生")
strong += 1
elif point == 2:
print("你出生在镇上, 父母是老师")
iq += 1
else:
print("你出生在镇上, 父母是个体户")
home += 1
else:
if point == 1:
print("你出生在农村, 父母是辛苦劳作的农民")
strong += 1
face -= 2
elif point == 2:
print("你出生在穷乡僻壤, 父母是无业游民")
home -= 1
else:
print("你出生在镇上, 父母感情不和")
strong -= 1
print(f"颜值: {face}, 体质: {strong}, 智力: {iq}, 家境: {home}")
time.sleep(1.5)
# 幼年阶段
for age in range(1, 11):
info = f'你今年 {age} 岁. '
point = random.randint(1, 3)
if gender == 'girl' and home <= 3 and point == 1:
info += '你的家里人重男轻女思想非常严重, 你被遗弃了!'
print(info)
print("游戏结束!")
sys.exit(0)
elif strong < 6 and point < 3:
info += '你生了一场病, '
if home >= 5:
info += '在父母的悉心照料下, 你康复了'
strong += 1
home -= 1
else:
info += '你的父母没精力管你, 你的身体状况更糟糕了'
strong -= 1
elif face <= 4 and age >= 7:
info += '你长得太丑了, 别的小朋友不喜欢你'
if iq > 5:
info += '你决定用学习填充自己'
iq += 1
else:
if gender == 'boy':
info += '你和别的小朋友经常打架'
strong += 1
iq -= 1
else:
info += '你经常被别的小朋友欺负!'
strong -= 1
elif iq < 5:
info += '你看上去傻傻的. '
if home >= 8 and age >= 6:
info += '你的父母把你送到更好的学校学习'
iq += 1
elif 4 <= home <= 7:
if gender == 'boy':
info += '你的父母鼓励你多运动, 争取成为运动员'
strong += 1
else:
info += '你的父母鼓励你多打扮自己'
face += 1
else:
info += '你的父母为此经常吵架'
if point == 1:
strong -= 1
elif point == 2:
iq -= 1
else:
pass
else:
info += '你健康成长. '
if point == 1:
info += '你看起来更结实了.'
strong += 1
elif point == 2:
info += '你看起来更好看了.'
else:
pass
# 打印这一年发生的事情
print(info)
print(f"颜值: {face}, 体质: {strong}, 智力: {iq}, 家境: {home}")
print('------------------------------------------------------')
# 为了方便观察, 加一个暂停操作
time.sleep(1.5)
二十九、总结
1. Python靠缩进表示代码块
不是:
python
if a > 0:
{
}
而是:
python
if a > 0:
print("hello")
缩进错了,代码结构就可能完全变掉。
2. elif相当于多条件分支
python
if 条件1:
...
elif 条件2:
...
else:
...
而不是 C++ 里的 else if 写法。
3. while适合根据条件重复
python
while 条件:
...
条件一直成立就一直运行。
4. for适合遍历可迭代对象
最常见的就是:
python
for i in range(1, 11):
...
5. break和continue一定分清
text
break
→ 整个循环结束
continue
→ 本次循环结束,进入下一次