✏️ 课堂习题

第 5 章 · 序列 · 共 10 题 · 内容覆盖讲稿全部知识点

答案默认折叠,点击题目或右侧开关控制显示
展开所有答案
1
判断以下字符串的输出结果:
print('\\hello\\world\\')print(r'\hello\world\') 分别输出什么?
参考答案

第一行输出 \hello\world\(两个反斜杠表示一个反斜杠);
第二行输出 \hello\world\(原始字符串中 \ 不被转义,就是字面量)。
两者的输出结果实际上是相同的。

2
已知 s = "Python程序设计",请写出以下表达式的值:
(1) s[0]  (2) s[-1]  (3) s[:6]  (4) s[6:]  (5) s[::-1]
参考答案
python
s = "Python程序设计"
print(s[0])     # 'P'
print(s[-1])    # '计'(最后一个字符)
print(s[:6])    # 'Python'
print(s[6:])    # '程序设计'
print(s[::-1])  # '计设序程nohtyP'
3
编写程序,接收用户输入的一个字符串,使用字符串方法完成以下操作:
(1) 去除首尾空格;(2) 统计字符 'a' 出现的次数;(3) 将字符串中所有的空格替换为下划线 '_';
(4) 按空格拆分字符串并输出拆分后的列表。
参考答案
python
s = input("请输入一个字符串: ")
# (1) 去除首尾空格
s = s.strip()
print("去除空格后:", s)
# (2) 统计'a'出现次数
print("'a'出现了", s.count('a'), "次")
# (3) 空格替换为下划线
print("替换后:", s.replace(' ', '_'))
# (4) 按空格拆分
words = s.split()
print("拆分列表:", words)
4
已知列表 nums = [3, 1, 4, 1, 5, 9, 2, 6],请完成以下操作并写出每一步后列表的值:
(1) nums.append(7)  (2) nums.insert(2, 8)  (3) nums.remove(1)  (4) nums.pop()  (5) nums.sort()
参考答案

(1) [3, 1, 4, 1, 5, 9, 2, 6, 7] — 在表尾添加7
(2) [3, 1, 8, 4, 1, 5, 9, 2, 6, 7] — 在索引2处插入8
(3) [3, 8, 4, 1, 5, 9, 2, 6, 7] — 删除第一个出现的1
(4) [3, 8, 4, 1, 5, 9, 2, 6] — 删除表尾元素7并返回
(5) [1, 2, 3, 4, 5, 6, 8, 9] — 升序排列

5
使用列表生成式创建以下列表(每种一行代码):
(1) 1~50 之间所有 7 的倍数
(2) 列表 [2,5,8,3,6,10,1,4] 中所有大于 4 的元素
(3) 列表 [1,2,3,4,5] 中每个元素的立方
参考答案
python
# (1) 1~50之间所有7的倍数
list1 = [i for i in range(1, 51) if i % 7 == 0]
print(list1)  # [7, 14, 21, 28, 35, 42, 49]

# (2) 大于4的元素
arr = [2, 5, 8, 3, 6, 10, 1, 4]
list2 = [x for x in arr if x > 4]
print(list2)  # [5, 8, 6, 10]

# (3) 每个元素的立方
arr = [1, 2, 3, 4, 5]
list3 = [x ** 3 for x in arr]
print(list3)  # [1, 8, 27, 64, 125]
6
分析以下代码的输出结果,并解释 copy() 浅拷贝的行为:
参考答案
python
arr1 = [1, 2, [3, 4, 5]]
arr2 = arr1.copy()
arr1[2][1] = 666
print(arr1)  # [1, 2, [3, 666, 5]]
print(arr2)  # [1, 2, [3, 666, 5]]

arr1[2] = [9, 8, 7]
print(arr1)  # [1, 2, [9, 8, 7]]
print(arr2)  # [1, 2, [3, 666, 5]]

解释:浅拷贝只复制了外层列表,内层嵌套列表[3,4,5]在两个列表中共享同一个对象
所以修改 arr1[2][1] 时,arr2 也看到了变化。但 arr1[2] = [9,8,7] 是替换了 arr1 的引用,不会影响 arr2。

7
已知 t = (10, 20, 30, 40, 50),请写出以下表达式的值:
(1) t[1:4]  (2) t[::-1]  (3) len(t)  (4) 30 in t
参考答案

(1) (20, 30, 40)
(2) (50, 40, 30, 20, 10)
(3) 5
(4) True

8
使用元组的打包与解包,完成以下任务:
(1) 将三个变量 a=1, b=2, c=3 打包为一个元组;
(2) 交换 a 和 b 的值(不借助第三个变量);
(3) 使用星号表达式,让变量 first 接收第一个值,last 接收最后一个值,middle 接收中间所有值(列表)。
参考答案
python
# (1) 打包
a, b, c = 1, 2, 3
t = a, b, c
print(t)  # (1, 2, 3)

# (2) 交换变量
a, b = b, a
print(a, b)  # 2 1

# (3) 星号表达式解包
nums = (10, 20, 30, 40, 50)
first, *middle, last = nums
print(first)   # 10
print(middle)  # [20, 30, 40]
print(last)    # 50
9
已知 A = {1, 2, 3, 4, 5}B = {4, 5, 6, 7, 8},请写出以下表达式的值:
(1) A & B  (2) A | B  (3) A - B  (4) A ^ B  (5) A < B
参考答案

(1) {4, 5} — 交集(共同元素)
(2) {1, 2, 3, 4, 5, 6, 7, 8} — 并集(全部唯一元素)
(3) {1, 2, 3} — 差集(只在A中)
(4) {1, 2, 3, 6, 7, 8} — 对称差(只在其中一个集合中)
(5) False — A 不是 B 的子集(因为 1,2,3 不在 B 中)

10
创建一个字典存储你家附近 3 个超市的以下信息:名称、地址、电话(以名称为键)。然后编写代码:
(1) 输出所有超市的名称(keys);(2) 添加一个新超市;(3) 修改某个超市的电话;
(4) 删除某个超市;(5) 使用 for 循环遍历输出所有超市的名称和地址。
参考答案
python
# 创建超市字典
markets = {
    "华联超市": {"地址": "中山路100号", "电话": "0510-12345678"},
    "永辉超市": {"地址": "解放路200号", "电话": "0510-87654321"},
    "大润发":   {"地址": "人民路300号", "电话": "0510-11112222"}
}

# (1) 输出所有超市名称
print("超市列表:", list(markets.keys()))

# (2) 添加新超市
markets["沃尔玛"] = {"地址": "长江路400号", "电话": "0510-33334444"}

# (3) 修改电话
markets["华联超市"]["电话"] = "0510-99998888"

# (4) 删除超市
del markets["永辉超市"]

# (5) 遍历输出
for name, info in markets.items():
    print(f"{name}: {info['地址']}, 电话: {info['电话']}")