python第二天?? (今天系统崩了,难受~)
Day03 - 分支结构?
分支结构的应用场景: !!注意:#行代表注释
迄今为止,我们写的Python代码都是一条一条语句顺序执行,这种结构的代码我们称之为顺序结构。然而仅有顺序结构并不能解决所有的问题,比如我们设计一个游戏,游戏第一关的通关条件是玩家获得1000分,那么在完成本局游戏后我们要根据玩家得到分数来决定究竟是进入第二关还是告诉玩家“Game Over”,这里就会产生两个分支,而且这两个分支只有一个会被执行,这就是程序中分支结构。类似的场景还有很多,给大家一分钟的时间,你应该可以想到至少5个以上这样的例子,赶紧试一试。
if语句的使用:
在Python中,要构造分支结构可以使用if、elif和else关键字。所谓关键字就是有特殊含义的单词,像if和else就是专门用于构造分支结构的关键字,很显然你不能够使用它作为变量名(事实上,用作其他的标识符也是不可以)。下面的例子中演示了如何构造一个分支结构。
———————————————————————————————————————————————
例题:用户身份验证 注意:(python中#代表注释)
执行如下代码:
username = input('请输入用户名: ')
password = input('请输入口令: ')
#如果希望输入口令时 终端中没有回显 可以使用getpass模块的getpass函数
#import getpass
#password = getpass.getpass('请输入口令: ')
#【conditions 】
if username == ‘admin’ and password == ‘123456’:
print('身份验证成功!')
#Other…
else:
print(‘身份验证失败!’)
———————————————————————————————————————————————唯一需要说明的是和C/C++、Java等语言不同,Python中没有用花括号来构造代码块而是使用了缩进的方式来设置代码的层次结构,如果if条件成立的情况下需要执行多条语句,只要保持多条语句具有相同的缩进就可以了,换句话说连续的代码如果又保持了相同的缩进那么它们属于同一个代码块,相当于是一个执行的整体。
当然如果要构造出更多的分支,可以使用if…elif…else…结构,例如下面的分段函数求值。
例题:分段函数求值 = 3x - 5 (x > 1)
f(x) = x + 2 (-1 <= x <= 1)
= 5x + 3 (x < -1)
执行如下代码 :
x = float(input('x = '))
if x > 1:
y = 3 * x - 5
elif x >= -1:
y = x + 2
else:
y = 5 * x + 3
print(‘f(%.2f) = %.2f’ % (x, y))
———————————————————————————————————————————————
当然根据实际开发的需要,分支结构是可以嵌套的,例如判断是否通关以后还要根据你获得的宝物或者道具的数量对你的表现给出等级(比如点亮两颗或三颗星星),那么我们就需要在if的内部构造出一个新的分支结构,同理elif和else中也可以再构造新的分支,我们称之为嵌套的分支结构,也就是说上面的代码也可以写成下面的样子。
“”"
例题:分段函数求值 3x - 5 (x > 1)
f(x) = x + 2 (-1 <= x <= 1)
5x + 3 (x < -1)
执行代码如下:
x = float(input('x = '))
if x > 1:
y = 3 * x - 5
else:
if x >= -1:
y = x + 2
else:
y = 5 * x + 3
print(‘f(%.2f) = %.2f’ % (x, y))
说明:大家可以自己感受一下这两种写法到底是哪一种更好。在之前我们提到的Python之禅中有这么一句话“Flat is better than nested.”,之所以提出这个观点是因为嵌套结构的嵌套层次多了之后会严重的影响代码的可读性,如果可以使用扁平化的结构就不要去用嵌套,因此之前的写法是更好的做法。
———————————————————————————————————————————————
回顾一下昨天的作业题:(题做得简单粗糙,望大家不要见怪?)
第一题: f = float(input('请输入华氏温度: '))
c = (f - 32) / 1.8
print('%.1f华氏度 = %.1f摄氏度' % (f, c))
第二题:
pi = 3.14
radius = float(input('请输入圆的半径:'))
length = float(input('请输入圆的高:'))
area = radius * radius * pi
volume = area * length
print('底面积: %.2f' % area)
print('体积: %.2f' % volume)
第三题: rum = float(input(‘请输入您需要的英尺谢谢:’))
mi = rum / 0.305
print('英尺所变换的米数: %.3f' % mi)
第四题:
mg = int(input(‘请输入加入水的重量谢谢:’))
i = int(input('请输马上入水的初始温度:'))
f = int(input('请立即输入水的最终温度:'))
Q = mg * (f-i) * 4184
print('这个过程所产生的热量到底是多少呢: %.f' %Q)
第五题: nl = 2.700
ce = float(input('请输入差额:'))
lx = ce * (nl / 1200)
print('下月要付的利息为: %.3f' % lx)
第六题:
v0 = int(input(‘请输入它的初始速度:’))
v1 = int(input('请输入它的莫末速度:'))
t = int(input('请输入时间:'))
a = (v1-v0)/t
print('请写出它的加速度: %.f' % a)
第七题: yue = 0.00417
yi = 100 * (1 + yue)
er = (100 + yi) * (1 + yue)
san = (100 + er) * (1 + yue)
si = (100 + san) * (1 + yue)
wu = (100 + si) * (1 + yue)
liu = (100 + wu) * (1 + yue)
print('第六个月的账户总金额为: %.f' % liu)
第八题:
i = int(input(‘请输入一个数:’))
if i<1000:
ge = int(i%10)
shi = int(i/10%10)
bai = int(i/100)
print(ge+shi+bai)
else:
print('您的输入有错')
———————————————————————————————————————————————
今天的练习题:
练习1:英制单位与公制单位互换(执行代码如下):
value = float(input(‘请输入长度: ‘))
unit = input(‘请输入单位: ‘)
if unit == ‘in’ or unit == ‘英寸’:
print(’%f英寸 = %f厘米’ % (value, value * 2.54))
elif unit == ‘cm’ or unit == ‘厘米’:
print(’%f厘米 = %f英寸’ % (value, value / 2.54))
else:
print(‘请输入有效的单位’)
练习2:掷骰子决定做什么
from random import randint
face = randint(1, 6)
if face == 1:
result = ‘唱首歌’
elif face == 2:
result = ‘跳个舞’
elif face == 3:
result = ‘学狗叫’
elif face == 4:
result = ‘做俯卧撑’
elif face == 5:
result = ‘念绕口令’
else:
result = ‘讲冷笑话’
print(result)
说明:上面的代码中使用了random模块的randint函数生成指定范围的随机数来模拟掷骰子。
练习3:百分制成绩转等级制
#90分以上 --> A
#80分~89分 --> B
#70分~79分 --> C
#60分~69分 --> D
#60分以下 --> E
执行代码如下:
score = float(input('请输入成绩: '))
if score >= 90:
grade = ‘A’
elif score >= 80:
grade = ‘B’
elif score >= 70:
grade = ‘C’
elif score >= 60:
grade = ‘D’
else:
grade = ‘E’
print(‘对应的等级是:’, grade)
练习4:输入三条边长如果能构成三角形就计算周长和面积
import math
a = float(input('a = '))
b = float(input('b = '))
c = float(input('c = '))
if a + b > c and a + c > b and b + c > a:
print(‘周长: %f’ % (a + b + c))
p = (a + b + c) / 2
area = math.sqrt(p * (p - a) * (p - b) * (p - c))
print(‘面积: %f’ % (area))
else:
print(‘不能构成三角形’)
练习5:个人所得税计算器。
salary = float(input('本月收入: '))
insurance = float(input('五险一金: '))
diff = salary - insurance - 3500
if diff <= 0:
rate = 0
deduction = 0
elif diff < 1500:
rate = 0.03
deduction = 0
elif diff < 4500:
rate = 0.1
deduction = 105
elif diff < 9000:
rate = 0.2
deduction = 555
elif diff < 35000:
rate = 0.25
deduction = 1005
elif diff < 55000:
rate = 0.3
deduction = 2755
elif diff < 80000:
rate = 0.35
deduction = 5505
else:
rate = 0.45
deduction = 13505
tax = abs(diff * rate - deduction)
print(‘个人所得税: ¥%.2f元’ % tax)
print(‘实际到手收入: ¥%.2f元’ % (diff + 3500 - tax))
说明:上面的代码中使用了Python内置的abs()函数取绝对值来处理-0的问题。
练习6:石头剪刀布
import random
#import numpy as np
#res = np.random.choice([‘石头’,‘✂️’,‘??♀️’])
#print(res)
import os
#pywin32
C_res = random.randint(0,2)
U_res = int(input(‘0:石头,1:剪刀,2:布’))
if C_res == U_res:
print(‘平局’)
else:
if C_res == 0 and U_res == 1:
print(‘电脑赢了 ?’)
#os.system(‘say you loser.’)
elif C_res == 1 and U_res == 2:
print(‘电脑赢了 ?’)
# os.system(‘say you loser.’)
elif C_res == 2 and U_res == 0:
print(‘电脑赢了 ?’)
# os.system(‘say you loser.’)
else:
print(‘你赢了 ?’)
# os.system(‘say you winer.’)
练习7:猜数字
#import random
#random.randint(0,5)
#猜数字:第一关总共10轮,每一个100分.
#由电脑随机产生两个数字,让用户输入这两个数字的和.
#最后看是进入第二关还是’Game Over’.
import random
count = 0
for i in range(10):
num1 = random.randint(0,5)
num2 = random.randint(0,5)
num = int(input(’>>’))
if num1 + num2 == num:
print(‘恭喜获得100分’)
count += 100
else:
print(‘嗷,答错了’)
if count == 1000:
print(‘开始第二关’)
else:
print(‘Game Over.’)
———————————————————————————————————————————————