1.python分支结构——if语句
概念:程序的流程走向比较像一颗分散的树
1.单分支判断
- 结构:if条件......: ,条件满足时执行
age = 17
if age >= 16 :
print("你已经成年")
print("恭喜")
print("HELLO WORLD") #不属于if语句
- 注意:1. if条件后面的冒号不要忘记
2. print函数前面需要加一个TAB缩进,这是python与其他语言的不同,其它语言中,
一般使用{ }来确定整个代码块,而python是使用TAB缩进确定代码块
3. if语句可以连续多次使用,可以认为是并列
2.双分支判断
- 结构:if条件......:条件满足时执行语句
else:条件不满足时,执行语句
age = input("请输入你的年龄:")
age = float(age)
if age > 18 :
print("你已经成年")
if age == 18
print("恭喜你成年")
else:
print("你还未成年")
- 问题:上述代码也存在一些问题,例如,如果第一行已经判定age >18,那么按理来说就无需
再进行后面代码的执行(节省时间),但是在上述代码中,需要每行依次判断,不合理
3.if嵌套
结构:
- if条件......:条件满足时执行语句(在这个位置可以再次编写一个if语句)
else:条件不满足时,执行语句(这个位置也是同理)
- 对上面程序的改进(加一个嵌套):
if age > 18 :
print("你已经成年")
else:
if age == 18 :
print("恭喜你成年")
else:
print("你还未成年")
-
问题:如果嵌套过多,可能会在后续或他人阅读时不易理解
4.多支判断
结构: if条件......:条件满足时执行语句
elif(不能直接写elseif)条件......: 条件满足时执行语句
else:条件不满足时,执行语句
这个结构也不会全部都执行,找到满足条件的语句后就会停止
if age > 18 :
print("你已经成年")
elif age == 18 :
print("恭喜你成年")
else:
print("你还未成年")
5.注意事项
1.区分代码块:TAB缩进(shift + TAB:取消缩进)
2.不要写嵌套层级太深的代码,后期难以理解
3.不要忘记每个条件后面的 冒号(:)
6.案例优化
在这里我们要优化上一章的体脂率计算问题,问题描述如下:
- 案例描述:采集一个人的身高, 体重, 年龄和性别; 告诉Ta, 自己的体脂率是否在正常范围之内
1.输入部分优化
首先我们要限定各项输入的数据都在正常范围内,例如:0<身高<3,0<体重<300,0<年龄 <150,性别为0或1
# 数据有效性的验证,容错处理
if 0 < height < 3 and 0 < weight < 300 and 0 < age < 150 and (sex == 1 or sex == 0):
2.数据处理部分优化
在数据处理部分,我们要做到根据数据区分出男或女,然后针对男女的判定标准, 分别进行计算
# 区分男女
if sex == 1 :
result = 0.15 < TZL < 0.18
else :
result = 0.25 < TZL < 0.28
3.输出结果的优化
在输出结果部分,我们要做到根据不同性别及不同健康程度,做出不同的回答
4.案例具体代码
# 身高
height = input("请输入身高(m):")
height = float(height)
# 体重
weight = input("请输入体重(kg):")
weight = float(weight)
# 年龄
age = input("请输入年龄:")
age = float(age)
# 性别
sex = input("请输入身高(男:1 女:0):")
sex = float(sex)
# 数据有效性的验证,容错处理
if not( 0 < height < 3 and 0 < weight < 300 and 0 < age < 150 and (sex == 1 or sex == 0)):
# 退出程序
print("数据不满足需求,退出程序")
exit()
# 处理数据
# 计算体脂率
# BMI = 体重(kg) / (身高 * 身高)(米)
# 体脂率 = 1.2 * BMI + 0.23 * 年龄 - 5.4 - 10.8*性别
BMI = weight / (height * height)
TZL = (1.2 * BMI + 0.23 * age - 5.4 - 10.8 * sex) * 0.01
# 区分男女
if sex == 1 :
result = 0.15 < TZL < 0.18
else :
result = 0.25 < TZL < 0.28
# 输出
# 性别部分
if sex == 1 :
wenhao = "先生你好:"
min = 0.15
max = 0.18
else :
wenhao = "女士你好:"
min = 0.25
max = 0.28
# 健康程度部分
if min < TZL < max :
notice = "恭喜您,您的身体非常健康,请继续保持!"
else :
if TZL > max :
notice = "请注意,您的体脂率偏高,请加强体育锻炼!"
else :
notice = "请注意,您的体脂率偏低,请提高自身重视!"
print(wenhao,notice)
2.python循环结构
1.循环三要素:
1)循环变量的初始化
2)循环的条件(以循环变量为基础)
3)循环变量的改变(向着循环的结束变)
循环变量:在整个循环过程中所反复改变的那个数
2.while循环
- 结构:while条件...... :
条件满足时执行的代码块
- 注意:一定要想好循环结束的条件,不要让程序陷入死循环
- 练习:
(1)打印十遍 “ 你好 ”
(2)计算1-10的总和
# 打印十遍,你好
# 法一: print("你好\n" * 10)
# while循环
i = 1
while i <= 10 :
print("你好")
print(i)
i = i + 1
# 求1-10的总和
i = 1
sum = 0
while i <= 10 :
sum = sum + i
i = i + 1
print(sum)
- 补充:while - else循环(了解)
while条件......:
条件满足时执行的代码块
else:
条件不满足时执行的代码块
3.for循环
- 使用场景:遍历一个集合,当集合中元素遍历完毕,就会结束
- 结构:
for (元素) in (集合):
循环语句
集合有这几种:字符串,列表
# 遍历一个集合(字符串,列表)
# 字符串:取出字符串中的每一个字
notice = "你好,世界"
for i in notice:
print(i)
# 列表 (取出列表中每一个元素)
pets = ["小猫","小狗","小猪"]
for name in pets:
print(name)
- for - else :与while - else相似
- 练习:
(1)反转字符串
(2)打印1~100之间的偶数
# 反转字符串
notice = "你好,世界"
result = ""
for word in notice:
result = word + result
print(result)
# 打印1~100之间的偶数
# range函数 ——> 创建整数列表,左闭右开
number = range(1,101)
for num in number :
if num % 2 == 0:
print(num)
4.循环打断——break & continue
break:打断本次循环, 跳出整个循环
continue:结束本次循环, 继续执行下次循环
for i in range(1,11):
if i == 6:
break
print(i)
# 输出结果为1,2,3,4,5
for i in range(1,11):
if i == 6:
continue
print(i)
# 输出结果为1,2,3,4,5,7,8,9,10
- 案例
题目:做一个简单的加法计算器, 让用户输入两个数值, 输出对应的和
要求:(1)用户如果不退出这个程序, 则输出完毕之后, 继续让用户使用
(2)如果用户输入一个标识: q, 识别成退出
(3)如果用户输入的数据超出范围(100), 则给出错误提示, 并从头开始, 让用户数据数值
要完成这个题目,我们可以先编写一个基础的代码,然后再根据要求做修改,基础如下
# step1 让用户输入两个数值
num1 = input("请输入第一个数值:")
num2 = input("请输入第二个数值:")
num1 = float(num1)
num2 = float(num2)
# step2 计算两个数值的和
result = num1 + num2
# step3 输出数值
print(f"{num1}+{num2}的结果为:{result}")
然后再根据要求做修改,代码如下:
while True: # 相当于完成了要求(1)可以一直循环
# step1 让用户输入两个数值
num1 = input("请输入第一个数值:")
num2 = input("请输入第二个数值:")
num1 = float(num1)
num2 = float(num2)
if num1 > 100 or num2 > 100: # 完成了要求(3)
print("您输入的数据有问题,请重新输入")
continue
# step2 计算两个数值的和
result = num1 + num2
# step3 输出数值
print(f"{num1}+{num2}的结果为:{result}")
isq = input("是否想要退出程序(q:退出程序 其他:不退出程序):") # 完成了要求(2)
if isq == "q":
print("程序已结束")
break
else :
print("程序已刷新")
5.循环内嵌套循环
外循环,循环一次;内循环,循环所有
- 案例:九九乘法表
# 99乘法表
# 问题化简:给定一个数值x,打印出从1~x之间的所有数字
for num in range(1,10):
nums = range(1,num+1)
for x in nums:
print(f"{x} * {num} = {x * num}",end="\t")
print("") # 实现换行功能
6.pass语句(补充)
pass语句是空语句,不做任何事情,只是为了保持程序结构的完整性而用作占位语句
age = 19
if age > 18:
pass
else:
pass
#在这里,pass先占位,让程序不会报错,等后续可以用其他代码代替
3.综合案例
1.水仙花数的判定
- 用户输入一个3位数值, 判定是否是水仙花数
- 要求:
(1)要求对三位数值验证:
只需要验证是不是三位数值就可以,暂时不考虑非数字的情况
(2)判定3位水仙花数的标准
百位的3次方 + 十位的3次方 + 个位的3次 = 数值本身
# 水仙花数的判定
# step1 三位数数值的输入与验证
while True: # 如果不是三位数,可以让程序一直执行
num = input("请输入一个三位数:")
num = float(num)
if 100 <= num <= 999:
# step2 判定是否为水仙花数
bai = num // 100
shi = num % 100 // 10
ge = num % 10
if bai**3 + shi**3 + ge**3 == num:
# step3 反馈给用户答案
print("该数值为水花仙数")
else:
print("该数值不是水花仙数")
else:
print("请重新输入,必须为三位数")
2.猜数字
- 给定一个数值, 让用户猜
- 要求
(1) 程序内给定一个数字, 比如500
(2) 然后, 让用户通过输入一个数值来猜,
如果数值相等, 则代表正确,程序结束
如果不相等, 则提示是大了还是小了,继续猜直到猜对为止,并且输出猜了多少次
# 猜数字
import random
# step1 数据准备
num = random.randint(1,500)
count = 0
while True:
# step2 数据处理
result = input("请输入一个数值:")
result = float(result)
count = count +1
if result == num:
print(f"恭喜你,答对了,总共猜了{count}次,你真是个聪明蛋子!")
exit() # 如果相等,程序直接退出
elif result < num:
print("你猜的数字小了,应该大一点")
else:
print("你猜的数字大了,应该小一点")