> 作者:დ旧言~
> 座右铭:松树千年终是朽,槿花一日自为荣。> 目标:了解Python基础语法,如常量和表达式、变量和类型、注释、输入输出、运算符。
> 毒鸡汤:有些事情,总是不明白,所以我不会坚持。早安!
> 专栏选自:Python基础知识_დ旧言~的博客-CSDN博客
> 望小伙伴们点赞👍收藏✨加关注哟💕💕
一、顺序语句
默认情况下, Python 的代码执行顺序是按照从上到下的顺序, 依次执行的:
行结果一定为 "123", 而不会出现 "321" 或者 "132" 等. 这种按照顺序执行的代码, 我们称为 顺序语句.:
- 这个顺序是很关键的. 编程是一件明确无歧义的事情. 安排好任务的顺序, 计算机才能够正确的进行执行.
- 就好像人生的顺序, 是上学, 工作, 结婚, 生子. 一旦这里的顺序乱了, 就很麻烦.
二、条件语句
2.1、什么是条件语句
条件语句能够表达 "如果 ... 否则 ..." 这样的语义. 这构成了计算机中基础的 逻辑判定.条件语句 也叫做 分支语句, 表示了接下来的逻辑可能有几种走向.
一个典型的例子:
- 如果丘处机没有路过牛家村,
- 那么金兵不会死在郭, 杨两家手上
- 郭, 杨两家就不会流亡北方
- 郭夫人就不会去到大漠, 完颜洪烈就不会遇到包惜弱
- 郭靖就不会和江南七怪救了铁木真
- 蒙古就不会统一
- 蒙古铁骑就不会西征
- 欧洲就不会出现火药, 也就不会出现文艺复兴, 大航海.
- 大炮就不会从欧洲传到日本, 日本得不到统一
- 完颜洪烈就不会全力战, 金国内乱
- 宋朝不会灭亡, 并诞生出资本主义. 中国成为最发达的国家.
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)
五、结束语
今天内容就到这里啦,时间过得很快,大家沉下心来好好学习,会有一定的收获的,大家多多坚持,嘻嘻,成功路上注定孤独,因为坚持的人不多。那请大家举起自己的小手给博主一键三连,有你们的支持是我最大的动力💞💞💞,回见。