✏️ 课堂习题
第 5 章 · 序列 · 共 10 题 · 内容覆盖讲稿全部知识点
print('\\hello\\world\\') 和 print(r'\hello\world\') 分别输出什么?
第一行输出 \hello\world\(两个反斜杠表示一个反斜杠);
第二行输出 \hello\world\(原始字符串中 \ 不被转义,就是字面量)。
两者的输出结果实际上是相同的。
s = "Python程序设计",请写出以下表达式的值:(1)
s[0] (2) s[-1] (3) s[:6] (4) s[6:] (5) s[::-1]s = "Python程序设计"
print(s[0]) # 'P'
print(s[-1]) # '计'(最后一个字符)
print(s[:6]) # 'Python'
print(s[6:]) # '程序设计'
print(s[::-1]) # '计设序程nohtyP'
(1) 去除首尾空格;(2) 统计字符 'a' 出现的次数;(3) 将字符串中所有的空格替换为下划线 '_';
(4) 按空格拆分字符串并输出拆分后的列表。
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)
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] — 升序排列
(1) 1~50 之间所有 7 的倍数
(2) 列表
[2,5,8,3,6,10,1,4] 中所有大于 4 的元素(3) 列表
[1,2,3,4,5] 中每个元素的立方# (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]
copy() 浅拷贝的行为: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。
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
(1) 将三个变量
a=1, b=2, c=3 打包为一个元组;(2) 交换 a 和 b 的值(不借助第三个变量);
(3) 使用星号表达式,让变量 first 接收第一个值,last 接收最后一个值,middle 接收中间所有值(列表)。
# (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
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 中)
名称、地址、电话(以名称为键)。然后编写代码:(1) 输出所有超市的名称(keys);(2) 添加一个新超市;(3) 修改某个超市的电话;
(4) 删除某个超市;(5) 使用 for 循环遍历输出所有超市的名称和地址。
# 创建超市字典
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['电话']}")