Python第7次大作业

一、问答题

(1)列表和元组的区别是什么?如何从列表创建元组?如何从元组创建列表?

答:区别:列表是可变的数据类型,可以对列表中的元素进行添加、删除、修改等操作。元组是不可变的数据类型,一旦创建其中的元素就不能进行添加、删除、修改等操作。

可以用tuple()函数将列表转换为元组,可以用list()函数将元组转换为列表。

(2)下面代码的错误是什么?

t=(1,2.3)
t.append(4)
t.remove(0)
t[0]=1

答:元组是不可变数据类型,不能进行增删操作,所以下面代码错误。

t.append(4)
t.remove(0)

(3)下面的代码正确吗?

t1 = (1,2,3,7,9,0,5)
t2 = (1,2,5)
t1 = t2

答:代码是正确的,但是t1 = t2是将t2对应的元组赋值给t1,所以t2t1都指向元组(1,2,5)。

(4)给出下面代码的输出?

t1=(1,2,3,7,9,0,5)
t2=(1,3,22,7,9,0,5)
print(t1 == t2)
print(t1 != t2)
print(t1 > t2)
print(t1 < t2)

答:输出:

False
True
False
True

(5)列表、集合或元组能有不同类型的元素吗?

答:可以有不同类型的元素。列表是可变序列,集合是无序且唯一的数据结构,元组是不可变序列,都可以包含不同类型的元素。

(6)下面哪个集合是被正确创建的?

s ={1,3,4}
s ={{1,2},{4,5}}
s ={[1,2],[4,5]}
s ={(1,2),(4,5)}

答:集合是可变类型,但是里面的元素是可哈希的,所以元素必须是不可变的。

正确的集合应该是:

s ={1,3,4} s ={(1,2),(4,5)}

(7)给出下面代码的输出。

students ={"peter","john"}
print(students)
students.add("john")
print(students)
students.add("peterson")
print(students)
students.remove("peter")
print(students)

答:

{'john', 'peter'}
{'john', 'peter'}
{'john', 'peterson', 'peter'}
{'john', 'peterson'}

(8)给出下面代码的输出。

student1 ={"peter""john""tim"}
student2 ={"peter","johnson""tim"}
print(student1.issuperset({"john"}))
print(studentl.issubset(student2))
print({123} > {124})
print({123} < {124})
print({12} < {124})
print({12} <= {124})

答:

True
False
False
False
True
True

(9)给出下面代码的输出。

s1={1456}
s2={1367}
print(s1.union(s2))
print(s1 | s2)
print(s1.intersection(s2))
print(s1 & s2)
print(s1.difference(s2))
print(s1 - s2)
print(s1.symmetric_difference(s2))
print(s1 ^ s2)

答:

{1, 3, 4, 5, 6, 7}
{1, 3, 4, 5, 6, 7}
{1, 6}
{1, 6}
{4, 5}
{4, 5}
{3, 4, 5, 7}
{3, 4, 5, 7}

(10)给出下面代码的输出。

set1 = {123}
set2 = {345}
set3 = set1 | set2
print(set1,set2,set3)
set3 = set1 - set2
print(set1,set2,set3)
set3=set1 & set2
print(set1,set2,set3)
set3=set1 ^ set2
print(set1,set2,set3)

答:

{1, 2, 3} {3, 4, 5} {1, 2, 3, 4, 5}
{1, 2, 3} {3, 4, 5} {1, 2}
{1, 2, 3} {3, 4, 5} {3}
{1, 2, 3} {3, 4, 5} {1, 2, 4, 5}

(11)下面哪个字典是被正确创建的?

d={1:[12]3:[34]}
d={[12]:1[34]:3}
d={(12):1(34):3}
d={1:"john", 3:"peter"}
d={"john":1,"peter":3}

答:字典的键是可哈希的,所以字典的键必须是不可变类型。

正确的:

d={1:[1,2],3:[3,4]}
d={(1,2):1,(3,4):3}
d={1:“john”, 3:“peter”}
d={“john”:1,“peter”:3}

不正确的:d={[1,2]:1,[3,4]:3} ,列表是可变的,所以无法作为键。

(12)假设一个名为 students 的字典是 {“john”:3,“peter”:2}。下面的语句实现什么功能?

(a)	print(len(students))
(b)	print(students.keys())
(c)	print(students.values())
(d)	print(students.items())

答:(a)获取键值对的长度。

(b)获取字典students的键。

©获取字典students的值。

(d)获取字典students的键值对。

(13)给出下面代码的输出。

def main():
	d = {"red":4,"blue":1,"green":14,"yellow":2}
	print(d["red"])
	print(list(d.keys()))
	print(list(d.values))
	print("blue" in d)
	print("purple" in d)
	d["blue"] += 10
	print(d["blue"])
	
main() 	#Call the main function

答:

4
['red', 'blue', 'green', 'yellow']
[4, 1, 14, 2]
True
False
11

(14)给出下面代码的输出。

def main():
	d = {}
	d["susan"]= 50
	d["jim"]= 45
	d["joan"]= 54
	d["susan"]= 51
	d["john"]= 53
	print(len(d))
main() #Call the main function

答:字典的键具有唯一性,上述代码中只有"susan"对应的值更新了。

4

二、编程题

(15)学生成绩统计

学校记录了学生们多门课程的成绩,每门课程成绩以字典形式存储,学生姓名作为键,成绩作为值。现在需要统计每个学生的平均成绩,并找出平均成绩最高的学生。

# 每门课学生的成绩
course_scores = [
    {'Alice': 85, 'Bob': 90, 'Charlie': 78},
    {'Alice': 92, 'Bob': 88, 'Charlie': 85},
    {'Alice': 79, 'Bob': 94, 'Charlie': 82}
]
# 每门课学生的成绩
course_scores = [
    {'Alice': 85, 'Bob': 90, 'Charlie': 78},
    {'Alice': 92, 'Bob': 88, 'Charlie': 85},
    {'Alice': 79, 'Bob': 94, 'Charlie': 82}
]
#用于存储每个学生的总成绩
total_scores = {}
#课程数量
num_courses = len(course_scores)
for scores in course_scores:
    for student, score in scores.items():
        if student not in total_scores:
            total_scores[student] = 0
        total_scores[student] += score
#存储每个学生的平均成绩
average_scores = {}
for student, total in total_scores.items():
    average_scores[student] = total / num_courses
#找出平均成绩最高的学生
heighest_student = max(average_scores, key=average_scores.get)
heighest_score = average_scores[heighest_student]
#输出每个学生的平均成绩
for student, average in average_scores.items():
    print(f"{student}的平均成绩是:{average:.2f}")
print(f"平均成绩最高的学生是{heighest_student},平均成绩{heighest_score:.2f}")

(16)商品库存管理

一家商店有多个商品的库存信息,以字典形式存储,键为商品名称,值为库存数量。每天会有新的进货和销售记录,需要更新库存信息。如果库存数量变为负数,则输出警告信息。

# 初始货物量
inventory = {'苹果': 100, '香蕉': 80, '橙子': 120}
# 进货/销售记录
transactions = [
    {'苹果': -20, '香蕉': 30},
    {'橙子': -50, '苹果': 10}
]
# 初始货物量
inventory = {'苹果': 100, '香蕉': 80, '橙子': 120}
# 进货/销售记录
transactions = [
    {'苹果': -20, '香蕉': 30},
    {'橙子': -50, '苹果': 10}
]
for transaction in transactions:
    for item, quantity in transaction.items():
        #更新库存信息
        inventory[item] = inventory.get(item, 0) + quantity
        #为负数发出警告
        if inventory[item] < 0:
            print(f"商品{item}数量为负数,当前存量为{inventory[item]}")
#输出更新后的库存信息
print("更新后的库存信息:")
for item, quantity in inventory.items():
    print(f"{item}:{quantity}")

(17)社交网络好友关系【录制讲解】

**视频链接:**录制文件:https://meeting.tencent.com/crm/KeZYRawW4f

在一个社交网络中,用户之间的好友关系用字典表示,键为用户名称,值为该用户的好友集合。现在需要找出哪些用户是所有用户的共同好友。

# 好友关系表
friendships = {
    'Alice': {'Bob', 'Charlie', 'David'},
    'Bob': {'Alice', 'Charlie'},
    'Charlie': {'Alice', 'Bob', 'David'},
    'David': {'Alice', 'Charlie'}
}
# 好友关系表
friendships = {
    'Alice': {'Bob', 'Charlie', 'David'},
    'Bob': {'Alice', 'Charlie'},
    'Charlie': {'Alice', 'Bob', 'David'},
    'David': {'Alice', 'Charlie'}
}
#将用户加入到好友集合中
for user, friends in friendships.items():
    updated_friendships = {user: friends.union({user})}
#将所有好友集合加入到列表中
all_friend_sets = list(updated_friendships.values())
#求交集
if all_friend_sets:
    common_friends = set.intersection(*all_friend_sets)
else:
    common_friends = set()
print("所有用户的共同好友是:", common_friends)

(18)在线游戏玩家组队匹配python

在线游戏中有多个玩家,每个玩家有不同的游戏角色和技能等级,用字典表示,键为玩家名,值为角色和技能等级的字典。现在要根据玩家的角色和技能等级进行组队匹配,使每个队伍的综合实力尽量均衡。

# 玩家数据
players = {
    'Player1': {'Warrior': 80, 'Mage': 20},
    'Player2': {'Warrior': 30, 'Mage': 70},
    'Player3': {'Warrior': 60, 'Mage': 40},
    'Player4': {'Warrior': 40, 'Mage': 60}
}
# 玩家数据
players = {
    'Player1': {'Warrior': 80, 'Mage': 20},
    'Player2': {'Warrior': 30, 'Mage': 70},
    'Player3': {'Warrior': 60, 'Mage': 40},
    'Player4': {'Warrior': 40, 'Mage': 60}
}

# 初始化一个空字典,用于存储每个玩家的综合实力
player_strength = {}

# 遍历玩家数据字典
for player, roles in players.items():
    strength = 0
    for role_strength in roles.values():
        strength = strength + role_strength
    player_strength[player] = strength

# 根据综合实力对玩家进行排序,得到一个元组列表,每个元组包含玩家名字和综合实力
# 使用 sorted 函数,key 参数指定按照元组的第二个元素(综合实力)进行排序
# reverse=True 表示降序排序
sorted_players = sorted(player_strength.items(), key=lambda x: x[1], reverse=True)

num_teams = 2
teams = []
for _ in range(num_teams):
    teams.append([])

# 交替组队,遍历排序后的玩家列表
for i, (player, _) in enumerate(sorted_players):
    # 计算当前玩家应该加入的队伍索引,通过取模运算实现交替
    team_index = i % num_teams
    # 将当前玩家添加到对应的队伍中
    teams[team_index].append(player)

# 输出组队结果
for i, team in enumerate(teams):
    # 格式化输出队伍编号和队伍中的玩家
    team_number = i + 1
    print(f"队伍 {team_number}: {team}")

(19)餐厅菜品搭配分析

餐厅有多个菜品分类,每个分类有不同的菜品,用字典表示,键为分类名,值为菜品集合。现在要找出所有可能的菜品搭配,每个搭配包含主菜、配菜和饮品。

# 菜品分类信息
menu_categories = {
    '主菜': {'牛排', '披萨', '寿司'},
    '配菜': {'薯条', '沙拉', '烤蔬菜'},
    '饮品': {'可乐', '咖啡', '果汁'}
}
import itertools
# 菜品分类信息
menu_categories = {
    '主菜': {'牛排', '披萨', '寿司'},
    '配菜': {'薯条', '沙拉', '烤蔬菜'},
    '饮品': {'可乐', '咖啡', '果汁'}
}
#获取主菜、配菜、饮品
main_courses = menu_categories['主菜']
side_dishes = menu_categories['配菜']
drinks = menu_categories['饮品']
#生成所有可能的搭配
combinations = list(itertools.product(main_courses, side_dishes, drinks))
#输出所有可能的搭配
for combination in combinations:
    print(f"主菜:{combination[0]},配菜:{combination[1]},饮品:{combination[2]}")

(20)科研项目人员分配优化【录制讲解】

**视频链接:**录制文件:https://meeting.tencent.com/crm/KmvyejJbe1

有多个科研项目,每个项目需要不同技能的人员,用字典表示,键为项目名,值为所需技能集合。同时有多个研究人员,每个人员具备的技能也用集合表示。现在要为每个项目分配合适的人员,使每个项目尽量满足所需技能。

# 项目及技能需求
projects = {
    'ProjectA': {'Python', '数据分析', '机器学习'},
    'ProjectB': {'Java', '数据库管理', '算法设计'},
    'ProjectC': {'C++', '图像处理', '计算机视觉'}
}
# 人员及具备技能
researchers = {
    'Researcher1': {'Python', '数据分析'},
    'Researcher2': {'Java', '数据库管理'},
    'Researcher3': {'C++', '图像处理'},
    'Researcher4': {'机器学习', '算法设计', '计算机视觉'}
}
# 项目及技能需求
projects = {
    'ProjectA': {'Python', '数据分析', '机器学习'},
    'ProjectB': {'Java', '数据库管理', '算法设计'},
    'ProjectC': {'C++', '图像处理', '计算机视觉'}
}
# 人员及具备技能
researchers = {
    'Researcher1': {'Python', '数据分析'},
    'Researcher2': {'Java', '数据库管理'},
    'Researcher3': {'C++', '图像处理'},
    'Researcher4': {'机器学习', '算法设计', '计算机视觉'}
}
project_assigment = {}
#遍历每一个项目
for project, skills_needed in projects.items():
    best_researcher = None
    max_skills_matched = 0
    #遍历每个研究人员
    for researcher, skills_possessed in researchers.items():
        #计算满足技能的数量
        skills_matched = len(skills_needed.intersection(skills_possessed))
        #更新最佳人员
        if skills_matched > max_skills_matched:
            max_skills_matched = skills_matched
            best_researcher = researcher
    #分配人员
    project_assigment[project] = best_researcher
#输出
for project, researcher in project_assigment.items():
    print(f"{project} 分配给 {researcher}")
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值