EN
/video/68674467.html

【Python】2.基础语法(2)

2025-06-24 12:33:45 来源: 新华社
字号:默认 超大 | 打印 |

文章目录

  • 1.顺序语句
  • 2.条件语句
    • 2.1语法格式
      • 2.1.1 if
      • 2.1.2 if - else
      • 2.1.3 if - elif - else
    • 2.2缩进和代码块
    • 2.3 空语句 pass
  • 3. 循环语句
    • 3.1 while 循环
    • 3.2 for 循环
    • 3.3 continue
    • 3.4 break
  • 4. 综合案例
    • 4.1 设置初始属性
    • 4.2 设置性别
    • 4.3 设置出生点
    • 4.4 针对每一岁, 生成人生经历


1.顺序语句

默认情况下, Python的代码执行顺序是按照从上到下的顺序, 依次执行的

print("1")print("2")print("3")

默认情况下, Python的代码执行顺序是按照从上到下的顺序, 依次执行的.

执行结果一定为 “123”, 而不会出现 “321” 或者 “132” 等. 这种按照顺序执行的代码, 我们称为 顺序语句


2.条件语句

条件语句能够表达 “如果 … 否则 …” 这样的语义. 这构成了计算机中基础的 逻辑判定.

条件语句 也叫做 分支语句, 表示了接下来的逻辑可能有几种走向。


2.1语法格式

Python中使用 if else关键字表示条件语句。


2.1.1 if

ifexpression:do_something1 do_something2next_something

如果 expression值为 True, 则执行 do_something1, do_something2, next_something

如果 expression值为 False, 则只执行 next_something, 不执行 do_something1, do_something2


2.1.2 if - else

ifexpression:do_something1else:do_something2

如果 expression值为 True, 则执行 do_something1

如果 expression值为 False, 则执行 do_something2


2.1.3 if - elif - else

ifexpression1:do_something1elifexpression2:do_something2else:do_something3

如果 expression1值为 True, 则执行 do_something1

如果 expression1值为 False, 并且 expression2True则执行 do_something2

如果 expression1值为 False, 并且 expression2False则执行 do_something3

注意: Python中的条件语句写法, 和很多编程语言不太一样。

if后面的条件表达式, 没有 ( ), 使用 :作为结尾。

if / else命中条件后要执行的 “语句块”, 使用 缩进 (通常是 4 个空格或者 1 个 tab)来表示, 而不是 { }

对于多条件分支, 不是写作 else if, 而是 elif (合体了)。


示例: 输入 1 表示愿意认真学习, 输入 2 表示躺平摆烂。

choice =input("输入 1 表示认真学习, 输入 2 表示躺平摆烂: ")# 注意这里输入的是字符串1,而不是整数1ifchoice =="1":print("你会找到好工作!")elifchoice =="2":print("你可能毕业就失业了!")# 不过实际开发中,用户的输入可能是出乎意料的,所以要做出一些特殊处理。else:print("你的输入有误!")

2.2缩进和代码块

代码块 指的是一组放在一起执行的代码。

Python中使用缩进表示代码块。不同级别的缩进, 程序的执行效果是不同的。

# 代码1a =input("请输入一个整数: ")ifa =="1":print("hello")print("world")

打印:

请输入一个整数:1helloworld
请输入一个整数:0

# 代码2a =input("请输入一个整数: ")ifa =="1":print("hello")print("world")

打印:

请输入一个整数:1helloworld
请输入一个整数:0world

注意上述代码的区别:

在代码1 中, print("world")有一级缩进, 这个语句属于 if内的代码块, 意味着条件成立, 才执行, 条件不成立, 则不执行。

在代码2 中, print("world")没有缩进, 这个语句是 if外部的代码, 不属于 if内部的代码块. 意味着条件无论是否成立, 都会执行。

另外, 代码块内部还可以嵌套代码块。

a =input("请输入第一个整数: ")b =input("请输入第二个整数: ")ifa =="1":ifb =="2":print("hello")print("world")print("python")

在这个代码中,

  • print("hello")具有两级缩进, 属于 if b == "2"条件成立的代码块。

  • print("world")具有一级缩进, 属于 if a == "1"条件成立的代码块。

  • print("python")没有缩进, 无论上述两个条件是否成立, 该语句都会执行。

基于缩进的方式表示代码块, 带来的好处就是强制要求程序猿要写明确的缩进, 来明确代码之间的相对关系。如果缩进书写的不对, 则直接报错。

C++ / Java这些语言, 即使完全不写缩进, 语法也不会报错. 代码可读性就比较差。


同时, 带来的坏处就是, 如果缩进层次比较多, 就容易分不清楚某个语句属于哪个层级。

ifa ==1:ifb ==2:ifc ==3:ifd ==4:ife ==5:iff ==6:ifg ==7:print("hello")print("1")print("2")

请问, 上述代码中的 print("1") 和 print("2")属于哪一级缩进?

因此, 就有了 “写 Python需要自备游标卡尺” 这个梗。


练习

(1) 输入一个整数, 判定是否是奇数

a =int(input("请输入一个整数: "))# 要把字符串a转换成int类型ifa %2==0:# 负数也可以判断,这个==在python里面可以这么用print("偶数")else:print("奇数")

(2) 输入一个整数, 判定是正数还是负数

a =int(input("请输入一个整数: "))ifa >0:print("正数")elifa <0:print("负数")else:print("为 0")

(3) 判定年份是否是闰年

year =int(input("请输入年份: "))ifyear %100==0:# 判定世纪闰年ifyear %400==0:print("闰年")else:print("平年")else:# 判定普通闰年ifyear %4==0:print("闰年")else:print("平年")
year =int(input("请输入年份: "))if(year %100!=0andyear %4==0)oryear %400:print("闰年")else:print("平年")

2.3 空语句 pass

代码示例: 输入一个数字, 如果数字为 1, 则打印 hello

a =int(input("请输入一个整数:"))ifa ==1:print("hello")

这个代码也可以等价写成

a =int(input("请输入一个整数:"))ifa !=1:passelse:print("hello")

其中 pass表示 空语句, 并不会对程序的执行有任何影响, 只是占个位置, 保持 Python语法格式符合要求。

如果代码写作

a =int(input("请输入一个整数:"))ifa !=1:else:print("hello")

程序是不符合 Python语法的, 会直接报错。


3. 循环语句

有些操作是需要反复执行的. 这种就需要使用循环。

3.1 while 循环

基本语法格式

while条件:循环体

条件为真, 则执行循环体代码.

条件为假, 则结束循环.

代码示例: 打印 1-10的整数

num =1whilenum <=10:print(num)num +=1

代码示例: 计算 1-100的和

sum=0num =1whilenum <=100:sum+=num    num +=1print(sum)

代码示例: 计算 5的阶乘

result =1n =1whilen <=5:result *=n    n +=1print(result)

代码示例: 求 1! + 2! + 3! + 4! + 5!

num =1sum=0whilenum <=5:factorResult =1i =1whilei <=num:factorResult *=i        i +=1sum+=factorResult    num +=1print(sum)

这个程序用到了两重循环.

也就是在循环语句中也可以套循环.


3.2 for 循环

基本语法格式

for循环变量 in可迭代对象:循环体

注意:

pythonfor和其他语言不同, 没有 “初始化语句”, “循环条件判定语句”, “循环变量更新语句”, 而是更加简单

所谓的 “可迭代对象”, 指的是 “内部包含多个元素, 能一个一个把元素取出来的特殊变量”

代码示例: 打印 1-10

fori inrange(1,11):print(i)

使用 range函数, 能够生成一个可迭代对象. 生成的范围是 [1, 11), 也就是 [1, 10]

代码示例: 打印 2, 4, 6, 8, 10

fori inrange(2,12,2):print(i)

通过 range的第三个参数, 可以指定迭代时候的 “步长”。也就是一次让循环变量加几。

代码示例: 打印 10-1

fori inrange(10,0,-1):print(i)

range的 步长 也可以设定成负数.

代码示例: 求 1 - 100的和

sum=0fori inrange(1,101):sum+=iprint(sum)

为什么sum下面会出现虚线呢?

102e9dd4a65daddba6e6cb61fb4398ee

因为当前有个内建函数也叫sum,我们可以把自己定义的sum改一下,这样就不会出现下划线了。


那么如何批量修改呢?

我们把鼠标放到sum上面,点击一下,然后键盘上同时点击shiftf6这两个键,然后会出现下面这个弹窗

28435e62559b40656eadc3abc67f5c92

修改后点击重构即可一键替换。


3.3 continue

continue表示结束这次循环, 进入下次循环。

代码示例: 模拟吃包子. 吃第 3个包子的时候吃出了一只虫。

fori inrange(1,6):ifi ==3:continueprint(f"吃完第 { i}个包子")

3.4 break

break表示结束整个循环

代码示例: 模拟吃包子。吃第 3 个包子的时候吃出了半只虫。

fori inrange(1,6):ifi ==3:breakprint(f"吃完第 { i}个包子")

代码示例: 输入若干个数字, 求平均值。 使用 “分号” 作为结尾。

sum=0count =0whileTrue:num =input("请输入数字:")ifnum ==';':breaknum =float(num)sum+=num    count +=1print(sum/count)

4. 综合案例

实现 “人生重开模拟器”

这是一款之前很火的文字类小游戏. 玩家输入角色的初始属性之后, 就可以开启不同的人生经历。

大家可以在网上搜索 “人生重开模拟器”, 就可以玩到这个游戏的各种版本。

完整的程序代码较多, 此处我们只实现其中的一部分逻辑。


4.1 设置初始属性

在游戏中我们设定四个属性.

颜值 (face)

体质 (strong)

智力 (iq)

家境 (home)

我们约定每个属性的范围为 [1, 10], 并且总和不能超过 20

如果玩家输入的初始属性不合理, 就提示输入有误, 重新输入。

print("+---------------------------------------------------------------------+")print("|                                                                     |")print("|                   花有重开日, 人无再少年                               |")print("|                                                                     |")print("|                   欢迎来到, 人生重开模拟器                              |")print("|                                                                     |")print("+---------------------------------------------------------------------+")# 设置初始属性whileTrue:print("请设定初始属性(可用总点数 20)")face =int(input("设定 颜值(1-10):"))strong =int(input("设定 体质(1-10):"))iq =int(input("设定 智力(1-10):"))home =int(input("设定 家境(1-10):"))ifface <1orface >10:print("颜值设置有误!")continueifstrong <1orstrong >10:print("体质设置有误!")continueifiq <1oriq >10:print("智力设置有误!")continueifhome <1orhome >10:print("家境设置有误!")continueifface +strong +iq +home >20:print("总点数超过了 20!")continueprint("初始属性设定完成!")print(f"颜值:{ face},体质:{ strong},智力:{ iq},家境:{ home}")break

4.2 设置性别

通过 random.randint(1, 6)生成一个 [1, 6]的随机整数, 类似于掷色子。

如果是单数, 则性别设为男孩。

如果是双数, 则性别设为女孩。

男孩和女孩会遇到不同的事件。

point =random.randint(1,6)# 掷色子ifpoint %2==1:gender ='boy'print("你是个男孩")else:gender ='girl'print("你是个女孩")

4.3 设置出生点

首先按照家境(home), 分成四个档位。

10是第一档. 加成最高

[7, 9]是第二档。 也有一些加成

[4, 6]是第三档。加成较少

[1, 3]是第四档。 会扣掉属性.

再扔一次色子, 生成 [1, 3]的随机数, 用来表示每一种细分情况。

这里的代码主要就是各种 if else构成。

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('你出生在三线城市, 你的父母是教师')iq +=1elifpoint ==2:print('你出生在镇上, 你的父母是医生')strong +=1else:print("你出生在镇上, 你的父母是个体户")home +=1else:if1<=point <=2:print('你出生在村里, 你的父母是辛苦劳作的农民')strong +=1face -=2elif3<=point <=4:print('你出生在穷乡僻壤, 你的父母是无业游民')home -=1else:print('你出生在镇上, 你父母感情不和')strong -=1

4.4 针对每一岁, 生成人生经历

按照年龄, 把人生经历分成四个阶段:

幼年阶段 [1, 10]

青年阶段 [11, 20]

壮年阶段 [20, 50]

老年阶段 50岁以上.

每个阶段都会有不同的精力和事件发生.

幼年阶段可塑性强, 体质, 颜值, 智力都会有较快变化

青年阶段主要是求学, 同时父母一辈会有明显变化, 智力和家境会有明显变化.

壮年阶段相对平稳, 属性变化不大, 主要是一些随机事件影响到属性.

老年阶段体质, 颜值, 智力都会显著退化, 并且随着年龄的上升, 疾病/死亡的风险逐渐升高.

此处我们以幼年为例, 简单实现一下这里的处理逻辑.

使用 for循环, 按照年龄循环起来.

针对每一年, 先掷一次 [1, 3]的色子, 根据不同的随机数值, 来触发不同的事件.

根据性别, 年龄, 各种属性, 来触发不同的事件. 这里都使用 if - else的方式来组织.

不同的事件可能会对属性有正面/负面的影响.

在每一年的最后, 打印这一年遇到的事情.

如果夭折, 则直接 sys.exit(0)退出程序.

使用 time.sleep(1)使程序暂停执行 1s, 方便观察程序结果.

forage inrange(1,11):info =f'你今年 { age}岁, '# 把一整年的打印都整理到一个字符串中,然后在这年的结尾统一打印。point =random.randint(1,3)# 生成一个1-3的随机数# 性别触发事件ifgender =='girl'andhome <=3andpoint ==1:info +='你家里人重男轻女思想非常严重, 你被遗弃了!'print(info)print("游戏结束!")sys.exit(0)# 体质触发的事件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 +='你和别的小朋友经常打架'iq -=1strong +=1else:info +='你经常被别的小朋友欺负'strong -=1# 智商触发的事件elifiq <5:info +='你看起来傻傻的, 'ifhome >=8andage >=6:info +='你的父母给你送到更好的学校学习'elif4<=home <=7:ifgender =='boy':info +='你的父母鼓励你多运动, 加强身体素质'strong +=1else:info +='你的父母鼓励你多打扮自己'face +=1else:info +='你的父母为此经常吵架'ifpoint ==1:strong -=1elifpoint ==2:iq -=1# 健康成长else:info +='你健康成长, 'ifpoint ==1:info +='看起来更聪明了'iq +=1elifpoint ==2:info +='看起来更好看了'face +=1else:info +='看起来更结实了'strong +=1print('-------------------------------------------')print(info)print(f'strong={ strong}, face={ face}, iq={ iq}, home={ home}')time.sleep(1)

【我要纠错】责任编辑:新华社