【Python】基础语法入门:顺序、条件与循环
文章目录
一、顺序语句: 从上到下,依次执行
默认情况下,Python代码的执行顺序就像我们日常做事的流程——先做第一步,再做第二步,直到所有步骤完成。这种按固定顺序执行的语句,就是顺序语句。
print("1")print("2")print("3")#输出 1 2 3二、条件语句:做选择
条件语句让程序拥有了“判断能力”,能够根据不同的条件执行不同的逻辑。
1. 条件语句的三种形式
Python中通过if、else、elif三个关键字实现条件判断,不同形式对应不同的判断场景。
(1)单条件判断:if语句
当只需要判断“满足条件就执行,不满足就跳过”时,使用if语句。
语法格式:
if 条件表达式: 满足条件时执行的代码块(缩进) # 不满足条件时执行的代码(无缩进)注意:
- 条件表达式后没有括号
(),结尾必须加冒号:。 - 代码块通过缩进区分(通常是4个空格或1个Tab),这是Python的特色,缩进错误会直接报错。
示例:如果输入的数字是1,打印“你选择了认真学习”。
choice =input("请输入数字1:")if choice =="1":print("你选择了认真学习")print("程序结束")当choice == "1"成立时,会先打印“你选择了认真学习”,再打印“程序结束”;如果不成立,直接打印“程序结束”。
(2)双条件判断:if-else语句
当需要判断“满足条件执行A,不满足执行B”时,使用if-else语句,覆盖所有可能性。
语法格式:
if 条件表达式: 满足条件执行的代码块A else: 不满足条件执行的代码块B 示例:判断输入的整数是奇数还是偶数。
a =int(input("请输入一个整数:"))if a %2==0:print("偶数")else:print("奇数")无论输入的数字是多少,都会进入其中一个分支,不会出现“无响应”的情况。
(3)多条件判断:if-elif-else语句
当有多个条件需要依次判断时,使用if-elif-else语句,相当于“如果…否则如果…否则…”。
语法格式:
if 条件1: 执行代码块1elif 条件2: 执行代码块2elif 条件3: 执行代码块3else: 所有条件都不满足时执行的代码块 示例:判断输入的数字是正数、负数还是0。
a =int(input("请输入一个整数:"))if a >0:print("正数")elif a <0:print("负数")else:print("为0")程序会依次判断a > 0、a < 0,只要有一个条件成立就执行对应的代码块,所有条件都不成立时才会执行else中的内容。
2. 缩进与代码块
在Python中,缩进是代码块的标志,不同层级的缩进代表不同的代码归属,这和C++、Java用{}划分代码块的方式完全不同。
正确理解缩进:
# 代码1:print("world")属于if代码块 a =input("请输入一个整数:")if a =="1":print("hello")print("world")# 一级缩进,和print("hello")同属if代码块# 代码2:print("world")不属于if代码块 a =input("请输入一个整数:")if a =="1":print("hello")# 一级缩进print("world")# 无缩进,属于全局代码块- 代码1中,只有
a == "1"成立时,才会同时打印“hello”和“world”; - 代码2中,无论
a是否等于1,都会打印“world”,因为它没有缩进,不属于if的代码块。
缩进嵌套:
代码块内部还可以嵌套其他代码块,形成多层逻辑:
a =input("请输入第一个整数:") b =input("请输入第二个整数:")if a =="1":print("进入a=1的分支")if b =="2":print("world")# 二级缩进,属于if b=="2"代码块print("hello")# 一级缩进,属于if a=="1"代码块print("python")# 无缩进,全局代码块嵌套缩进需要严格对齐,否则会报错。这也是为什么有“写Python需要自备游标卡尺”的梗——缩进的规范性直接决定程序能否运行。
3. 空语句pass:占位符
有时候,我们需要在条件语句中“占个位置”,但暂时不执行任何操作,这时候就需要用到pass语句——它是Python中的“空语句”,不影响程序执行,只用于保证语法格式正确。
错误示例:
a =int(input("请输入一个整数:"))if a !=1:# 暂时没有要执行的代码else:print("hello")这段代码会直接报错,因为if a != 1:后面没有任何代码,不符合Python语法。
正确示例:
a =int(input("请输入一个整数:"))if a !=1:pass# 占位符,不执行任何操作else:print("hello")pass的存在让语法格式合法,程序会正常运行:当a != 1时,跳过if分支,执行后续代码;当a == 1时,打印“hello”。
4. 练习:判断闰年
闰年的判断规则是:
- 能被400整除的年份是闰年;
- 能被4整除但不能被100整除的年份是闰年;
- 其他情况是平年。
year =int(input("请输入年份:"))if year %100==0:# 世纪年(如2000年、1900年)if year %400==0:print("闰年")else:print("平年")else:# 普通年if year %4==0:print("闰年")else:print("平年")也可以简化为一行条件表达式:
year =int(input("请输入年份:"))if(year %100!=0and year %4==0)or(year %400==0):print("闰年")else:print("平年")三、循环语句
循环语句让程序能够自动重复执行某段代码,大大提高开发效率。
Python中主要有两种循环:while循环和for循环,各自适用于不同场景。
1. while循环:“条件满足就一直做”
while循环的逻辑是:只要条件成立,就反复执行循环体,直到条件不成立时结束。
基本语法:
while 循环条件: 循环体(缩进代码块) # 循环变量更新(避免无限循环)注意:循环体中必须包含“循环变量更新”的语句,否则循环条件会一直成立,导致程序进入“无限循环”(比如while True:没有退出条件时,会一直运行)。
示例:
(1)打印1-10的整数
num =1# 初始化循环变量while num <=10:# 循环条件:num不大于10print(num) num +=1# 循环变量更新:num每次加1执行过程:num从1开始,每次打印后加1,当num=11时,num <= 10不成立,循环结束。
(2)计算1-100的和
sum=0# 用于存储总和,初始值为0 num =1# 循环变量while num <=100:sum+= num # 等价于sum = sum + num num +=1print(sum)# 输出结果:5050(3)计算5的阶乘(5! = 5×4×3×2×1)
result =1# 阶乘初始值为1(乘法的单位元) n =1while n <=5: result *= n # 等价于result = result × n n +=1print(result)# 输出结果:120(4)嵌套循环:计算1! + 2! + 3! + 4! + 5!的和
sum=0# 存储阶乘总和 num =1while num <=5: factor_result =1# 存储单个阶乘的结果 i =1# 内层循环:计算num的阶乘while i <= num: factor_result *= i i +=1sum+= factor_result # 把当前阶乘结果加入总和 num +=1print(sum)# 输出结果:153这里用到了“双重循环”:外层循环控制计算哪个数的阶乘,内层循环负责计算具体的阶乘值。嵌套循环的关键是理清每层循环的职责,避免缩进错误。
2. for循环:“遍历元素就做事”
for循环是Python中最灵活、最常用的循环,它不需要手动管理循环变量,而是直接遍历“可迭代对象”(比如列表、字符串、range生成的序列),逐个执行循环体。
基本语法:
for 循环变量 in 可迭代对象: 循环体(缩进代码块) - 可迭代对象:内部包含多个元素,能逐个取出元素的对象(如
range(1,10)、[1,2,3]、"abc"等)。 - Python的
for循环不需要“初始化语句”“条件判断语句”“更新语句”,比其他语言更简洁。
示例:
(1)打印1-10(使用range函数)
range(start, end, step)是Python内置函数,用于生成一个整数序列:
start:起始值(默认0);end:结束值(不包含end本身);step:步长(默认1,可正可负)。
# 生成1-10的序列(包含1,不包含11)for i inrange(1,11):print(i)(2)打印2、4、6、8、10(指定步长2)
# 从2开始,到12结束(不包含12),每次加2for i inrange(2,12,2):print(i)(3)打印10-1(步长为负,倒序)
# 从10开始,到0结束(不包含0),每次减1for i inrange(10,0,-1):print(i)(4)计算1-100的和(for循环更简洁)
sum=0for i inrange(1,101):sum+= i print(sum)# 输出结果:5050相比while循环,for循环不需要手动初始化和更新循环变量,代码更简洁,不易出错。
3. 循环控制:break和continue
在循环过程中,我们可能需要提前结束循环,或者跳过某次循环,这时候就需要break和continue两个关键字。
(1)continue:跳过本次循环,进入下次循环
continue会直接跳过当前循环体中剩余的代码,不执行后续操作,直接进入下一次循环判断。
示例:模拟吃包子,吃到第3个时吃出虫子,跳过这个包子,继续吃后面的。
for i inrange(1,6):if i ==3:print(f"第{i}个包子吃出虫子,跳过!")continueprint(f"吃完第{i}个包子")输出结果:
吃完第1个包子 吃完第2个包子 第3个包子吃出虫子,跳过! 吃完第4个包子 吃完第5个包子 (2)break:结束整个循环
break会直接终止当前循环,无论循环条件是否成立,都不再继续执行。
示例:模拟吃包子,吃到第3个时吃出半只虫子,直接停止吃包子。
for i inrange(1,6):if i ==3:print(f"第{i}个包子吃出半只虫子,停止吃包子!")breakprint(f"吃完第{i}个包子")输出结果:
吃完第1个包子 吃完第2个包子 第3个包子吃出半只虫子,停止吃包子! (3)练习:输入若干数字,求平均值(用break结束循环)
需求:持续输入数字,用分号“;”结束输入,最后计算所有输入数字的平均值。
sum=0# 总和 count =0# 输入数字的个数whileTrue:# 无限循环,直到遇到break num =input("请输入数字(输入;结束):")if num ==';':break# 输入;,结束循环 num =float(num)sum+= num count +=1if count >0:print(f"平均值为:{sum/ count}")else:print("未输入任何数字!")这里用while True创建无限循环,通过break在输入“;”时终止循环,逻辑清晰且灵活。
四、动手实现“人生重开模拟器”
学会了顺序、条件、循环语句后,我们可以动手实现一个趣味小游戏——“人生重开模拟器”。这款游戏的核心逻辑是:通过初始属性设置、随机事件触发,模拟人生不同阶段的经历,最终生成专属人生轨迹。
1. 游戏逻辑拆解
- 初始属性设置:颜值、体质、智力、家境(各1-10分,总和不超过20);
- 随机生成性别:通过掷骰子(1-6)决定,单数为男孩,双数为女孩;
- 随机生成出生点:根据家境档位和随机数,决定出生环境并修改属性;
- 人生阶段模拟:分幼年、青年、壮年、老年阶段,每个阶段通过随机事件修改属性,触发特殊事件(如夭折)则游戏结束。
2. 完整代码
import random import sys import time # 游戏开场文案print("="*50)print("花有重开日,人无再少年")print("欢迎来到 人生重开模拟器")print("="*50)# 1. 设置初始属性(颜值、体质、智力、家境)whileTrue:print("\n请设定初始属性(可用总点数20,每项1-10分)") face =int(input("设定 颜值(1-10):")) strong =int(input("设定 体质(1-10):")) iq =int(input("设定 智力(1-10):")) home =int(input("设定 家境(1-10):"))# 验证属性合法性if face <1or face >10:print("颜值必须在1-10之间!")continueif strong <1or strong >10:print("体质必须在1-10之间!")continueif iq <1or iq >10:print("智力必须在1-10之间!")continueif home <1or home >10:print("家境必须在1-10之间!")continueif face + strong + iq + home >20:print("总点数超过20!请重新分配!")continue# 属性设置成功,退出循环print("初始属性设定完成!")print(f"颜值:{face},体质:{strong},智力:{iq},家境:{home}")break# 2. 随机生成性别print("\n正在生成性别...") time.sleep(1)# 暂停1秒,增强游戏体验 gender_point = random.randint(1,6)# 掷骰子1-6if gender_point %2==1: gender ="boy"print("你是个男孩!")else: gender ="girl"print("你是个女孩!")# 3. 随机生成出生点(根据家境档位)print("\n正在生成出生点...") time.sleep(1) birth_point = random.randint(1,3)# 掷骰子1-3,细分出生场景if home ==10:print("你出生在帝都,你的父母是高官政要!") home +=1 iq +=1 face +=1elif7<= home <=9:if birth_point ==1:print("你出生在大城市,你的父母是公务员!") face +=2elif birth_point ==2:print("你出生在大城市,你的父母是大企业高管!") home +=2else:print("你出生在大城市,你的父母是大学教授!") iq +=2elif4<= home <=6:if birth_point ==1:print("你出生在三线城市,你的父母是教师!") iq +=1elif birth_point ==2:print("你出生在镇上,你的父母是医生!") strong +=1else:print("你出生在镇上,你的父母是个体户!") home +=1else:if1<= birth_point <=2:print("你出生在村里,你的父母是辛苦劳作的农民!") strong +=1 face -=2elif3<= birth_point <=4:print("你出生在穷乡僻壤,你的父母是无业游民!") home -=1else:print("你出生在镇上,你父母感情不和!") strong -=1print(f"出生后属性更新:颜值:{face},体质:{strong},智力:{iq},家境:{home}")# 4. 模拟幼年阶段(1-10岁)print("\n"+"="*50)print("开始模拟幼年阶段(1-10岁)...")print("="*50) time.sleep(1)for age inrange(1,11): info =f"\n你今年{age}岁," event_point = random.randint(1,3)# 掷骰子触发事件# 性别+家境触发的特殊事件(女孩+家境差可能被遗弃)if gender =="girl"and home <=3and event_point ==1: info +="你家里人重男轻女思想非常严重,你被遗弃了!"print(info)print("游戏结束!") sys.exit(0)# 退出程序# 体质差触发的事件(生病)elif strong <6and event_point !=3: info +="你生了一场病,"if home >=5: info +="在父母的精心照料下恢复了健康,体质略有提升!" strong +=1 home -=1# 家境消耗else: info +="你的父母没精力管你,身体状况更糟糕了!" strong -=1# 颜值差触发的事件(被小朋友孤立)elif face <4and age >=7: info +="你因为长得太丑,别的小朋友不喜欢你,"if iq >5: info +="你决定用学习填充自己,智力提升!" iq +=1else:if gender =="boy": info +="你和别的小朋友经常打架,体质提升但智力下降!" strong +=1 iq -=1else: info +="你经常被别的小朋友欺负,体质下降!" strong -=1# 智商差触发的事件(看起来傻傻的)elif iq <5: info +="你看起来傻傻的,"if home >=8and age >=6: info +="你的父母给你送到更好的学校学习,智力提升!" iq +=1elif4<= home <=7:if gender =="boy": info +="你的父母鼓励你多运动,身体素质提升!" strong +=1else: info +="你的父母鼓励你多打扮自己,颜值提升!" face +=1else: info +="你的父母为此经常吵架,随机属性下降!"if event_point ==1: strong -=1elif event_point ==2: iq -=1# 健康成长(无负面事件)else: info +="你健康成长,"if event_point ==1: info +="看起来更聪明了,智力提升!" iq +=1elif event_point ==2: info +="看起来更好看了,颜值提升!" face +=1else: info +="看起来更结实了,体质提升!" strong +=1# 打印当年经历和属性print(info)print(f"当前属性:颜值={face},体质={strong},智力={iq},家境={home}") time.sleep(1)# 暂停1秒,方便阅读print("\n"+"="*50)print("幼年阶段结束!后续可继续扩展青年、壮年、老年阶段...")print("="*50)