目录

基础语法

顺序语句

条件语句

什么是条件语句

语法格式

缩进和代码块

循环语句

while循环

for 循环

continue

break

综合案例


基础语法

顺序语句

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

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

条件语句

什么是条件语句

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

如果 我认真学习

我就很容易找到工作

否则

我就容易毕业就失业

其中 "我认真学习" 称为条件. 如果条件成立(条件为真), 则会出现 "我就很容易找到工作" 这个情况. 如果条件不成立(条件为假), 则会出现 "我就容易毕业就失业".

语法格式

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

(1) 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

(2) if - else

if expression:
 do_something1
else:
 do_something2

如果 expression 值为 True, 则执行 do_something1

如果 expression 值为 False, 则执行 do_something2

(3)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中的条件语句写法, 和很多编程语言不太一样.

  • if 后面的条件表达式, 没有 ( ), 使用 : 作为结尾.
  • if / else 命中条件后要执行的 "语句块", 使用缩进 (通常是 4 个空格或者 1 个 tab)来表示, 而不是 { };使用缩进表示代码块归属
  • 对于多条件分支, 不是写作 else if, 而是 elif (合体了).

缩进和代码块

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

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

在if,else,elif,while,for...需要跟上述代码的部分,都是需要使用缩进得;在c++中没有要求使用缩进;

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

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

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

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

循环语句

while循环

基本语法格式:

while 条件:

循环体

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

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

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 的第三个参数, 可以指定迭代时候的 "步长". 也就是一次让循环变量加几.

代码示例:

打印 10-1

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

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

continue

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

代码示例:

模拟吃包子. 吃第 3 个包子的时候吃出了一只虫.

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

break

break 表示结束整个循环

代码示例:

模拟吃包子. 吃第 3 个包子的时候吃出了半只虫.

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

综合案例

实现一个简化版本的人生重开模拟器

(1)游戏开始的时候设定初始属性--颜值 体质 智力 家境

(2)开始游戏,随机生成性别和出生点

(3)针对每一年都生成人生的经历(依靠一定的随机因素+当前角色的属性)

前提:随机数生成

num = random.randint(a, b)

randint(a, b) 返回的整数包含两端(闭区间 [a, b]),即 a <= num <= b。

导入外部模块/函数

# 方式1:导入整个模块(最常用,最推荐)
import random
num = random.randint(1, 10)  # 通过模块名.函数名调用
方式2:从模块中导入特定函数(省去模块名前缀)
from random import randint
num = randint(1, 10)  # 直接写函数名,不用 random.
方式3:导入整个模块并起别名(简化长模块名)
import random as rd
num = rd.randint(1, 10)  # 用缩写 rd 代替 random

能用别人写好的就用别人写好的,方便省事;

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

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

  • 幼年阶段 [1, 10]
  • 青年阶段 [11, 20]
  • 壮年阶段 [20, 50]
  • 老年阶段 50 岁以上.

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

  • 幼年阶段可塑性强, 体质, 颜值, 智力都会有较快变化
  • 青年阶段主要是求学, 同时父母一辈会有明显变化, 智力和家境会有明显变化.
  • 壮年阶段相对平稳, 属性变化不大, 主要是一些随机事件影响到属性.
  • 老年阶段体质, 颜值, 智力都会显著退化, 并且随着年龄的上升, 疾病/死亡的风险逐渐升高.

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

  • 使用 for 循环, 按照年龄循环起来,从1到10
  • 针对每一年, 先掷一次 [1, 3] 的色子, 根据不同的随机数值, 来触发不同的事件。 每个事件都会根据随机结果和当前属性值进行判定,并引入小的随机波动(如体质变化在基础值上±1),增加游戏的可变性和趣味性。
  • 根据性别, 年龄, 各种属性, 来触发不同的事件. 这里都使用 if - else 的方式来组织。
  • 不同的事件可能会对属性有正面/负面的影响。影响程度不仅取决于事件类型,还可能受当前属性值影响(例如高智力的角色从学习事件中获益更多)。
  • 在每一年的最后, 打印这一年遇到的事情,包括事件描述和属性变化结果。
  • 如果夭折(如体质降至0或以下), 则直接 sys.exit(0) 退出程序。
  • 使用 time.sleep(1) 使程序暂停执行 1s, 方便观察程序结果。

sys.exit(0) 用于正常终止程序,sys.exit(1) 用于错误终止,底层通过抛出 SystemExit 异常实现。需要import sys;也是python内部提供的一个模块;

Python 使用缩进来定义代码块,有些地方必须有代码才能通过语法检查。当你暂时不想写具体实现时,可以用 pass占位。pass 是 Python 中的一个空操作语句,它什么也不做,就是一个占位符。

time.sleep() 的参数单位是秒,可以是整数或浮点数

代码示例

import random
import sys
import time

print('~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~')
print('                                                             ')
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):'))
    print('')
    while True:
        if face>10 or face<1 :
            print('输入错误')
            face = int(input('请再次输入你的颜值属性(1-10):'))
        else :
            break
    while True:
        if strong>10 or strong<1 :
            print('输入错误')
            strong=int(input('请再次输入你的体质属性(1-10):'))
        else :
            break
    while True:
        if iq>10 or iq<1:
            print('输入错误')
            iq=int(input('请再次输入你的智力属性(1-10):'))
        else :
            break
    while True:
        if home>10 or home<1:
            print('输入错误')
            home=int(input('请再次输入你的家庭属性(1-10):'))
        else :
            break
    if (face+strong+iq+home)>20:
        print('属性总和出错,请再次输入')
    else :
        break

print('输入正确!')
print(f'颜值={face},体质={strong},智商={iq},家庭={home}')
print('')

print('到了选择性别的时候了')
print('*************************************************************')
sex=random.randint(0,1)
if sex==1:
    gender='boy'
    print('你是一个英俊的男孩')
else :
    gender='girl'
    print('你是一个美丽的女孩')
print('')

print('到了随机出生点的时候了')
print('*************************************************************')
place=random.randint(1,3)
if home==10:
    print('你出生在帝都且拥有最厉害的背景同时你拥有最好的资源')
    face+=2  #三分靠天生 七分靠打扮
    strong+=2
    iq+=2
    home+=2
elif 7<=home<=9 :
    print('你出生在一线城市,拥有这个城市最好的资源和背景')
    face+=1  #三分靠天生 七分靠打扮
    strong+=1
    iq+=1
    home+=1
elif 4<=home<=6 :
    print('你出生在一般的城市,拥有这个城市的一般资源和背景')
    strong += 1
else :
    print('你出生被人遗弃在山沟里,除了山还是山')
    strong+=4
print(f'颜值={face},体力={strong},智力={iq},家庭={home}')
print('')

print('到了幼年阶段了')
print('*************************************************************')
for age in range(1,11):
    info=f'你现在年龄为{age},'  #info='你现在年龄为{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+='但是在家人的陪伴下你痊愈了'
            home-=1
            strong+=1
        else :
            info+='家庭不好,父母没精力导致你的病情更坏'
            strong-=1
    #颜值触发
    elif face<=4 and age>=7:
        info+='你长得惹人嫌弃,别的朋友不跟你玩,'
        if iq>5:
            info+='你决定内在美,好好的学习!'
            iq+=1
        else :
            if gender=='boy' :
                info+='从而你经常跟别的打架'
                strong+=1
                iq-=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+='你看起来更壮了'
            strong+=1
        elif point==2:
            info+='你看起来更好看了'
        else:
            pass
#打印这一年的事
print(info)
print(f'颜值={face},体力={strong},智力={iq},家庭={home}')
print('*************************************************************')
time.sleep(1)

更多推荐