当前位置: 首页 > news >正文

Python基础语法2

目录

1、顺序语句

2、条件语句

2.1、语法格式

2.2、缩进和代码块

3、空语句

4、循环语句

4.1、while循环

4.2、for循环

4.3、continue

4.4、break

5、综合案例


1、顺序语句

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

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

执行结果一定为 "123",而不会出现 "321" 或者 "132" 等。这种按照顺序执行的代码,我们称为顺序语句。这个顺序是很关键的,编程是一件明确无歧义的事情,安排好任务的顺序,计算机才能够正确的进行执行。

2、条件语句

条件语句能够表达 "如果 ... 否则 ..." 这样的语义。这构成了计算机中基础的逻辑判定。条件语句也叫做分支语句,表示了接下来的逻辑可能有几种走向。

2.1、语法格式

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

if

if expression:do_something1do_something2
next_something

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

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

if - else

if expression:do_something1
else:do_something2

如果 expression 值为 True,则执行 do_something1。

如果 expression 值为 False,则执行 do_something2。

if - elif - else

if expression1:do_something1
elif expression2:do_something2
else:do_something3

如果 expression1 值为 True,则执行 do_something1。

如果 expression1 值为 False,并且 expression2 为 True 则执行 do_something2。

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

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

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

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

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

例如:

choice = input("输入 1 表示认真学习, 输入 2 表示躺平摆烂: ")
if choice == "1":print("你会找到好工作!")
elif choice == "2":print("你可能毕业就失业了!")
else:print("你的输入有误!")

2.2、缩进和代码块

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

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

注意上述代码的区别:在代码1 中,print("world") 有一级缩进,这个语句属于 if 内的代码块,意味着条件成立才执行,条件不成立则不执行。在代码2 中,print("world") 没有缩进,这个语句是 if 外部的代码,不属于 if 内部的代码块;意味着条件无论是否成立,都会执行。

另外,代码块内部还可以嵌套代码块,例如:

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

在这个代码中:

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

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

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

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

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

同时,带来的坏处就是,如果缩进层次比较多,就容易分不清楚某个语句属于哪个层级。因此,就有了 "写 Python 需要自备游标卡尺" 这个梗。

练习1:输入一个整数,判定是否是奇数

a = int(input("请输入一个整数: "))
if a % 2 == 0:print("偶数")
else:print("奇数") 

或者还可以这样写:

a = int(input('请输入一个整数: '))
if a % 2 == 1:print("奇数")
else:print("偶数")

上面的这个代码的实现方式在C++或JAVA中是不太行的,例如-19%2在C++和JAVA中计算出的是一个-1,但是在Python中结果为1。 

练习2:输入一个整数,判定是正数还是负数

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

练习3:判定年份是否是闰年

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

或者还可以这么写:

year = int(input("请输入年份: "))
if (year % 100 != 0 and year % 4 == 0) or year % 400==0:print("闰年")
else:print("平年")

3、空语句

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

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

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

如果代码写成:

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

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

4、循环语句

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

4.1、while循环

基本语法格式:

while 条件:循环体

条件为真,则执行循环体代码。条件为假,则结束循环。

例如:打印 1-10 的整数

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

例如:计算 1-100 的和

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

例如:计算 5 的阶乘

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

例如:求 1! + 2! + 3! + 4! + 5!

num = 1
sum = 0
while num <= 5:factorResult = 1i = 1while i <= num:factorResult *= ii += 1sum += factorResultnum += 1
print(sum)

这个程序用到了两重循环,也就是在循环语句中也可以套循环。

4.2、for循环

基本语法格式:

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

注意:

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

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

例如:打印 1-10

for i in range(1, 11):print(i)

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

例如:打印 2, 4, 6, 8, 10

for i in range(2, 12, 2):print(i)

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

例如:打印 10-1

for i in range(10, 0, -1):print(i)

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

例如:求 1 - 100 的和

sum = 0 #当前有个内置函数sum,咱们定义的sum变量与内置的函数冲突了,虽然#不影响运行,但是后续的代码中就不能使用内置函数sum了。
for i in range(1, 101):sum += i
print(sum)

4.3、continue

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

for i in range(1, 6):if i == 3:continueprint(f"吃完第 {i} 个包子")

4.4、break

break 表示结束整个循环。例如:

for i in range(1, 6):if i == 3:breakprint(f"吃完第 {i} 个包子")

例如:输入若干个数字,求平均值,使用 "分号" 作为结尾。

sum = 0
count = 0
while True:num = input("请输入数字:")if num == ';':breaknum = float(num)sum += numcount += 1
print(sum / count)

5、综合案例

实现 "人生重开模拟器",这是一款文字类小游戏,玩家输入角色的初始属性之后,就可以开启不同的人生经历。完整的程序代码较多,此处我们只实现其中的一部分逻辑。

import random
import sys
import time# 人生重开模拟器
print("+---------------------------------------------------------------------+")
print("|                                                                     |")
print("|                      花有重开日, 人无再少年                            |")
print("|                                                                     |")
print("|                                                                     |")
print("|                      欢迎来到, 人生重开模拟器|                          |")
print("+---------------------------------------------------------------------+")# 设置初始属性
# 在游戏中我们设定四个属性:颜值 (face),体质 (strong),智力 (iq),家境 (home)
# 我们约定每个属性的范围为 [1, 10], 并且总和不能超过 20.
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("颜值设置有误!")continueif strong < 1 or strong > 10:print("体质设置有误!")continueif iq < 1 or iq > 10:print("智力设置有误!")continueif home < 1 or home > 10:print("家境设置有误!")continueif face + strong + iq + home > 20:print("总点数超过了 20!")continueprint("初始属性设定完成!")break# 设置性别,如果是单数, 则性别设为男孩;如果是双数, 则性别设为女孩
# 使用random.randint(beg,end),就能生成[beg,end]之间的随机整数
# 其中random是Python中的一个模块,模块就是指别人写好的代码,直接给我们来使用。
# 在Python中,如果想要引入其他模块,需要先使用import语句,把模块的名字给“导入”进来。例如:import random
# 对于PyCharm来说,有一个功能就是能够自动导入当前使用的模块。
point = random.randint(1, 6) # 掷色子
if point % 2 == 1:gender = 'boy'print("你是个男孩")
else:gender = 'girl'print("你是个女孩")# 设置出生点,首先按照家境(home), 分成四个档位.
# 10 是第一档. 加成最高。
# [7, 9] 是第二档. 也有一些加成。
# [4, 6] 是第三档. 加成较少。
# [1, 3] 是第四档. 会扣掉属性。
# 再扔一次色子, 生成 [1, 3] 的随机数, 用来表示每一种细分情况
point = random.randint(1, 3) # 掷色子
if home == 10:# 第一档print('你出生在帝都, 你的父母是高官政要')home += 1iq += 1face += 1
elif 7 <= home <= 9:# 第二档if point == 1:print('你出生在大城市, 你的父母是公务员')face += 2elif point == 2:print('你出生在大城市, 你的父母是大企业高管')home += 2else:print('你出生在大城市, 你的父母是大学教授')iq += 2
elif 4 <= home <= 6:# 第三档if point == 1:print('你出生在三线城市, 你的父母是教师')iq += 1elif point == 2:print('你出生在镇上, 你的父母是医生')strong += 1else:print("你出生在镇上, 你的父母是个体户")home += 1
else:# 第四档if 1 <= point <= 2:print('你出生在村里, 你的父母是辛苦劳作的农民')strong += 1face -= 2elif 3 <= point <= 4:print('你出生在穷乡僻壤, 你的父母是无业游民')home -= 1else:print('你出生在镇上, 你父母感情不和')strong -= 1# 按照年龄, 把人生经历分成四个阶段:
# 幼年阶段 [1, 10]
# 青年阶段 [11, 20]
# 壮年阶段 [20, 50]
# 老年阶段 50 岁以上# 每个阶段都会有不同的精力和事件发生:
# 幼年阶段可塑性强, 体质, 颜值, 智力都会有较快变化
# 青年阶段主要是求学, 同时父母一辈会有明显变化, 智力和家境会有明显变化
# 壮年阶段相对平稳, 属性变化不大, 主要是一些随机事件影响到属性
# 老年阶段体质, 颜值, 智力都会显著退化, 并且随着年龄的上升, 疾病/死亡的风险逐渐升高# 此处我们以幼年为例, 简单实现一下这里的处理逻辑:
# 使用 for 循环, 按照年龄循环起来
# 针对每一年, 先掷一次 [1, 3] 的色子, 根据不同的随机数值, 来触发不同的事件
# 根据性别, 年龄, 各种属性, 来触发不同的事件,这里都使用if - else的方式来组织
# 不同的事件可能会对属性有正面/负面的影响
# 在每一年的最后, 打印这一年遇到的事情
# 如果夭折, 则直接sys.exit(0) 退出程序
# 使用time.sleep(1) 使程序暂停执行 1s, 方便观察程序结果
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)  # sys是system这个单词的缩写,也是Python内部提供的一个模块。# 体质触发的事件elif strong < 6 and point != 3:info += '你生了一场病,'if home >= 5:info += '在父母的精心照料下恢复了健康'strong += 1home -= 1else:info += '你的父母没精力管你, 你的身体状况更糟糕了'strong -= 1# 颜值触发的事件elif face < 4 and age >= 7:info += '你因为长的太丑, 别的小朋友不喜欢你, 'if iq > 5:info += '你决定用学习填充自己'iq += 1else:if gender == 'boy':info += '你和别的小朋友经常打架'iq -= 1strong += 1else:info += '你经常被别的小朋友欺负'strong -= 1# 智商触发的事件elif iq < 5:info += '你看起来傻傻的, 'if home >= 8 and age >= 6:info += '你的父母给你送到更好的学校学习'iq+=1elif 4 <= home <= 7:if gender == 'boy':info += '你的父母鼓励你多运动, 加强身体素质'strong += 1else:info += '你的父母鼓励你多打扮自己'face += 1else:info += '你的父母为此经常吵架'if point == 1:strong -= 1elif point == 2:iq -= 1else:pass# 健康成长else:info += '你健康成长, 'if point == 1:info += '看起来更聪明了'iq += 1elif point == 2:info += '看起来更好看了'face += 1else:info += '看起来更结实了'strong += 1# 打印这一年发生的事情print('-------------------------------------------')print(info)print(f'strong={strong}, face={face}, iq={iq}, home={home}')time.sleep(1) # 其中time也是Python提供的模块,sleep的作用是让程序暂停一会再继续执行。# 更多的逻辑, 此处就不再实现了。大家可以按照类似的方式, 设计更多的事件, 完成 青年, 壮年, 老年 的相关逻辑。

相关文章:

  • 游戏代码编辑
  • 凸优化第2讲:凸优化建模
  • 一篇文章快速上手linux系统中存储多路径multipath的配置
  • MCP、RAG与Agent:下一代智能系统的协同架构设计
  • Cribl 中数据脱敏mask 的实验
  • 【HDFS】BlockPlacementPolicyRackFaultTolerant#getMaxNode方法的功能及具体实例
  • BufferedReader 终极解析与记忆指南
  • 使用python求函数极限
  • Java实现选择排序算法
  • 盛水最多的容器问题详解:双指针法与暴力法的对比与实现
  • vcast工具env环境问题二:<command-line>: error: stray ‘\’ in program
  • 深入解析 sklearn 中的 LabelEncoder:功能、使用场景与注意事项
  • 三、The C in C++
  • TV板卡维修技术【一】
  • 什么是GOTS认证,GOTS认证有什么要求?GOTS认证有什么作用
  • 基于动态注意力机制与双向融合的目标检测模型详解
  • 【树莓派 PICO 2 测评】采集 DS18B20 数据及 OLED 显示
  • Dockerfile项目实战-单阶段构建Vue2项目
  • vue动画
  • 索引语法SQL性能分析索引的使用
  • 市民建议公交广播增加“请勿大声喧哗”提示,上海交通委回复
  • 2025年福建省文旅经济发展大会召开
  • 观察|雀巢咖啡加码中国布局,如何借势云南咖啡打造新增长极?
  • 浙江金华一副镇长被指殴打村民,镇党委称仍在调查核实
  • 乌克兰和美国签署关于矿产协议的备忘录
  • 俄总统新闻秘书:乌克兰问题谈判相当艰难