一、顺序语句
默认情况下,Python 的代码执行顺序是按照从上到下的顺序,依次执行的。
            
            
              python
              
              
            
          
          print("1")
print("2")
print("3")运行结果:

执行结果一定为 "123",而不会出现 "321" 或者 "132" 等。这种按照顺序执行的代码,我们称为顺序语句。
二、条件语句
1、语法格式
Python 中使用 if else 关键字表示条件语句。
(1) if
            
            
              python
              
              
            
          
          if expression:
    do_something1
    do_something2
next_something如果 expression 值为 True,则执行 do_something1、do_something2 和 next_something。
如果 expression 值为 False,则只执行 next_something,不执行 do_something1、do_something2。
(2) if - else
            
            
              python
              
              
            
          
          if expression:
    do_something1
else:
    do_something2如果 expression 值为 True,则执行 do_something1。
如果 expression 值为 False,则执行 do_something2。
(3) if - elif - else
            
            
              python
              
              
            
          
          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中的条件语句写法,和很多编程语言不太一样。
- if 后面的条件表达式,没有用 ( ) 括起来,而是使用 :作为结尾。
- if / else 命中条件后要执行的 "语句块", 使用缩进 (通常是 4 个空格或者 1 个 tab)来表示, 而不是 { }。
- 对于多条件分支, 不是写作 else if, 而是 elif (合体了).
举例: 输入1表示愿意认真学习,输入2表示躺平摆烂。
            
            
              python
              
              
            
          
          choice = input("输入1表示认真学习,输入2表示躺平摆烂:")
if choice == "1":
    print("你会找到好工作!")
elif choice == "2":
    print("你可能毕业就失业了!")
else:
    print("你的输入有误!")运行结果:

2、缩进和代码块
代码块 指的是一组放在一起执行的代码。
在 Python 中使用缩进表示代码块,不同级别的缩进,程序的执行效果是不同的。
代码一:
            
            
              python
              
              
            
          
          a = input("请输入一个整数: ")
if a == "1":
    print("hello")
    print("world")运行结果:

代码二:
            
            
              python
              
              
            
          
          a = input("请输入一个整数: ")
if a == "1":
    print("hello")
print("world")运行结果:

注意上述代码的区别。
在代码1 中,print("world") 有一级缩进,这个语句属于 if 内的代码块,意味着条件成立才执行,条件不成立则不执行。
在代码2 中,print("world") 没有缩进,这个语句是 if 外部的代码,不属于 if 内部的代码块。意味着条件无论是否成立, 都会执行。
另外,代码块内部还可以嵌套代码块。
            
            
              python
              
              
            
          
          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
              
              
            
          
          if a == 1:
    if b == 2:
        if c == 3:
            if d == 4:
                if e == 5:
                    if f == 6:
                        if g == 7:
                   print("hello")
                    print("1")
     print("2")因此,就有了 "写 Python 需要自备游标卡尺" 这个梗。
3、练习
(1)输入一个整数,判定奇偶数。
            
            
              c
              
              
            
          
          a = int(input("请输入一个整数:"))
if a % 2 == 0:
    print("偶数")
else:
    print("奇数")运行结果:

(2)输入一个整数,判断正负数。
            
            
              c
              
              
            
          
          a = int(input("请输入一个整数:"))
if a > 0:
    print("正数")
elif a<0:
    print("负数")
else:
    print("为0")运行结果:

(3)输入一个年份,判断闰平年。
            
            
              c
              
              
            
          
          year = int(input("请输入年份:"))
if (year % 100 != 0 and year %4 == 0) or year % 400:
    print("闰年")
else:
    print("平年")运行结果:

4、空语句 pass
举例: 输入一个数字,如果数字为1就打印 hello。
            
            
              c
              
              
            
          
          a = int(input("请输入一个整数:"))
if a == 1:
    print("hello")运行结果:

这个代码也可以等价写成:
            
            
              c
              
              
            
          
          a = int(input("请输入一个整数:"))
if a != 1:
    pass
else:
    print("hello")其中 pass 表示 空语句,并不会对程序的执行有任何影响,只是占个位置,保持 Python 语法格式符合要求。
三、循环语句
有些操作是需要反复执行的,这种就需要使用循环。
1、while 循环
基本语法格式:
            
            
              c
              
              
            
          
          while 条件:   
 循环体 - 条件为真,则执行循环代码。
- 条件为假,则结束循环。
练习1:打印1-10的整数。
            
            
              c
              
              
            
          
          num = 1
while num <= 10:
    print(num)
    num += 1运行结果:

练习2:计算1-100的和。
            
            
              c
              
              
            
          
          sum = 0
num = 1
while num <= 100:
    sum += num
    num += 1
print(sum)运行结果:

练习3:计算5的阶乘。
            
            
              c
              
              
            
          
          result = 1
n = 1
while n <= 5:
    result *= n
    n += 1
print(result)运行结果:

练习4:求1! + 2! + 3! + 4! + 5! 。
            
            
              python
              
              
            
          
          sum = 0
num = 1
# 分别求1 - 5(num)的阶乘
while num <= 5:
    result = 1
    # 求第num次的阶乘
    i = 1
    while i <= num:
        result *= i
        i += 1
    sum += result
    num += 1
print(sum)运行结果:

这个程序用到了两重循环。
也就是在循环语句中也可以套循环。
2、for 循环
基本语法格式:
            
            
              c
              
              
            
          
          for 循环变量 in 可迭代对象:
    循环体注意:
- python 的 for 和其他语言不同,没有 "初始化语句"、"循环条件判定语句"、"循环变量更新语句",而是更加地简单。
- 所谓的 "可迭代对象",指的是 "内部包含多个元素,能一个一个把元素取出来的特殊变量"。
举例: for 循环打印1-10 。
            
            
              c
              
              
            
          
          for i in range(1,11):
    print(i)运行结果:

注:使用 range 函数,能够生成一个可迭代对象,生成的范围是 [1, 11),是左闭右开区间。
练习1: 打印 2, 4, 6, 8, 10。
            
            
              c
              
              
            
          
          for i in range(2,12,2):
    print(i)运行结果:

注:通过 range 的第三个参数,可以指定迭代时候的 "步长"。也就是一次让循环变量加几。
练习2: 打印 10-1。
            
            
              c
              
              
            
          
          for i in range(10,0,-1):
    print(i)运行结果:

注:range 的步长也可以设定成负数。
练习3: 求 1 - 100 的和。
            
            
              c
              
              
            
          
          sum = 0
for i in range(1,101):
    sum += i
print(sum)运行结果:

3、continue
continue 表示结束这次循环,进入下次循环。
举例: 模拟吃包子,吃第3个包子的时候吃出了一只虫。
            
            
              c
              
              
            
          
          for i in range(1,6):
    if i == 3:
        continue
    print(f"吃完第{i}个包子")运行结果:

4、break
break 表示结束整个循环。
举例: 模拟吃包子,吃第 3 个包子的时候吃出了半只虫。
            
            
              c
              
              
            
          
          for i in range(1,6):
    if i == 3:
        break
    print(f"吃完第{i}个包子")运行结果:

练习: 输入若干个数字,求其平均值,使用 ;作为结尾。
            
            
              c
              
              
            
          
          sum = 0
count = 0
while True:
    num = input("请输入数字:")
    if num == ';':
        break
    num = float(num)
    sum += num
    count += 1
print(sum / count)运行结果:

四、小游戏:人生重开模拟器
实现 "人生重开模拟器"。
这是一款之前很火的文字类小游戏。玩家输入角色的初始属性之后,就可以开启不同的人生经历。
大家可以在网上搜索 "人生重开模拟器",就可以玩到这个游戏的各种版本。
完整的程序代码较多,此处我们只实现其中的一部分逻辑。
1、设置初始属性
在游戏中我们先设定四个属性:
- 颜值 (face)
- 体质 (strong)
- 智力 (iq)
- 家境 (home)
我们约定每个属性的范围为 [1,10],并且总和不能超过 20。
            
            
              c
              
              
            
          
          # 主页面
print("+----------------------------------------------------+")
print("|                                                    |")
print("|                 花有重开日,人无再少年                |")
print("|                                                    |")
print("|                 欢迎来到,人生重开模拟器              "
      "|")
print("|                                                    |")
print("+----------------------------------------------------+")
# 设置初始属性
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再来运行测试:
正常运行:

某项属性输入错误:

点数之和超出总点数:

2、设置性别
通过 random.randint(1, 6) 生成一个 [1, 6] 的随机整数,类似于掷色子。
- 如果是单数,则性别设为男孩。
- 如果是双数,则性别设为女孩。
男孩和女孩会遇到不同的事件。
注:使用random前需要导入:import random,放在文件的开头。
            
            
              c
              
              
            
          
          # 掷色子
point = random.randint(1,6)
if point % 2 == 1:
    gender = 'boy'
    print("你是个男孩")
else:
    gender = 'girl'
    print("你是个女孩")再进行测试:

3、设置出生点
接着按照家境(home),分成四个档位。
- 10 是第一档,加成最高。
- 
7, 9\] 是第二档,也有一些加成。 
- 
1, 3\] 是第四档,会扣掉属性。 
            
            
              c
              
              
            
          
          # 掷色子
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进行测试:

4、针对每一岁, 生成人生经历
按照年龄, 把人生经历分成四个阶段:
- 
1, 10\]:幼年阶段 
- 
20, 50\]:壮年阶段 
每个阶段都会有不同的精力和事件发生。
- 幼年阶段可塑性强,体质、颜值、智力都会有较快变化。
- 青年阶段主要是求学,同时父母一辈会有明显变化,智力和家境会有明显变化。
- 壮年阶段相对平稳,属性变化不大,主要是一些随机事件影响到属性。
- 老年阶段体质,颜值,智力都会显著退化,并且随着年龄的上升,疾病/死亡的风险逐渐升高。
此处我们以幼年为例,简单实现一下这里的处理逻辑。
- 使用 for 循环,按照年龄循环起来。
- 针对每一年,先掷一次 [1, 3] 的色子,根据不同的随机数值,来触发不同的事件。
- 根据性别、年龄、各种属性,来触发不同的事件。这里都使用 if - else 的方式来组织。
- 不同的事件可能会对属性有正面/负面的影响。
- 在每一年的最后,打印这一年遇到的事情。
- 如果夭折,则直接 sys.exit(0) 退出程序。需要在开头导入import sys。
- 使用 time.sleep(1) 使程序暂停执行 1s,方便观察程序结果。需要在开头导入import time。
            
            
              c
              
              
            
          
          # 幼年
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)
    # 体质触发的事件
    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 +='你的父母给你送到更好的学校学习'
        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:
        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)运行结果:


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