python常用数据类型快速复习和练习题巩固

一、常用数据类型梳理

Python 类型 C 类比 / 特点 可变? 示例
int 不限大小,没有 long/short/unsigned 不可变 a = 10
float 双精度浮点(相当于 double) 不可变 b = 3.14
bool True / False,是 int 子类 不可变 flag = True
str 字符序列,Unicode 支持,不像 C 的 char[] 不可变 s = "hello"
list 动态数组 ,可混合类型,相当于 vector<void*> 可变 lst = [1, "a", 3.0]
tuple 不可变的列表,类似 const 数组 不可变 t = (1, 2, 3)
dict 哈希表 / 映射,键值对 可变 d = {"name": "Tom", "age": 20}
set 无重复元素集合,类似哈希 set 可变 s = {1, 2, 3}
None 空值,类似 NULL 不可变 x = None

二、练习题快速巩固复习

练习一:列表与切片 ------ 模拟栈和队列

python 复制代码
#列表与切片练习#
data = [10, 20, 30, 40, 50]
#获取前3个元素
data1 = data[0:3]
#获取最后2个元素
data2 = data[-2:]
#列表反转
data3 = data[::-1]
#用列表模拟栈(后进先出),依次压入 60, 70,再弹出两个元素,给出最终列表
data.append(60)
data.append(70)
data.pop()
data.pop()
print(data1)
print(data2)
print(data3)
print(data)

运行结果:

python 复制代码
[10, 20, 30]
[40, 50]
[50, 40, 30, 20, 10]
[10, 20, 30, 40, 50]

练习二:字典与字符串 ------ 字符频率统计

给定一个字符串 text = "abracadabra",请统计每个字符出现的次数,结果用字典表示;然后找出出现次数最多的字符及其次数。

python 复制代码
text = "abracadabra"
text_dict = {}
for x in text:
    text_dict[x] = text_dict.get(x,0) + 1

text_key = max(text_dict, key=text_dict.get)

print(text_dict)
print(f"{text_key}:{text_dict[text_key]}")

运行结果:

python 复制代码
{'a': 5, 'b': 2, 'r': 2, 'c': 1, 'd': 1}
a:5

练习三:集合操作 ------ 找出两份名单的异同

两个名单:

复制代码
list_a = ["Alice", "Bob", "Charlie", "David"]
list_b = ["Bob", "David", "Eve", "Frank"]

请找出:

  • 同时出现在两份名单中的人(交集)

  • 只在第一份名单中的人(差集)

  • 两份名单中全部不重复的人(并集)

  • 将结果转换为排序后的列表

python 复制代码
list_a = ["Alice", "Bob", "Charlie", "David"]
list_b = ["Bob", "David", "Eve", "Frank"]
set_a = set(list_a)
set_b = set(list_b)
set1 = set_a & set_b
set2 = set_a - set_b
set3 = set_a | set_b

set1 = sorted(set1)
set2 = sorted(set2)
set3 = sorted(set3)

print(set1)
print(set2)
print(set3)

运行结果:

python 复制代码
['Bob', 'David']
['Alice', 'Charlie']
['Alice', 'Bob', 'Charlie', 'David', 'Eve', 'Frank']

练习四:元组解包与列表推导式 ------ 成绩筛选

给定一个包含学生姓名和分数的元组列表:

复制代码
records = [("Tom", 85), ("Jerry", 92), ("Spike", 78), ("Tyke", 95), ("Butch", 88)]

请完成:

  • 列表推导式生成一个仅包含姓名的大写列表(所有姓名转大写)

  • 用推导式生成一个列表,包含分数大于等于 90 的学生姓名

  • 计算所有分数的平均值(保留一位小数)

python 复制代码
records = [("Tom", 85), ("Jerry", 92), ("Spike", 78), ("Tyke", 95), ("Butch", 88)]
list_name = [name.upper() for name, score in records]
list_score_more_90 = [name for name, score in records if score >= 90]
score_average = sum(score/len(records) for name,score in records)
print(list_name)
print(list_score_more_90)
print(f"{score_average:.1f}")

运行结果:

python 复制代码
['TOM', 'JERRY', 'SPIKE', 'TYKE', 'BUTCH']
['Jerry', 'Tyke']
87.6

练习五:综合应用 ------ 简单通讯录

用字典存储一个通讯录,键为姓名,值为包含电话和邮箱的字典。实现以下功能:

  • 添加联系人

  • 根据姓名查询信息,若不存在则返回 "Not found"

  • 删除联系人

  • 列出所有联系人的姓名(按字母排序)

python 复制代码
contacts = {}

#添加联系人
def append_contacts(name, phone, email):
    contacts[name] = {'phone': phone, 'email': email}

#根据姓名查询信息
def find_contacts(name):
    return contacts.get(name, "Not found")

#删除联系人
def delete_contacts(name):
    return contacts.pop(name)

#列出所有联系人的姓名(按字母排序)
def find_contact_name_sort():
    return sorted(contacts.keys())

append_contacts("Alice", "123456", "alice@example.com")
append_contacts("Bob", "789012", "bob@example.com")
print(find_contacts("Alice"))   # {'phone': '123456', 'email': 'alice@example.com'}
print(find_contacts("Eve"))     # Not found
delete_contacts("Bob")
print(find_contact_name_sort())    # ['Alice']

运行结果:

python 复制代码
{'phone': '123456', 'email': 'alice@example.com'}
Not found
['Alice']