4.1.2《Python的数据类型》粤教版(2019)数据与计算必修1-课后练习(含答案)

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

4.1.2《Python的数据类型》粤教版(2019)数据与计算必修1-课后练习(含答案)

资源简介

Python的数据类型练习题
(粤教版·必修一《数据与计算》)
一、单选题(共15题,每题5分,共75分)
1. 在Python中,执行 `x = 3.14` 后,变量x的数据类型是(  )
A. int
B. float
C. str
D. bool
2. 下列哪个选项的数值在Python中属于整型(int)?(  )
A. 3.14
B. "123"
C. 0b1010
D. 3+4j
3. 执行 `isinstance(10, int)` 的返回值是(  )
A. True
B. False
C. 10
D. 报错
4. 下列关于Python字符串的说法,正确的是(  )
A. 字符串只能用双引号括起来
B. 字符串是不可变序列,不能修改其中的某个字符
C. 空字符串的布尔值是False,但空字符串的值为None
D. 字符串可以通过索引赋值来修改字符,如 `s[0] = 'a'`
5. 执行以下代码,输出结果是(  )
```python
a = [1, 2, 3]
b = a
b.append(4)
print(a)
```
A. [1, 2, 3]
B. [1, 2, 3, 4]
C. [1, 2, 3, 4]
D. 报错
6. 在Python中,下列哪个数据类型是可变(mutable)的?(  )
A. tuple
B. str
C. list
D. int
7. 下列代码的输出结果是(  )
```python
s = "Hello"
t = s + "World"
print(s)
```
A. Hello
B. HelloWorld
C. World
D. 报错
8. 以下哪个选项可以正确判断变量x是否为整数?(  )
A. type(x) == int
B. x is int
C. x == int
D. int(x)
9. 执行 `bool([])` 的返回值是(  )
A. True
B. False
C. None
D. 报错
10. 下列代码运行后,变量 `d` 的数据类型是(  )
```python
d = {"name":"Tom", "age":18}
```
A. list
B. tuple
C. dict
D. set
11. 关于Python的复数类型,下列说法正确的是(  )
A. 复数可以用 `complex(3,4)` 创建
B. 复数的虚部必须以j结尾,且不能是变量
C. 复数不能进行加减乘除运算
D. 复数的实部和虚部必须是整数
12. 执行 `x = (1)` 后,x的数据类型是(  )
A. tuple
B. int
C. list
D. set
13. 下列表达式中,返回值不是布尔值的是(  )
A. 5 > 3
B. bool("")
C. isinstance(10, int)
D. 5 + 3
14. 定义一个空集合的正确方式是(  )
A. {}
B. set()
C. []
D. ()
15. 下列代码执行后,输出结果是(  )
```python
a = [1, 2, 3]
b = [1, 2, 3]
print(a is b)
```
A. True
B. False
C. 报错
D. None
二、填空题(共10题,每题2分,共20分)
1. Python中,整型(int)和浮点型(float)进行算术运算时,结果会自动转换为__________类型。
2. 在Python中,布尔值True和False在参与数值运算时,True会被当作__________,False会被当作__________。
3. 字符串是一种__________序列(可变/不可变),因此不能直接修改其中的某个字符。
4. 代码 `nums = [i for i in range(5)]` 中,nums的数据类型是__________。
5. 要判断变量x是否为浮点数,可以使用函数__________。
6. 元组的特征是__________,一旦创建就不能修改。
7. 空字典的表示方式是__________,空集合的表示方式是__________。
8. 执行 `type(3>2)` 的返回值是__________。
9. 列表的__________操作(如append、extend、insert)会改变原列表,而不创建新列表。
10. 集合(set)中的元素必须是__________(可变/不可变)类型,因此不能包含列表。
三、情景作答题(共3题)
情景一:学生成绩管理系统中的数据类型选择
某校开发学生成绩管理系统,需要存储以下信息:
学生姓名(如“张三”)
学号(如“2024001”)
语文、数学、英语三科成绩(百分制,可能有小数点)
各科成绩是否已录入(True/False)
该生的所有成绩(可能包含多门科目,科目数不固定)
班级内所有学生的学号(不允许重复)
问题:
1. 为上述每一项信息选择一个合适的Python数据类型,并说明理由。(8分)
2. 使用代码创建示例变量,演示如何存储一名学生的以上信息(至少包含姓名、学号、三科成绩、是否已录入标志、成绩列表、班级学号集合)。(4分)
3. 如果程序员用 `scores = (95, 87.5, 92)` 存储学生成绩,后来需要修改数学成绩为88分,能否直接修改?为什么?应该使用什么数据类型才能方便修改?(4分)
情景二:可变与不可变类型的陷阱(创新情景)
小李在编写一个购物车程序时,写了以下代码:
```python
cart = ['苹果', '香蕉']
new_cart = cart
new_cart.append('橘子')
print("购物车:", cart)
```
他惊讶地发现,原本的购物车`cart`也增加了“橘子”。他尝试用同样的方式处理字符串:
```python
greeting = "你好"
new_greeting = greeting
new_greeting = new_greeting + "呀"
print("问候语:", greeting)
```
这次`greeting`没有变化。请回答:
1. 为什么列表`cart`被修改了,而字符串`greeting`没有改变?这体现了Python数据类型的哪一类重要区别?(6分)
2. 如果小李想要复制一份独立的购物车(修改新购物车不影响原购物车),应该怎么做?写出代码。(4分)
3. 请举例说明除了列表和字符串外,还有哪些常见类型是可变的,哪些是不可变的?(至少各举两例)(4分)
情景三:数据类型判断与转换的应用(实践创新)
某商场编写了一个优惠计算程序,用户输入消费金额(可能是整数或带小数点的数值)和会员等级("gold", "silver", "normal"),程序需要计算应付金额。参考代码如下:
```python
amount = input("请输入消费金额:")
level = input("请输入会员等级:")
此处需要添加类型转换和计算代码
```
问题:
1. `input()` 函数返回的数据是什么类型?如果直接进行数学运算(如 `amount 0.8`)会有什么问题?应该如何解决?(4分)
2. 请补充代码,实现:如果会员等级是"gold"打8折,"silver"打9折,"normal"不打折,输出打折后的金额(保留两位小数)。要求处理用户可能输入带空格或大小写不一致的情况。(6分)
3. 假设用户输入金额时不小心输入了“一百元”这样的非数字字符串,程序运行时会出错。请设计一种方法,使用 `try...except` 结构捕获异常并提示用户重新输入,直到输入有效数字为止。写出关键代码片段。(6分)
参考答案与解析
一、单选题答案解析
1. B
解析:`3.14` 是浮点数,Python中浮点数类型为float。
2. C
解析:`0b1010` 是二进制整数,值为10,属于int;A是float;B是str;D是complex。
3. A
解析:`isinstance(10, int)` 判断10是否为int类型,返回True。
4. B
解析:A错,字符串可用单引号、双引号、三引号;C错,空字符串布尔值为False,但值为`""`,不是None;D错,字符串不可变,不能通过索引赋值。
5. B
解析:列表是可变类型,`b = a` 让b引用同一个列表,`b.append(4)` 修改了原列表,因此a也变为[1,2,3,4]。
6. C
解析:list是可变类型;tuple、str、int都是不可变类型。
7. A
解析:字符串是不可变类型,`s + "World"` 生成了新字符串但未赋值给s,s保持不变,输出"Hello"。
8. A
解析:`type(x) == int` 正确判断;B和C语法错误;D是类型转换,不是判断。
9. B
解析:空列表的布尔值为False,`bool([])` 返回False。
10. C
解析:花括号内键值对表示字典dict。
11. A
解析:`complex(3,4)` 创建复数3+4j;B错,虚部可以用变量表示如 `3+4j`;C错,复数可运算;D错,实部虚部可为整数或浮点数。
12. B
解析:单元素元组需要加逗号,`(1)` 被解释为整数1,元组应为 `(1,)`。
13. D
解析:`5+3` 结果为整数,不是布尔值;其他三个都是布尔类型。
14. B
解析:`{}` 是空字典,`set()` 是空集合;`[]` 空列表,`()` 空元组。
15. B
解析:`is` 比较对象身份(内存地址),虽然内容相同但是两个不同列表对象,返回False。
二、填空题答案解析
1. 浮点(float)
解析:整型和浮点运算结果自动转换为浮点数。
2. 1;0
解析:True转为1,False转为0。
3. 不可变
解析:字符串是不可变序列。
4. list
解析:列表推导式生成列表。
5. isinstance(x, float) 或 type(x) == float
解析:判断类型。
6. 不可变性
解析:元组创建后不能修改。
7. {} ; set()
解析:花括号无冒号是集合?注意:`{}` 是空字典,空集合必须用 `set()`。
8. bool
解析:`3>2` 结果是布尔值True,type是bool。
9. 原地修改
解析:append等方法修改原列表。
10. 不可变
解析:集合元素必须是可哈希的不可变类型。
三、情景作答题答案解析
情景一:学生成绩管理系统中的数据类型选择
1. 数据类型选择与理由
| 信息 | 推荐类型 | 理由 |
|------|----------|------|
| 学生姓名 | str | 文本数据 |
| 学号 | str | 虽为数字但无需计算,且可能有前导零 |
| 各科成绩 | float | 可能有小数,float可存储整数和小数 |
| 是否已录入 | bool | 只有两种状态 |
| 所有成绩(多门) | list | 长度可变,方便增删改查 |
| 班级学号集合 | set | 不允许重复,集合自动去重 |
2. 创建示例变量代码
```python
name = "张三"
student_id = "2024001"
chinese = 95.0
math = 87.5
english = 92.0
is_entered = True
scores = [chinese, math, english] 或 [95, 87.5, 92]
class_ids = {"2024001", "2024002", "2024003"}
```
3. 能否修改成绩?
不能直接修改。因为元组(tuple)是不可变类型,一旦创建就不能修改其中的元素。若要修改成绩,应使用列表(list)来存储,列表是可变的,可以通过索引赋值 `scores[1] = 88` 来修改数学成绩。
情景二:可变与不可变类型的陷阱
1. 原因分析
列表是可变类型,`new_cart = cart` 只是让两个变量引用同一个列表对象,通过其中一个变量修改列表内容,另一个变量也会看到变化。字符串是不可变类型,`new_greeting = greeting` 后,两者引用相同字符串,但执行 `new_greeting = new_greeting + "呀"` 时,由于字符串不可变,运算会创建新的字符串对象并让 `new_greeting` 指向它,而 `greeting` 仍指向原字符串,因此不变。这体现了可变与不可变类型的本质区别。
2. 复制独立列表的方法
```python
new_cart = cart.copy() 方法1
new_cart = cart[:] 方法2
new_cart = list(cart) 方法3
```
3. 可变与不可变类型举例
可变类型:list(列表)、dict(字典)、set(集合)
不可变类型:int(整数)、float(浮点数)、str(字符串)、tuple(元组)、bool(布尔值)
情景三:数据类型判断与转换的应用
1. input()的返回值类型及问题
`input()` 返回的数据类型是字符串(str)。直接进行 `amount 0.8` 会引发TypeError,因为字符串不能与浮点数相乘。解决方法是使用 `float(amount)` 将字符串转换为数值类型。
2. 补充代码(完整实现)
```python
amount = input("请输入消费金额:")
level = input("请输入会员等级:")
类型转换
amount = float(amount)
处理大小写和空格
level = level.strip().lower()
if level == "gold":
discount = 0.8
elif level == "silver":
discount = 0.9
else:
discount = 1.0
final = amount discount
print(f"应付金额:{final:.2f}元")
```
3. 异常捕获实现循环输入
```python
while True:
s = input("请输入消费金额:")
try:
amount = float(s)
break 转换成功,退出循环
except ValueError:
print("输入无效,请输入数字(如 123.45)")
后续使用 amount 进行计算
```

展开更多......

收起↑

资源预览