4.1.3《Python的运算符与表达式》粤教版(2019)数据与计算必修1-课后练习(含答案)

资源下载
  1. 二一教育资源

4.1.3《Python的运算符与表达式》粤教版(2019)数据与计算必修1-课后练习(含答案)

资源简介

Python的运算符与表达式 练习题
(粤教版·必修一《数据与计算》4.1.3)
一、单选题(共15题,每题5分,共75分)
1. 在Python中,表达式 `15 // 4` 的结果是(  )
A. 3
B. 3.75
C. 3.0
D. 4
2. 下列表达式中,返回值是True的是(  )
A. 3 > 5
B. 7 % 3 == 0
C. 2 ** 3 == 8
D. "abc" > "abd"
3. 表达式 `(5 + 3) *2 * *2 // 3 - 1` 的值是(  )
A. 9
B. 10
C. 8
D. 7
4. 以下关于Python运算符优先级的说法,正确的是(  )
A. 算术运算符的优先级高于比较运算符
B. 逻辑运算符 `and` 的优先级高于 `or`,且高于 `not`
C. 所有运算符都是左结合的
D. 赋值运算符的优先级最高
5. 执行 `x = 5; x += 3 * 2; print(x)` 的结果是(  )
A. 11
B. 16
C. 8
D. 10
6. 下列表达式的结果与其他三个不同的是(  )
A. 5 != 3
B. 5 > 3 and 2 < 1
C. not (5 <= 3)
D. 5 == 5 or 3 == 4
7. 假设 `a = 10; b = 20; c = 30`,下列逻辑表达式的值为假(False)的是(  )
A. a < b and b < c
B. a > b or b < c
C. not (a > c)
D. a == b and c > a
8. 表达式 `3 > 2 > 1` 在Python中的运算结果是(  )
A. True
B. False
C. 语法错误
D. 相当于 `(3 > 2) and (2 > 1)`
9. 以下哪个选项可以正确判断变量 `x` 是否在区间 [10, 20] 内?(  )
A. 10 <= x <= 20
B. x >= 10 and x <= 20
C. x in range(10, 21)
D. 以上都正确
10. 执行 `print(5 * "A" + 3 * "B")` 的输出结果是(  )
A. AAAAABBB
B. AAAAAABBB
C. AABAAB
D. 报错
11. 关于 `//` 运算符,下列说法错误的是(  )
A. 结果为整数
B. 对正数来说相当于向下取整
C. 对负数执行 `//` 时,结果向下取整(向负无穷方向)
D. `-7 // 3` 的结果是 -2
12. 在Python中,表达式 `0 and 5` 的值为(  )
A. 0
B. 5
C. False
D. True
13. 若 `x = 7`,则表达式 `x % 2 == 0 and x // 2` 的值是(  )
A. False
B. 3
C. True
D. 0
14. 设 `a, b, c = 2, 3, 4`,表达式 `a ** b // c % 3` 的值为(  )
A. 2
B. 1
C. 0
D. 8
15. 某同学想通过表达式 `x**0.5` 计算平方根,但发现当 `x` 为负数时程序会出错。以下哪种处理方法最合适?(  )
A. 使用 `abs(x)**0.5`
B. 先判断 `x` 是否非负,否则输出提示
C. 使用 `x**0.5` 并捕获异常
D. 以上都可以,视具体需求而定
二、填空题(共10题,每题2分,共20分)
1. Python中,求余数的运算符是__________,除法运算符是__________,整除运算符是__________。
2. 表达式 `8 / 4` 的结果类型是__________,而 `8 // 4` 的结果类型是__________。
3. 逻辑运算符的优先级从高到低依次是:`not`、__________、__________。
4. 表达式 `5 > 3 and 6 != 4 or 2 < 1` 的值是__________。
5. 在Python中,字符串可以使用__________运算符进行重复(如 `"Hi" * 3`),也可以使用__________运算符进行拼接(如 `"Hello" + "World"`)。
6. 表达式 `3 ** 2** 3` 的结果是__________,因为幂运算符是__________结合的。
7. 赋值运算符 `+=` 的等价形式是__________(用标准算术运算符和赋值表示)。
8. 若 `x = 2`,则执行 `x =** 3` 后,x的值是__________。
9. 表达式 `bool([]) and 100` 的返回值是__________。
10. 已知 `a = 15; b = 4`,表达式 `a % b == 0 and a // b` 的值为__________。
三、情景作答题(共3题)
情景一:便利店收银系统的折扣计算
某便利店开发收银系统,优惠规则如下:
如果顾客购物总金额(amount)超过200元,打9折;
否则,如果超过100元,打95折;
否则不打折。
此外,如果是会员(member为True),在以上折扣基础上再享受额外9.5折(即总折扣乘以0.95)。
请用Python表达式或语句回答问题:
1. 写出判断金额是否超过200元的逻辑表达式。(2分)
2. 写出根据金额计算基础折扣系数的算法(用多分支或条件表达式)。(5分)
3. 写出最终应付金额的计算表达式(假设基础折扣系数为discount,会员标志为member)。(3分)
情景二:闰年判断的表达式优化(创新题)
闰年的判断规则:能被4整除但不能被100整除,或者能被400整除。常规写法:
```python
(year % 4 == 0 and year % 100 != 0) or (year % 400 == 0)
```
老师提出一个问题:能否使用整除 `//` 和取余 `%` 的配合,写出一个更简洁的表达式?例如:`year % (year % 100)` 等。
1. 上述常规写法中,各个运算符的优先级是如何决定的?请解释Python是如何解析这个表达式的。(5分)
2. 尝试设计一个不包含逻辑运算符(`and`/`or`)的表达式来判断闰年(提示:可以考虑使用整除和取余的数值运算,利用0和非0的布尔转换)。(5分)
3. 判断以下年份是否为闰年:2020、2100、2000。并说明理由。(4分)
情景三:模拟银行存款利息计算(跨学科应用)
小华将10000元存入银行,年利率为3%,每年复利一次。计算n年后本息合计的公式为:`amount = principal * (1 + rate) ** n`。现在要编写程序,输入存款年限n,输出最终金额(保留两位小数)。
1. 写出计算本息合计的Python表达式,已知本金principal=10000,利率rate=0.03。(2分)
2. 如果存款年限n为10年,请直接计算出表达式 `10000 * (1 + 0.03) * *10` 的值(可使用计算器思维,不要求精确数值,写出计算思路即可)。(4分)
3. 银行规定:如果存期超过5年,额外奖励本金的0.5%。请用条件表达式(三元运算符)写出最终金额的计算公式。(6分)
参考答案与解析
一、单选题答案解析
1. A
解析:`//` 是整除运算符,15除以4得3.75,向下取整得3(正数向下取整即为舍弃小数部分)。
2. C
解析:A: 3>5为False;B: 7%3=1,1==0为False;C: 2**3=8,8==8为True;D: 字符串比较按字典序,'c' < 'd',所以"abc" < "abd",故为False。
3. A
解析:运算符优先级:`` 最高,其次 `` `/` `//` `%`,最后 `+` `-`。
(5+3)=8 → 2**2=4 → 84=32 → 32//3=10 → 10-1=9。
4. A
解析:A正确:算术 > 比较 > 逻辑。B错误:优先级 not > and > or。C错误:赋值运算符是右结合。D错误:赋值优先级最低。
5. A
解析:`x += 3*2` 相当于 `x = x + 6`,x原为5,得11。
6. B
解析:A: True;B: 5>3为True,2<1为False,True and False → False;C: 5<=3为False,not False → True;D: 5==5为True,or短路得True。B为False。
7. D
解析:A: 10<20 True, 20<30 True → True;B: 10>20 False, or 20<30 True → True;C: a>c (10>30) False, not False → True;D: a==b (10==20) False, and短路 → False。
8. D
解析:Python支持链式比较 `3>2>1` 等价于 `(3>2) and (2>1)`,结果为True。D正确,A只是结果不是解析。
9. D
解析:A是链式比较,B是逻辑组合,C是成员运算(range(10,21)包含10到20),三种都正确。
10. B
解析:`5*"A"`得"AAAAA",`3*"B"`得"BBB",拼接得"AAAAABBB",注意5个A不是4个,故B正确。
11. D
解析:整除向下取整:-7//3 = -3(因为 -2.33...向下取整得-3),D说-2错误。
12. A
解析:`and` 短路:第一个操作数为0(假),直接返回0,不再计算第二个。注意0不是False,是整数0。
13. A
解析:`x%2==0` 即 7%2=1,1==0为False,`and` 短路直接返回False,不再计算后半部分。
14. C
解析:优先级:`` **优先,`//` 和 `%` 同级从左到右。`a**b`=23=8,8//3=2(整除),2%3=2?等等,原表达式 `a ** b // c % 3`:先算幂得8,然后 `8 // 4 = 2`,再 `2 % 3 = 2`。我计算错选项?2对应A?但选项有2,也有0?重新评估:`a**b`=8,`8//c`=8//4=2,`2%3`=2,结果是2,没有0。但选项C是0,可能我误算?检查顺序:运算符优先级 ``** > `//` 和 `%` 同级从左到右。所以先 `ab`=8;然后 `8//4=2`;然后 `2%3=2`。结果2,选A。但选项A是2,正确。题干写的 `a** b // c % 3` 中a=2,b=3,c=4,没有错误。但题目说D.8,C.0。所以答案应该是2。但需确认:原表达式 `a** b // c % 3` 可能被误解为 `a ** (b // c) % 3`?不,优先级决定幂先算。所以答案为2。但为了保险,我们按标准答案:2。所以选A。
15. D
解析:A适用正负数但平方根为正;B明确处理规则;C异常捕获。三种方法各有利弊,视需求而定,D最全面。
二、填空题答案解析
1. %;/;//
2. float;int
3. and;or
4. True(5>3 True,6!=4 True,True and True -> True,True or 2<1 -> True)
5. *;+ **
6. 6561;右(3(23)=38=6561)
7. x = x + 表达式
8. 8
9. False(空列表bool为False,and短路返回False)
10. False(15%4=3,3==0 False,返回False)
三、情景作答题答案解析
情景一:便利店收银系统
1. `amount > 200`
2. 基础折扣系数:
```python
if amount > 200:
discount = 0.9
elif amount > 100:
discount = 0.95
else:
discount = 1.0
```
或使用条件表达式(嵌套):
```python
discount = 0.9 if amount > 200 else (0.95 if amount > 100 else 1.0)
```
3. 最终金额:
```python
final = amount discount (0.95 if member else 1.0)
```
或 `final = amount * discount * (0.95 if member else 1)`
情景二:闰年判断的表达式优化
1. 优先级:算术运算符 `%` 优先级高于比较运算符 `==`、`!=`,比较运算符高于逻辑 `and`、`or`。所以表达式 `(year % 4 == 0 and year % 100 != 0) or (year % 400 == 0)` 先计算 `year % 4` 等,然后比较得布尔值,再结合 `and`,最后 `or`。
2. 不包含逻辑运算符的表达式:利用整数除法和取余,使结果为布尔值。例如:
```python
(year % 4 == 0) - (year % 100 == 0) + (year % 400 == 0) != 0
```
但更巧妙的是:`(year % 4 == 0) & (year % 100 != 0) | (year % 400 == 0)` 其实还是用了位运算,但可视为没逻辑运算符?严格说 `&` `|` 是位运算符,但可用于布尔。更简洁:`not (year % 4) and (year % 100) or not (year % 400)` 用了逻辑。要求不使用 `and/or`,可用乘法和加法:`int(year%4==0) * (1 - int(year%100==0)) + int(year%400==0) > 0`。由于是开放性题目,合理即可。
3. 2020 % 4 == 0,2020 % 100 != 0,所以是闰年。
2100 % 4 == 0,但 2100 % 100 == 0 且 2100 % 400 != 0,所以不是闰年。
2000 % 400 == 0,所以是闰年。
情景三:银行存款利息计算
1. `10000 (1 + 0.03) ** n`
2. 近似计算:1.03^10 ≈ 1.3439,乘以10000得13439元左右。具体计算:1.03^2=1.0609,^4≈1.1255,^5≈1.1593,^10≈1.3439。
3. 条件表达式:
```python
final = 10000 * (1 + 0.03) ** n + (10000 0.005 if n > 5 else 0)
```
或 `final = 10000 (1 + 0.03) n + (50 if n > 5 else 0)`。

展开更多......

收起↑

资源预览