第1节 选择结构语句
1.1 比较运算符
运算结果是布尔类型
(1)等于运算符 ==
a == b,如果a和b相等,则返回True,否则返回False
== 实际上比的是两个变量所指向的数据对象,如果数据对象的内容是一致的话,则判定为相等
a = 3 # 从常量驻留来的
b = 3 # 从常量驻留来的
print(a == b) # True
print(a is b) # is 指的是两个数据对象是否是同一个对象 True
a = 300 # 新建的数据对象
b = 300 # 新建的数据对象
print(a == b)
print(a is b) # True ??? 为啥又是True 在脚本环境下 对内存进行了优化 a的300是新建的 b的300是复用的
"""
Python中对[-5,256]之间的整数做了常量驻留
>>> a = 300
>>> b = 300
>>> a is b
False
"""
(2)不等于运算符 !=
a != b,如果 a 和 b 数据对象的值不相等,则返回 True,否则 False
(3)大于运算符 >
a > b,左边如果大于右边,则返回 True,否则 False
(4)小于运算符 <
a < b,左边如果小于右边,则返回 True,否则 False
(5)大于等于运算符 >=
a >= b,左边如果大于等于右边,则返回 True,否则 False
(6)小于等于运算符 <=
a <= b,左边如果小于等于右边,则返回 True,否则 False
(7)序列对比与链式比较
s1 = "abc"
s2 = "abc"
print(s1 == s2)
print(s1 < s2)
print("abc" < "abd")
"""
a b c
= = <
a b d
"""
print("dfg" > "ahi")
"""
d f g
>
a h i
"""
print("abc" < "abcd")
"""
a b c
= = = ? 后者比前者长 前者小 后者大
a b c d
"""
print("abc" > "dgjhgdjfsg")
链式比较的话和连续赋值比较像,比较符合数学语言,主要用在做数值区间比较当中。
age = 10
print(1 < age < 18 )
age = 32
print(1 < age < 18 )
num1 = 6
num2 = 9
print(1 < num1 < 7 < num2 < 10)
1.2 逻辑运算符
运算结果是布尔类型
(1)逻辑与运算符 and
全真则真,有假则假
# 3 > 2 => True 还得计算 2 > 3 才能最终决定结果
print(3 > 2 and 2 > 3)
# 2 > 3 => False 无论后者结果为啥 最终结果False
# 3 > 2 这个条件可以不运算 短路性
print(2 > 3 and 3 > 2)
# 短路性 在与的过程中 前者一旦为 False 后面就可以不用运算了
短路性 在与的过程中 前者一旦为 False 后面就可以不用运算了
(2)逻辑或运算符 or
有真则真,全假则假
短路性 在或的过程中 前者一旦为 True 后面就可以不用运算了
(3)逻辑非运算符 not
单目运算符
取反,将 True变False,或者将 False 变 True
print(3 > 2)
print(not 3 > 2)
1.3 选择结构
在编程当中,语句结构主要有三种:
- 顺序结构:代码依次执行的过程,无论什么样的代码都是顺序结构的
- 选择结构:在顺序结构当中,存在分支判断的情况
- 循环结构:需要重复执行若干次的情况
(1)if 语句
Python当中没有Switch,只有 if 相关的语句
语法格式:
begin
if 条件:
# 当条件为True时,执行的代码块
statement
end
(2)if - else 语句
语法格式:
begin
if 条件:
# 当条件为True时,执行的代码块
statementA
else:
# 当条件为False时,执行的代码块
statementB
end
(3)if - elif - else 语句
语法格式:
begin
if 条件1:
# 条件1 True
statementA
elif 条件2:
# 条件2 True
statementB
...
else:
# 上述条件均为 False
statementC
end
(4)嵌套选择语句
语法格式:
begin
if 条件1:
if 条件2:
statementA # 条件1和2 均为 True
else:
statementB # 条件1为True 条件2为False
else:
statementC # 条件1为 False
嵌套不要过于太深,一般最多三层
(5)注意事项
- 没有用{}做代码块边界,一律使用缩进
tab
begin
if 条件1:
if 条件2:
statementA # 条件1和2 均为 True
else:
statementB # 条件1为True 且 "if 条件2 else"这个判断执行完毕后 它就执行
else:
statementC # 和if-else 没关系 => end
第2节 【选择结构编程练习】
练习01 计算身体质量指数
题目描述
BMI是根据体重测量健康的方式,通过以千克为单位的体重除以以米为单位的身高的平方计算而出
BMI指数解读如下:
| BMI | 解释 |
|---|---|
| BMI < 18.5 | 超轻 |
| 18.5 ≤ BMI < 25.0 | 标准 |
| 25.0 ≤ BMI < 30.0 | 超重 |
| 30.0 ≤ BMI | 肥胖 |
输入输出描述
输入体重和身高,数据之间用空格分隔
输出BMI指数结果
示例
输入:
60 1.8
输出:
标准
# 1.输入体重和身高
weight, height = map(float, input().split(" "))
# 2.计算BMI指数
BMI = weight / height ** 2
# 3.判断BMI的范围
result = ""
if BMI < 18.5:
result = "超轻"
elif BMI < 25.0:
result = "标准"
elif BMI < 30.0:
result = "超重"
else:
result = "肥胖"
# 4.输出结果
print(result)
练习02 判定闰年
题目描述
一个年份如果能被4整除但不能被100整除,或者能被400整除,那么这个年份就是闰年
输入输出描述
输入一个年份
输出Yes表示该年份为闰年,No则表示不是闰年
示例1
输入:
2008
输出:
Yes
示例2
输入:
2002
输出:
No
# 1.输入年份
year = int(input())
# 2.判断闰年
if year % 400 == 0 or year % 4 == 0 and not year % 100 == 0:
# 3.输出
print("Yes")
else:
# 3.输出
print("No")
# 逻辑运算符的优先级 not > and > or
练习03 中彩票
题目描述
随机产生一个两位数数字,然后用户输入一个两位数数字,并根据以下规则判定用户赢得的奖金是多少
(1)输入的数字和随机产生的数字完全相同(包括顺序),奖金为10000元
(2)输入的数字和随机产生的数字相同(不包括顺序),奖金为3000元
(3)输入的数字和随机产生的数字有一位数相同,奖金为1000元
(4)输入的数字和随机产生的数字都不相同,没有奖金,0元
输入输出描述
输入一个两位数
输出两行,第一行输出那个随机产生的两位数,第二行输出用户的奖金
示例1
输入:
12
输出:
12
10000
示例2
输入:
12
输出:
21
3000
示例3
输入:
12
输出:
23
1000
示例4
输入:
12
输出:
45
0
import random
# 1.输入一个两位数
user_num = int(input())
# 2.随机产生一个两位数
comp_num = random.randint(10, 99) # 生成a到b之间的随机整数 [a, b]
print(comp_num)
# 3.将两个数字进行拆分
x1, y1 = user_num // 10, user_num % 10
x2, y2 = comp_num // 10, comp_num % 10
# 4.做判断
if user_num == comp_num:
print(10000)
elif x1 == y2 and x2 == y1:
print(3000)
elif x1 == x2 or x1 == y2 or y1 == x2 or y1 == y2:
print(1000)
else:
print(0)
练习04 解一元二次方程
题目描述
一元二次方程ax2+bx+c=0(a!=0)ax^2+bx+c=0 (a != 0)ax2+bx+c=0(a!=0) 的解可以使用下面的公式计算
r1=−b+b2−4ac2a,r2=−b−b2−4ac2a
r_1=\frac{-b+\sqrt{b^2-4ac}}{2a},r_2=\frac{-b-\sqrt{b^2-4ac}}{2a}
r1=2a−b+b2−4ac,r2=2a−b−b2−4ac
其中b2−4acb^2-4acb2−4ac称为判别式,如果它为正,则方程有两个实数解;为零,方程只有一个实数解;为负,没有实数解
输入输出描述
输入a、b、c三个数据,数据之间用空格分隔
两个解每行输出一个;一个解单行输出;无解则单行输出无实数解,保留两位小数
示例1
输入:
1.0 3 1
输出:
-0.38
-2.62
示例2
输入:
1 2.0 1
输出:
-1.00
示例3
输入:
1 2 3
输出:
无实数解
# 1.输入a b c 三个参数
a, b, c = map(float, input().split(" "))
# 2.计算判别式delt
delt = b ** 2 - 4 * a * c
# 3.对delt做判断
if delt > 0:
x1, x2 = (-b + delt ** 0.5) / (2 * a), (-b - delt ** 0.5) / (2 * a)
print(f'{x1:.2f}')
print(f'{x2:.2f}')
elif delt == 0:
x = -b / (2 * a)
print(f'{x:.2f}')
else:
print("无实数解")
练习05 本年中的第几天
题目描述
给定某年、某月、某日的一个日期,计算该日是今年中的第几天
输入输出描述
输入三个数据分别表示年、月、日,数据之间用空格分隔
输出该日是今年中的第几天
示例1
输入:
2023 1 28
输出:
28
示例2
输入:
2023 3 2
输出:
61
# 1.输入年月日
year, month, day = map(int, input().split())
# 2.累计天数
"""
1 3 5 7 8 10 12 => 31
4 6 9 11 => 30
2 => ?
"""
days = day
if 1 < month:
days += 31
if 2 < month:
# 3.判断闰年的问题 决定2月是多少天
if year % 400 == 0 or year % 4 == 0 and not year % 100 == 0:
days += 29
else:
days += 28
if 3 < month:
days += 31
if 4 < month:
days += 30
if 5 < month:
days += 31
if 6 < month:
days += 30
if 7 < month:
days += 31
if 8 < month:
days += 31
if 9 < month:
days += 30
if 10 < month:
days += 31
if 11 < month:
days += 30
print(days)
练习06 剪刀石头布 I
题目描述
计算机随机产生一个数字0、1和2分别表示剪刀、石头和布
用户输入数字0、1或2,输出用户赢、计算机赢或平局
输入输出描述
输入数字0、1或2
输出有三行,第一行输出计算机出的啥,第二行输出用户出的啥,第三行输出结果
示例1
输入:
0
输出:
计算机出的 石头
用户出的 剪刀
计算机赢
示例2
输入:
1
输出:
计算机出的 剪刀
用户出的 石头
用户赢
示例3
输入:
2
输出:
计算机出的 布
用户出的 布
平局
"""
0 剪刀
1 石头
2 布
用户 电脑 用户赢
0 2 -2
1 0 1
2 1 1
用户 电脑 电脑赢
2 0 2
0 1 -1
1 2 -1
"""
import random
# 1.电脑随机一个数字0,1,2
comp_num = random.randint(0, 2)
# 2.用户输入一个数字0,1,2
user_num = int(input())
# 记录电脑和用户的选项
comp_choice = ""
if comp_num == 0:
comp_choice = "剪刀"
elif comp_num == 1:
comp_choice = "石头"
else:
comp_choice = "布"
user_choice = ""
if user_num == 0:
user_choice = "剪刀"
elif user_num == 1:
user_choice = "石头"
else:
user_choice = "布"
print(f'计算机出的 {comp_choice}')
print(f'用户出的 {user_choice}')
# 3.判断输赢平局
# 3.1 平局 ==
# 3.2 用户赢
# 3.3 电脑赢
div = user_num - comp_num
if comp_num == user_num:
print("平局")
elif div == -2 or div == 1:
print("用户赢")
else:
print("电脑赢")
练习07 回文数
题目描述
输入一个三位整数,然后判断其是否为一个回文数
如果一个数从左向右和从右向左读取时是一样的,那么这个数就是回文数
输入输出描述
输入一个数字
输出Yes表示是回文数,否则输出No
示例1
输入:
121
输出:
Yes
示例2
输入:
123
输出:
No
练习08 两个圆
题目描述
编写程序提示用户输入两个圆的中心坐标以及它们的半径,然后判断第二个圆与第一个圆之间的关系(包含、重叠、相离)。
输入输出描述
输入:输入两行数字 分别表示圆的中心坐标和半径
输出:两个圆的关系
示例1
输入:
0.5 5.1 13
1 1.7 4.5
输出:
包含
示例2
输入:
4.4 5.7 5.5
6.7 3.5 3
输出:
相交
示例3
输入:
4.4 5.5 1
5.5 7.2 1
输出:
相离
# 1.输入第1个圆的圆心坐标和半径
x1, y1, r1 = map(float, input().split())
# 2.输入第2个圆的圆心坐标和半径
x2, y2, r2 = map(float, input().split())
# 3.计算圆心距
distance = ((x1 - x2) ** 2 + (y1 - y2) ** 2) ** 0.5
# 4.判断和半径之间的关系
if distance <= r1 - r2:
print("包含")
elif distance <= r1 + r2:
print("相交")
else:
print("相离")

678

被折叠的 条评论
为什么被折叠?



