以下是搜索内容: 关闭

  • 首页
  • 日志
  • 友情链接
  • 关于我

KoiNL.

愿世间美好 温柔以待

“锦鲤握运,未离我韵”

“愿好运常在”

18 分类
0 标签
16 归档
  • 小站首页
  • 个人日志
  • 友情链接
  • 关于自己
  • 我的工具
站点信息

文章数目: 84 篇

最近动态: 2天前

上线时间: 531天

当前版本: v3.0.0

第一章 程序基本结构

分类: Python
标签:

创建日期:2022-02-06 20:14:44

程序的基本结构是分为顺序结构, 分支结构与循环结构这三种的.
关于分支结构, 为 if…elif…else 的程序解释和三目运算符.
关于循环结构, 会阐遍历循环 for 和无限循环 while 这两者.
不过在此之前, 用少量的篇幅简要地介绍下数据的类型等.

1. 数据类型

数据类型分为数字类型, 字符类型与组合类型.

  • 数字类型
    数字类型有两种, 为整数与小数, 在 Python 中称为整数与浮点数
    数字类型的操作: +-*/ 依次为加减乘除, 另有三个需要注意下: // 获取整数商, % 获取余数, ** 次幂
    另有一些内置函数: abs() 求绝对值, round() 四舍五入, pow() 与 ** 等同.

  • 字符串类型
    字符串是用引号括起来的有限序列. 中文和英文都算作一个字符, 这是 Python 不同于其他语言的地方.
    字符串的操作可分为公共操作与独有操作, 其中公共操作可参阅第三章的序列类型, 独有操作如下:
    lower() 与 upper() 函数分别表示所有字符小写与大写. replace() 函数可替换字符或字符串.

  • 字符串类型的格式化
    print(‘{1:8>5},{0:,.2f}’.format(1232,’zhk’)) # {x:n}中,x 为序号,n的顺序依次为填充字符对齐方式最大长度千分号精度类型这六个
    print(‘{:'^30x}’.format(123456) # 单引号为特殊字符,需要进行转义,十六进制类型为 x

1. 分支结构

if…elif…else 语法结构如下: , 有关于三目运算符, 可参阅 “异常处理语法代码” .

例 1: 身体质量指数 BMI:
BMI, 顾名思义, 是求身体质量指数.
具体指标如下:

分类 国际值 (kg/m²) 国内值 (kg/m²)
偏瘦 <= 18.5 <= 18.5
正常 18.5 ~ 25.0 18.5 ~ 24.0
偏胖 25.0 ~ 30.0 24.0 ~ 28.0
肥胖 >= 30.0 >= 28.0
BMI 的计算方式如下: BMI = weight (kg) / height² (m²)
点击显/隐代码
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
weight, height = eval(input("请输入体重和身高 (逗号隔开) : "))
BMI = weight / pow(height, 2)
if BMI < 18.5:
print("国际: 偏瘦, ", end="")
elif 18.5 < BMI < 25.0:
print("国际: 正常, ", end="")
elif 25.0 < BMI < 30.0:
print("国际: 偏胖, ", end="")
else:
print("国际: 肥胖, ", end="")
if BMI < 18.5:
print("国内: 偏瘦")
elif 18.5 < BMI < 24.0:
print("国内: 正常")
elif 24.0 < BMI < 26.0:
print("国内: 偏胖")
else:
print("国内: 肥胖")

2. 循环结构

1) 遍历循环 for

for i in range(5) : 遍历5次
可使用 range(N) 函数来遍历 N 次, 或遍历序列类型的每一个字符,以及文件的每一行
在 for…else… 中, else 可在循环正常结束后执行

例 2: 重量计算. 月球上物体是地球的16.5% 倍, 现有一人体重为 50kg, 该人在地球上每年增长 0.5kg, 求改人十年后在地球与月球上的体重.

点击显/隐重量计算 & 遍历 N 次的代码
1
2
3
4
weight = 50    # 体重 50kg
for i in range(10): # 过十年, 每年加 0.5kg, 那就循环十次
weight += 0.5 # 每次在原有基础上加 0.5
print(weight, weight * 0.165) # 打印体重, 与月球上的体重

例 3: 统计出现次数. 输入一串字符, 分别统计大小写, 数字空格和其他字符的个数.

点击显/隐遍历序列类型的每一个字符
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
# 统计不同字符个数, 输入一串字符, 分别统计大小写, 数字空格和其他字符的个数
DaXie = XiaoXie = ShuZi = KongGe = QiTa = 0
for i in input("请输入一行字符:"): # 遍历序列类型之字符串的每一个字符
if ord('A') <= ord(i) <= ord('Z'): # ord() 可将字符转为 ASCⅡ码
DaXie += 1
elif ord('a') <= ord(i) <= ord('z'):
XiaoXie += 1
elif ord('0') <= ord(i) <= ord('9'):
ShuZi += 1
elif ord(i) == ord(' '):
KongGe += 1
else:
QiTa += 1
print(f"这一行字符中大写字母的数量是:{DaXie}, 小写字母的数量是:{XiaoXie}, " \
f"数字的数量是:{ShuZi}, 空格数量是:{KongGe},其他字符的数量是:{QiTa}。") # 转行符

2) 条件循环 while

用于无法确定循环次数的情况, 也可以与 else 连用, 同样为当循环正常结束时执行.

例 4: 最大公约数与最小公倍数的计算. 要求: 两个整数.

点击显/隐最大公约数与最小公倍数的代码
1
2
3
4
5
6
7
8
max, min = 36, 30
m_f, n_f = max, min
while min != 0: # 当除数不为 0
temp = max % min
max = min # 将除数赋给 被除数
min = temp # 所得余数赋给除数
print(max) # 最终除数就是最大公约数, 不过除数已经赋给了被除数
print(m_f * n_f / max) #原两数乘积除以最终除数就是最小公倍数

3. 异常处理

通常, 异常处理只用在用户输入的合规性以及文件打开是否成功.
异常处理的相关语法如下:

点击显/隐异常处理语法
1
2
3
4
5
6
7
8
try:    # 请输入数 10, 0, & 来甄别区别
print("对") if 5 > eval(input("数: ")) else print("错") # 三目运算
except:
print("有错误触发")
else:
print("无错误触发")
finally:
print("都会触发")

4. random 库

主要用于生成各式各样的随机数.

点击显/隐各式各样的随机数
1
2
3
4
5
from random import *
print(random()) # 随机小数功能, 区间 [0.0, 1.0)
print(uniform(1, 3)) # 随机小数功能, 区间 [1, 3]
print(randint(1, 3)) # 随机整数功能, 区间 [1, 3]
print(randrange(1, 10, 3)) # 随机整数功能 (带步长), 区间 {1, 4, 7}

5. 综合案例

  1. 田字格输出. 如图所示.
    • — — — — + — — — — +
      |         |           |
      |         |           |
      |         |           |
      |         |           |
    • — — — — + — — — — +
      |         |           |
      |         |           |
      |         |           |
      |         |           |
    • — — — — + — — — — +
点击显/隐田字格输出的代码
1
2
3
4
5
6
7
8
jia, heng, shu, kong = ' + ', ' — ', ' | ', '   '    # 田字格用四种元素组成, 现展现
jia_and_heng4, shu_and_kong4 = jia + heng * 4, shu + kong * 4 # 将极其相似的归纳
for i in range(5): # 绕 5 次, 分别是第一行一次, 第六行一次, 第十一行一次, 中间那俩俩次
if i == 0 or i == 2 or i == 4: # 第一次, 第三次, 第五次输出同样的 "+----+----+" .
print(f"{jia_and_heng4}{jia_and_heng4}{jia}")
else: # 第 2, 4 次输出同样的 转 4 圈的 "| | |" .
for i in range(4):
print(f"{shu_and_kong4}{shu_and_kong4}{shu}")
  1. 下面以猜数游戏三个版本来依次展现 “分支, 条件循环结构的基础版本” , “加上随机数的版本” 以及 “加上异常处理结构” 的代码.
    a. 猜数游戏 1.0 : 在程序中预设一个数 5, 用户通过键盘输值开始猜数 (限制猜数范围为 0 ~ 10 ) , 若猜大显示 “猜得过大了” , 反之, 显示 “猜的过小了” , 直至猜中, 显示 “恭喜第 N 次猜中了” , 其中 N 是用户所猜次数.
点击显/隐猜数游戏 1.0
1
2
3
4
5
6
7
8
9
10
yushe, count = 5, 0    # 预设数字为 5, count 计数器
while True: # 无限循环
u, count = eval(input()), count + 1 # u 为用户输入数字, 计数器 +1
if 0 <= u < yushe: # 进行判断, 如果小于预设数字
print("小")
elif 10 >= u > yushe: # 反之则反
print("大")
else: # 直到才对, 应该打印完成后直接跳出循环
print(f"√, 次数: {count}")
break

b. 猜数游戏 2.0 : 在猜数游戏 1.0 的基础上, 将键盘预设数字改为随机数

点击显/隐猜数游戏 2.0
1
2
3
4
5
6
7
8
9
10
11
from random import *
yushe, count = randint(0, 10), 0 # 随机整数 0 ~ 10
while True: # 无限循环
u, count = eval(input()), count + 1 # u 为用户输入数字, 计数器 +1
if 0 <= u < yushe: # 进行判断, 如果小于预设数字
print("小")
elif 10 >= u > yushe: # 反之则反
print("大")
else: # 直到才对, 应该打印完成后直接跳出循环
print(f"√, 次数: {count}")
break

c. 猜数游戏 3.0 : 在猜数游戏 2.0 的基础上, 若用户输入非法字符或超出 范围的数字时, 提示: “请输入整数! (0 ~ 10) “ , 并让用户重新输入.

点击显/隐猜数游戏 3.0
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
from random import *
yushe, count = randint(0, 10), 0 # 随机整数 0 ~ 10
while True: # 若输入非法字符, 会报错, 若输入超出范围的整数, 不会报错
try:
u, count = eval(input()), count + 1 # u 为用户输入数字, 计数器 +1
if 0 <= u < yushe: # 进行判断, 如果小于预设数字
print("小")
elif 10 >= u > yushe: # 反之则反
print("大")
elif u == yushe: # 直到猜对, 打印结果
print(f"√, 次数: {count}")
else:
count -= 1
print("超范围的整数, 此次不计数! ") # 为何这次不计数要加 count , 是因为在 try 体里面
except:
print("输入了非法字符, 此次不计数!") # try...expect 用于与用户的交互
  1. 回文数判断. 回文数是指正着读与反着读都一样的数字, 如 12321, 38583 等. 请设定一程序, 使其能判断该 5 位数字是否为回文数.
点击显/隐回文数判断代码
1
2
3
4
5
6
7
8
9
10
a, count = input(), 0    # 输入 5 位数用 a 去接收, count 计数器
for i in range(len(a)): # 循环 5 次,
if a[i] == a[len(a) - 1 - i]: # 第一次判断下标为 0 和 4, 第二次 13, 第三次 22, 第四次 31, 第五次 40
count += 1 # 如果相同, 计数 +1
else: # 否则中断本次循环, 开始下一次循环
continue
if count == len(a): # 如果计数器的数等同与 a 的长度说明是回文数
print("True")
else: # 如果不相同说明中途有中断
print("False")
  1. 羊车门问题. 羊车门问题描述: 有3扇关闭的门, 一扇门后停着汽车, 另外两扇门后是山羊, 主持人知道每扇门后是什么. 参赛者首先选择一扇门, 在开启它之前, 主持人会从另外两扇门中打开一扇门, 露出门后的山羊. 此时, 允许参赛者更换自己的选择. 请问, 参赛者更换选择后, 能否增加猜中汽车的机会?
点击显/隐羊车门问题代码
1
2
3
4
5
6
7
8
9
10
from random import *
old_choose, new_choose = 0, 0
for i in range(10000): # 测试 10000 次
car = randint(0, 2) # 车随机三扇门里面
choose = randint(0, 2) # 选择随机一扇门
if choose == car: # 不更改选择得到车
old_choose += 1 # 坚持选择计数器 +1
if choose != car: # 反之则反
new_choose += 1
print(old_choose / 10000 * 100, '%', new_choose / 10000 * 100, '%') # 33.83 % 66.17 %
浏览量

评论区

欢迎你留下宝贵的意见,昵称输入QQ号会显示QQ头像哦~

目录

  1. 1. 1. 数据类型
  2. 2. 1. 分支结构
  3. 3. 2. 循环结构
    1. 3.1. 1) 遍历循环 for
    2. 3.2. 2) 条件循环 while
  4. 4. 3. 异常处理
  5. 5. 4. random 库
  6. 6. 5. 综合案例

上一篇: 第五章 文件操作

下一篇 第四章 类与对象

公告栏

《 

 》

Hello~近期剽窃本站内容频发,本站唯一指定网站:https://koinl.github.io。请认准。点击点击此处选择进入。
回到顶部
查看评论

Power By Hexo.

Theme:koinl.

信息来源于锦鲤未离