【Python】基础语法二

> 作者:დ旧言~
> 座右铭:松树千年终是朽,槿花一日自为荣。

> 目标:了解Python基础语法,如常量和表达式、变量和类型、注释、输入输出、运算符。

> 毒鸡汤:有些事情,总是不明白,所以我不会坚持。早安!

> 专栏选自:Python基础知识_დ旧言~的博客-CSDN博客

> 望小伙伴们点赞👍收藏✨加关注哟💕💕

一、顺序语句

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

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

  • 这个顺序是很关键的. 编程是一件明确无歧义的事情. 安排好任务的顺序, 计算机才能够正确的进行执行.
  • 就好像人生的顺序, 是上学, 工作, 结婚, 生子. 一旦这里的顺序乱了, 就很麻烦.

二、条件语句


2.1、什么是条件语句

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

一个典型的例子:

  1. 如果丘处机没有路过牛家村,
  2. 那么金兵不会死在郭, 杨两家手上
  3. 郭, 杨两家就不会流亡北方
  4. 郭夫人就不会去到大漠, 完颜洪烈就不会遇到包惜弱
  5. 郭靖就不会和江南七怪救了铁木真
  6. 蒙古就不会统一
  7. 蒙古铁骑就不会西征
  8. 欧洲就不会出现火药, 也就不会出现文艺复兴, 大航海.
  9. 大炮就不会从欧洲传到日本, 日本得不到统一
  10. 完颜洪烈就不会全力战, 金国内乱
  11. 宋朝不会灭亡, 并诞生出资本主义. 中国成为最发达的国家.

2.2、语法格式

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_so;mething2

(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

说明:

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

举个栗子:

2.3、缩进和代码块

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

举个栗子1:

举个栗子2:

说明:

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

代码块内部还可以嵌套代码块:

在这个代码中:

  • print("hello") 具有两级缩进, 属于 if b == "2" 条件成立的代码块.
  • print("world") 具有一级缩进, 属于 if a == "1" 条件成立的代码块.
  • print("python") 没有缩进, 无论上述两个条件是否成立, 该语句都会执行.

2.4、练习 

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

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

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

闰年规则

  • 能被4整除但是不能被100整除
  • 能被400整除

方法一:

方式二:

2.5、空语句 pass

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

这个代码也可以等价写成:

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

如果代码写成:

三、循环语句

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

3.1、while 循环

基本语法格式:

while 条件:
    循环体
  • 条件为真, 则执行循环体代码.
  • 条件为假, 则结束循环.

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

# 打印 1-10 的整数
num = 1
while num <= 10:
    print(num)
    num += 1

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

# 计算 1-100 的和
num = 1 # 枚举1-100的数
sum = 0 # 计算总和
while num <= 100:
    sum += num
    num += 1
print(f'总和 sum = {sum}')

代码示例: 计算 5 的阶乘 

# 计算 5 的阶乘 5 * 4 * 3 * 2 * 1
num = 5
fac = 1 # factorial 阶乘英文单词
while num >= 1:
    fac *= num
    num -= 1
print(f'num的阶乘为{fac}')

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

# 求 1! + 2! + 3! + 4! + 5!
num = 1
sum = 0
while num <= 5:
    fac =1
    i = 1
    while i <= num:
        # 计算1-5之间的阶乘
        fac *= i
        i +=1
    # 累加阶乘并将num+1
    sum += fac
    num += 1
print(f'sum = {sum}')

3.2、for 循环

基本语法格式:

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

注意:

  • python 的 for 和其他语言不同, 没有 "初始化语句", "循环条件判定语句", "循环变量更新语句", 而是更加简单
  • 所谓的 "可迭代对象", 指的是 "内部包含多个元素, 能一个一个把元素取出来的特殊变量"

代码示例: 打印 1-10

# 打印 1-10
for num in range(1,11):
    print(num)
  • 使用 range 函数, 能够生成一个可迭代对象. 生成的范围是 [1, 11), 也就是 [1, 10]

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

# 打印 2, 4, 6, 8, 10
for num in range(2,12,2):
    print(num)
  • 通过 range 的第三个参数, 可以指定迭代时候的 "步长". 也就是一次让循环变量加几.

代码示例: 打印 10-1

# 打印 10-1
for num in range(10,0,-1):
    print(num)
  • range 的 步长 也可以设定成负数,-1表示让循环变量减1.

代码示例: 求 1 - 100 的和

# 求 1 - 100 的和
sum = 0
for num in range(1,101):
    sum += num
print(f'sum = {sum}')

3.3、continue

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

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

for i in range(1,6):
    if i ==3: # i 等于3进入下一次循环
        continue
    print(f'吃完第{i}个包子')

3.4、break

break 表示结束整个循环

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

for i in range(1,6):
    if i == 3: # 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(f'平均值 = {sum / count}')

四、综合案例

实现 "人生重开模拟器":

这是一款之前很火的文字类小游戏. 玩家输入角色的初始属性之后, 就可以开启不同的人生经历.大家可以在网上搜索 "人生重开模拟器", 就可以玩到这个游戏的各种版本.完整的程序代码较多, 此处我们只实现其中的一部分逻辑.

4.1、设置初始属性

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

  • 颜值 (face)
  • 体质 (strong)
  • 智力 (iq)
  • 家境 (home)

我们约定每个属性的范围为 [1, 10], 并且总和不能超过 20.如果玩家输入的初始属性不合理, 就提示输入有误, 重新输入.

代码呈现:

print('+------------------------------------------------+')
print('|                                                |')
print('|         花有重开日, 人无再少年                     |')
print('|                                                |')
print('|         欢迎来到, 人生重开模拟器                   |')
print('|                                                |')
print('+------------------------------------------------+')

# 设置初始属性
# 颜值, 体质, 智力, 家境, 总和不能超过 20, 每一项取值都是 1-10 之间

# 使用循环, 使玩家在输入错误的时候, 可以重新输入.
while True:
    print("请设置初始属性(可用点数总数为 20)")
    face = int(input("请输入颜值(1-10):"))
    strong = int(input("请输入体质(1-10):"))
    iq = int(input("请输入智力(1-10):"))
    home = int(input("请输入家境(1-10):"))

    # 通过条件语句, 对于用户输入的属性值做出校验检查
    # 这段逻辑, 使用 elif 是否可以呢? 完全可以. 效果是相同的.
    # 使用 elif 则是多个分支只能进一个, 一旦某个条件满足了, 就不会再走其他的分支了.
    # 此处虽然没有使用 elif , 但是有了 continue, 一旦某个条件满足, continue 就会使循环从头再来, 也就没机会
    # 继续执行后续的条件判定了.
    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("初始属性输入完毕!")
    print(f"颜值: {face}, 体质: {strong}, 智力: {iq}, 家境: {home}")
    break

4.2、设置性别

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

  • 如果是单数, 则性别设为男孩
  • 如果是双数, 则性别设为女孩.
  • 男孩和女孩会遇到不同的事件.

代码呈现:

# 生成角色的性别
# 使用 random.randint(beg, end), 就能生成 [beg, end] 随机整数
point = random.randint(1, 6)
# print(f'point = {point}')
if point % 2 == 1:
    gender = 'boy'
    print('你是个男孩')
else:
    gender = 'girl'
    print('你是个女孩')

4.3、设置出生点

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

  • 10 是第一档. 加成最高
  • [7, 9] 是第二档. 也有一些加成
  • [4, 6] 是第三档. 加成较少
  • [1, 3] 是第四档. 会扣掉属性.

再扔一次色子, 生成 [1, 3] 的随机数, 用来表示每一种细分情况.这里的代码主要就是各种 if else 构成.

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

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

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

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

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

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

  • 使用 for 循环, 按照年龄循环起来.
  • 针对每一年, 先掷一次 [1, 3] 的色子, 根据不同的随机数值, 来触发不同的事件.
  • 根据性别, 年龄, 各种属性, 来触发不同的事件. 这里都使用 if - else 的方式来组织.
  • 不同的事件可能会对属性有正面/负面的影响.
  • 在每一年的最后, 打印这一年遇到的事情.
  • 如果夭折, 则直接 sys.exit(0) 退出程序.
  • 使用 time.sleep(1) 使程序暂停执行 1s, 方便观察程序结果.

4.4、代码呈现

# 人生重开模拟器~
import random
import sys
import time

print('+------------------------------------------------+')
print('|                                                |')
print('|         花有重开日, 人无再少年                     |')
print('|                                                |')
print('|         欢迎来到, 人生重开模拟器                   |')
print('|                                                |')
print('+------------------------------------------------+')

# 设置初始属性
# 颜值, 体质, 智力, 家境, 总和不能超过 20, 每一项取值都是 1-10 之间

# 使用循环, 使玩家在输入错误的时候, 可以重新输入.
while True:
    print("请设置初始属性(可用点数总数为 20)")
    face = int(input("请输入颜值(1-10):"))
    strong = int(input("请输入体质(1-10):"))
    iq = int(input("请输入智力(1-10):"))
    home = int(input("请输入家境(1-10):"))

    # 通过条件语句, 对于用户输入的属性值做出校验检查
    # 这段逻辑, 使用 elif 是否可以呢? 完全可以. 效果是相同的.
    # 使用 elif 则是多个分支只能进一个, 一旦某个条件满足了, 就不会再走其他的分支了.
    # 此处虽然没有使用 elif , 但是有了 continue, 一旦某个条件满足, continue 就会使循环从头再来, 也就没机会
    # 继续执行后续的条件判定了.
    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("初始属性输入完毕!")
    print(f"颜值: {face}, 体质: {strong}, 智力: {iq}, 家境: {home}")
    break

# 生成角色的性别
# 使用 random.randint(beg, end), 就能生成 [beg, end] 随机整数
point = random.randint(1, 6)
# print(f'point = {point}')
if point % 2 == 1:
    gender = 'boy'
    print('你是个男孩')
else:
    gender = 'girl'
    print('你是个女孩')

# 设定角色的出生点
# 为了简单, 就直接生成 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('你出生在三线城市, 你的父母是医生')
        strong += 1
    elif point == 2:
        print('你出生在镇上, 你的父母是老师')
        iq += 1
    else:
        print('你出生在镇上, 你的父母是个体户')
        home += 1
else:
    # 第四档
    if point == 1:
        print('你出生在农村, 父母是辛苦劳作的农民')
        strong += 1
        face -= 2
    elif point == 2:
        print('你出生在穷乡僻壤, 你的父母是无业游民')
        home -= 1
    else:
        print('你出生在镇上, 你的父母感情不和')
        strong -= 1
print(f'颜值: {face}, 体质: {strong}, 智力: {iq}, 家境: {home}')

# 幼年阶段
for age in range(1, 11):
    # 把一整年的打印都整理到一个字符串中, 在这一年的结尾统一打印
    info = f'你今年 {age} 岁. '
    # 生成一个 [1, 3] 的随机整数.
    point = random.randint(1, 3)
    # 接下来编写各种事件的代码
    # 性别触发的事件
    if gender == 'girl' and home <= 3 and point == 1:
        info += '你的家里人重男轻女思想非常严重, 你被遗弃了!'
        print(info)
        print('游戏结束!')
        sys.exit(0)
    # 体质触发的事件
    # 使用 elif 是为了保证每年只触发一个事件!
    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 += '你和别的小朋友经常打架!'
                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:
            # 家境 < 4
            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 += '你看起来更好看了.'
            face += 1
        else:
            # 无事发生
            pass

    # 打印这一年发生的事情
    print(info)
    print(f'颜值: {face}, 体质: {strong}, 智力: {iq}, 家境: {home}')
    print('------------------------------------------------------')
    # 为了方便观察, 加一个小小的暂停操作
    time.sleep(1)

五、结束语

今天内容就到这里啦,时间过得很快,大家沉下心来好好学习,会有一定的收获的,大家多多坚持,嘻嘻,成功路上注定孤独,因为坚持的人不多。那请大家举起自己的小手给博主一键三连,有你们的支持是我最大的动力💞💞💞,回见。

评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值