Python基础语法2

发布于:2025-04-19 ⋅ 阅读:(15) ⋅ 点赞:(0)

目录

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_something1
    do_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 += num
    num += 1
print(sum)

例如:计算 5 的阶乘

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

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

num = 1
sum = 0
while num <= 5:
    factorResult = 1
    i = 1
    while i <= num:
        factorResult *= i
        i += 1
    sum += factorResult
    num += 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:
        continue
    print(f"吃完第 {i} 个包子")

4.4、break

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

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

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

sum = 0
count = 0
while True:
    num = input("请输入数字:")
    if num == ';':
        break
    num = float(num)
    sum += num
    count += 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("颜值设置有误!")
        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

# 设置性别,如果是单数, 则性别设为男孩;如果是双数, 则性别设为女孩
# 使用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 += 1
    iq += 1
    face += 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('你出生在三线城市, 你的父母是教师')
        iq += 1
    elif point == 2:
        print('你出生在镇上, 你的父母是医生')
        strong += 1
    else:
        print("你出生在镇上, 你的父母是个体户")
        home += 1
else:
    # 第四档
    if 1 <= point <= 2:
        print('你出生在村里, 你的父母是辛苦劳作的农民')
        strong += 1
        face -= 2
    elif 3 <= point <= 4:
        print('你出生在穷乡僻壤, 你的父母是无业游民')
        home -= 1
    else:
        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 += 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 += '你和别的小朋友经常打架'
                iq -= 1
                strong += 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 += '看起来更聪明了'
            iq += 1
        elif point == 2:
            info += '看起来更好看了'
            face += 1
        else:
            info += '看起来更结实了'
            strong += 1

    # 打印这一年发生的事情
    print('-------------------------------------------')
    print(info)
    print(f'strong={strong}, face={face}, iq={iq}, home={home}')
    time.sleep(1) # 其中time也是Python提供的模块,sleep的作用是让程序暂停一会再继续执行。

# 更多的逻辑, 此处就不再实现了。大家可以按照类似的方式, 设计更多的事件, 完成 青年, 壮年, 老年 的相关逻辑。


网站公告

今日签到

点亮在社区的每一天
去签到