Python第三课: 基础语法(2):顺序、条件、循环全攻略+人生重开模拟器
文章目录
- Python第三课: 基础语法(2):顺序、条件、循环全攻略+人生重开模拟器
- 一、顺序语句:代码从上往下执行
- 二、条件语句:让程序学会“判断”
- 2.1 三种基础写法
- (1)单 if
- (2)if - else
- (3)if - elif - else(多分支)
- 2.2 Python 条件语法特点
- 2.3 代码示例:选择学习模式
- 三、缩进与代码块(Python 灵魂)
- 嵌套条件
- 四、空语句 pass
- 五、循环语句:让程序重复干活
- 5.1 while 循环
- 示例 1:打印 1~10
- 示例 2:1~100 求和
- 示例 3:5 的阶乘
- 示例 4:1!+2!+…+5!(双重循环)
- 5.2 for 循环(更常用)
- range() 用法
- 示例 1:打印 1~10
- 示例 2:打印 2、4、6、8、10
- 示例 3:倒序 10~1
- 示例 4:1~100 求和
- 六、break 和 continue
- 6.1 continue:跳过本次循环
- 6.2 break:直接结束整个循环
- 6.3 实用案例:输入数字求平均值
- 七、经典练习题(必做)
- 7.1 判断奇偶数
- 7.2 判断正负
- 7.3 判断闰年
- 八、综合实战:人生重开模拟器
一、顺序语句:代码从上往下执行
Python 默认执行规则:从上到下,依次执行,顺序不可乱。
# 顺序执行示例print("1")print("2")print("3")输出结果永远是:
1 2 3二、条件语句:让程序学会“判断”
条件语句也叫分支语句,实现“如果…否则…”逻辑。
2.1 三种基础写法
(1)单 if
if条件:条件成立执行的代码(2)if - else
if条件:条件成立执行else:条件不成立执行(3)if - elif - else(多分支)
if条件1:...elif条件2:...else:...2.2 Python 条件语法特点
- 条件不用括号
- 条件末尾必须加:
- 用缩进表示代码块(4 空格 / 1 Tab)
- 多分支用
elif,不是else if
2.3 代码示例:选择学习模式
choice=input("输入 1 认真学习,输入 2 躺平摆烂:")ifchoice=="1":print("你会找到好工作!")elifchoice=="2":print("你可能毕业就失业!")else:print("输入有误!")三、缩进与代码块(Python 灵魂)
缩进决定代码归属,缩进错直接报错。
# 示例 1:world 属于 if 内部a=input("请输入整数:")ifa=="1":print("hello")print("world")# 条件成立才执行# 示例 2:world 不属于 ifa=input("请输入整数:")ifa=="1":print("hello")print("world")# 无论如何都执行嵌套条件
a=input("第一个数:")b=input("第二个数:")ifa=="1":ifb=="2":print("hello")# 两级缩进print("world")# 一级缩进print("python")# 无缩进,始终执行四、空语句 pass
pass无任何功能,只用来占位,保证语法合法。
a=int(input("输入整数:"))ifa!=1:pass# 占位,不报错else:print("hello")五、循环语句:让程序重复干活
5.1 while 循环
while条件:循环体示例 1:打印 1~10
num=1whilenum<=10:print(num)num+=1示例 2:1~100 求和
sum=0num=1whilenum<=100:sum+=num num+=1print(sum)示例 3:5 的阶乘
result=1n=1whilen<=5:result*=n n+=1print(result)示例 4:1!+2!+…+5!(双重循环)
num=1sum=0whilenum<=5:factor=1i=1whilei<=num:factor*=i i+=1sum+=factor num+=1print(sum)5.2 for 循环(更常用)
Python for 循环直接遍历可迭代对象。
for变量in可迭代对象:循环体range() 用法
range(a, b)→ [a, b)range(a, b, step)→ 步长
示例 1:打印 1~10
foriinrange(1,11):print(i)示例 2:打印 2、4、6、8、10
foriinrange(2,12,2):print(i)示例 3:倒序 10~1
foriinrange(10,0,-1):print(i)示例 4:1~100 求和
sum=0foriinrange(1,101):sum+=iprint(sum)六、break 和 continue
6.1 continue:跳过本次循环
# 吃到第 3 个包子有虫,跳过foriinrange(1,6):ifi==3:continueprint(f"吃完第{i}个包子")6.2 break:直接结束整个循环
# 吃到第 3 个有半只虫,不吃了foriinrange(1,6):ifi==3:breakprint(f"吃完第{i}个包子")6.3 实用案例:输入数字求平均值
sum=0count=0whileTrue:num=input("输入数字(分号结束):")ifnum==";":breaksum+=float(num)count+=1print("平均值:",sum/count)七、经典练习题(必做)
7.1 判断奇偶数
a=int(input("输入整数:"))ifa%2==0:print("偶数")else:print("奇数")7.2 判断正负
a=int(input("输入整数:"))ifa>0:print("正数")elifa<0:print("负数")else:print("零")7.3 判断闰年
year=int(input("输入年份:"))if(year%4==0andyear%100!=0)or(year%400==0):print("闰年")else:print("平年")八、综合实战:人生重开模拟器
# 人生重开模拟器~importrandomimportsysimporttimeprint('+------------------------------------------------+')print('| |')print('| 花有重开日, 人无再少年 |')print('| |')print('| 欢迎来到, 人生重开模拟器 |')print('| |')print('+------------------------------------------------+')# 设置初始属性# 颜值, 体质, 智力, 家境, 总和不能超过 20, 每一项取值都是 1-10 之间# 使用循环, 使玩家在输入错误的时候, 可以重新输入.whileTrue:print("请设置初始属性(可用点数总数为 20)")face=int(input("请输入颜值(1-10):"))strong=int(input("请输入体质(1-10):"))iq=int(input("请输入智力(1-10):"))home=int(input("请输入家境(1-10):"))# 通过条件语句, 对于用户输入的属性值做出校验检查# 这段逻辑, 使用 elif 是否可以呢? 完全可以. 效果是相同的.# 使用 elif 则是多个分支只能进一个, 一旦某个条件满足了, 就不会再走其他的分支了.# 此处虽然没有使用 elif , 但是有了 continue, 一旦某个条件满足, continue 就会使循环从头再来, 也就没机会# 继续执行后续的条件判定了.ifface<1orface>10:print("颜值设置有误!")continueifstrong<1orstrong>10:print("体质设置有误!")continueifiq<1oriq>10:print("智力设置有误!")continueifhome<1orhome>10:print("家境设置有误!")continueifface+strong+iq+home>20:print("总的属性和超出了 20, 也是设置有误!")continue# 如果当前上面的条件都没有被触发, 则认为玩家输入的数据是合法的.# 此时就可以跳出循环结束输入了print("初始属性输入完毕!")print(f"颜值:{face}, 体质:{strong}, 智力:{iq}, 家境:{home}")break# 生成角色的性别# 使用 random.randint(beg, end), 就能生成 [beg, end] 随机整数point=random.randint(1,6)# print(f'point = {point}')ifpoint%2==1:gender='boy'print('你是个男孩')else:gender='girl'print('你是个女孩')# 设定角色的出生点# 为了简单, 就直接生成 1-3 的随机数point=random.randint(1,3)ifhome==10:# 第一档print('你出生在帝都, 你的父母是高官政要')home+=1iq+=1face+=1elif7<=home<=9:# 第二档ifpoint==1:print('你出生在大城市, 父母是公务员')face+=2elifpoint==2:print('你出生在大城市, 父母是企业高管')home+=2else:print('你出生在大城市, 父母是大学教授')iq+=2elif4<=home<=6:# 第三档ifpoint==1:print('你出生在三线城市, 你的父母是医生')strong+=1elifpoint==2:print('你出生在镇上, 你的父母是老师')iq+=1else:print('你出生在镇上, 你的父母是个体户')home+=1else:# 第四档ifpoint==1:print('你出生在农村, 父母是辛苦劳作的农民')strong+=1face-=2elifpoint==2:print('你出生在穷乡僻壤, 你的父母是无业游民')home-=1else:print('你出生在镇上, 你的父母感情不和')strong-=1print(f'颜值:{face}, 体质:{strong}, 智力:{iq}, 家境:{home}')# 幼年阶段forageinrange(1,11):# 把一整年的打印都整理到一个字符串中, 在这一年的结尾统一打印info=f'你今年{age}岁. '# 生成一个 [1, 3] 的随机整数.point=random.randint(1,3)# 接下来编写各种事件的代码# 性别触发的事件ifgender=='girl'andhome<=3andpoint==1:info+='你的家里人重男轻女思想非常严重, 你被遗弃了!'print(info)print('游戏结束!')sys.exit(0)# 体质触发的事件# 使用 elif 是为了保证每年只触发一个事件!elifstrong<6andpoint<3:info+='你生了一场病, 'ifhome>=5:info+='在父母的悉心照料下, 你康复了'strong+=1home-=1else:info+='你的父母没精力管你, 你的身体状况更糟糕了'strong-=1# 颜值触发的时间elifface<=4andage>=7:info+='你长的太丑了, 别的小朋友不喜欢你. 'ifiq>5:info+='你决定用学习填充自己!'iq+=1else:ifgender=='boy':info+='你和别的小朋友经常打架!'strong+=1iq-=1else:info+='你经常被别的小朋友欺负!'strong-=1# 智商触发的事件elifiq<5:info+='你看起来傻傻的. 'ifhome>=8andage>=6:info+='你的父母把你送到更好的学校学习'iq+=1elif4<=home<=7:ifgender=='boy':info+='你的父母鼓励你多运动, 争取成为运动员'strong+=1else:info+='你的父母鼓励你多打扮自己'face+=1else:# 家境 < 4info+='你的父母为此经常吵架'ifpoint==1:strong-=1elifpoint==2:iq-=1else:pass# 健康成长事件else:info+='你健康成长. 'ifpoint==1:info+='你看起来更结实了.'strong+=1elifpoint==2:info+='你看起来更好看了.'face+=1else:# 无事发生pass# 打印这一年发生的事情print(info)print(f'颜值:{face}, 体质:{strong}, 智力:{iq}, 家境:{home}')print('------------------------------------------------------')# 为了方便观察, 加一个小小的暂停操作time.sleep(1)