Python 比较运算符、逻辑运算符、选择结构语句例题练习

第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
条件为 True
条件为 False
begin
条件
statement
end

(2)if - else 语句

语法格式:

begin
if 条件:
    # 当条件为True时,执行的代码块
    statementA
else:
    # 当条件为False时,执行的代码块
    statementB
end
条件为 True
条件为 False
begin
条件
statementA
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=2ab+b24ac,r2=2abb24ac
其中b2−4acb^2-4acb24ac称为判别式,如果它为正,则方程有两个实数解;为零,方程只有一个实数解;为负,没有实数解

输入输出描述

输入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 两个圆

题目描述

编写程序提示用户输入两个圆的中心坐标以及它们的半径,然后判断第二个圆与第一个圆之间的关系(包含、重叠、相离)。

image-20250304172103796

输入输出描述

输入:输入两行数字 分别表示圆的中心坐标和半径

输出:两个圆的关系

示例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("相离")
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值