python头歌第七章集合与字典作业

目录

 第1关:字符串去重排序

第2关:列表去重

第3关:猜年龄

第4关:集合的属性、方法与运算

第5关:集合介绍

第6关:手机销售统计

第7关:集合添加元素

第8关:列表嵌套字典的排序

第9关:绩点计算

第10关:通讯录(MOD)


 第1关:字符串去重排序

任务描述 输入一个非空字符串,去除重复的字符后,从小到大排序输出为一个新字符串。 输入格式 一个非空字符串 输出格式 去重排序后的字符串 示例 输入:
Life is short, you need Python!
输出:
!,LPdefhinorstuy

ls = list(set(input()))
ls.sort()
print(''.join(ls))

第2关:列表去重

一系列以逗号分隔的英文人名,其中包含重复的名字,请将其中重复的名字去掉,输出包含不重复人名的列表,名字出现顺序与输入顺序相同。 输入格式 一系列以逗号分隔的英文人名 输出格式 包含不重复人名的列表,名字出现顺序与输入顺序相同 示例 1 输入:
Calvin,bob,ada,McCord,Smith,Babbs,Calvin,Smith
输出:
['Calvin', 'bob', 'ada', 'McCord', 'Smith', 'Babbs'] 开始你的任务吧,祝你成功!

list = input()
names = list.split(',')
unique_names = []
for name in names:
    name = name.strip()
    if name not in unique_names:
        unique_names.append(name)
print(unique_names)

第3关:猜年龄

任务描述 美国数学家维纳(N.Wiener)智力早熟,11岁就上了大学。他曾在1935~1936年应邀来中国清华大学讲学。一次,他参加某个重要会议,年轻的脸孔引人注目。于是有人询问他的年龄,他回答说:“我年龄的立方是个4位数。我年龄的4次方是个6位数。这10个数字正好包含了从0到9这10个数字,每个都恰好出现1次。” 请编程输出当年维纳的年龄。 输入格式 该题目没有输入 输出格式 一个正整数(维纳当年的年龄) 示例 输出:
9

def check_age():
    for age in range(18, 22):
        cube = age ** 3
        fourth_power = age ** 4
        combined_str = str(cube) + str(fourth_power)
        if len(combined_str) == 10 and len(set(combined_str)) == 10:
            return age
    return None
wiener_age = check_age()
print(f"{wiener_age}")

第4关:集合的属性、方法与运算

任务描述 将用户输入用空格分隔的一系列地名创建集合MySet,输入一个正整数 n,你将被要求读入 n 个输入(输入形式如下所示),每得到一个输入后,根据输入进行操作。 1. add name:             # 在集合中加入元素name 2. print:                # 将集合转为列表,按元素升序排序后输出列表 3. del name:             # 删除集合中的元素name,当name不存在时,不能引发错误 4. update name:          # name为空格逗号分隔的字符串,将其转为集合,并用name中的元素修改集合MySet 5. clear:                # 清空集合   输入格式 第一行输入一个正整数 n 输出格式 每遇到“print”时,将集合转为列表,按元素升序排序后输出列表 示例 输入:
8
湖北 湖南 吉林
print
del 湖北
print
clear
add 江西
add 河北
update 北京 上海 天津 重庆
print 输出:
['吉林', '湖北', '湖南']
['吉林', '湖南']
['上海', '北京', '天津', '江西', '河北', '重庆']  开始你的任务吧,祝你成功!

n = int(input())
dic = set(input().split())
for i in range(n):
    ins = input().split()
    if ins[0] == 'add':
        dic.add(ins[1])
    elif ins[0] == 'del':
        dic.discard(ins[1])
    elif ins[0] == 'print':
        print(sorted(list(dic)))
    elif ins[0] == 'update':
        dic.update(ins[1:])
    elif ins[0] == 'clear':
        dic.clear()

第5关:集合介绍

任务描述 集合是一个无序的、没有重复元素的数据类型,在输出或转为序列类型时,其元素位置随机出现。 例如: 1. print(set()) 2. # 产生空集合 set() 3.  4. print(set('Hello Python')) 5. # 字符串转集合,去掉重复字符 {'t', 'h', 'P', 'H', 'l', 'e', 'y', 'o', ' ', 'n'} 6.  7. print(set((1, 2, 3, 4, 5, 5))) 8. # 元组转集合,去掉重复元素 {1, 2, 3, 4, 5} 9.  10. print(set(set(['H', 'e', 'l', 'l', 'o', ' ', 'P', 'y', 't', 'h', 'o', 'n']))) 11. #  列表转集合,去掉重复元素{'t', 'h', 'P', 'H', 'l', 'e', 'y', 'o', ' ', 'n'} 12.  13. print(set([1, 2, 1, 2, 3, 4, 5, 6, 0, 9, 12, 22, 3])) 14. # 列表转集合,去掉重复元素 {0, 1, 2, 3, 4, 5, 6, 9, 12, 22} 15.  16. print(set({'University': 'WHUTI', 'Rank': 40})) 17. # 字典转集合,返回字典的键(字典的键唯一),不确定顺序 {'Rank', 'University'} 18.  19. print(set(enumerate(['H', 'e', 'l', 'l', 'o', ' ', 'P', 'y', 't', 'h', 'o', 'n']))) 20. # {(8, 't'), (2, 'l'), (7, 'y'), (3, 'l'), (4, 'o'), (5, ' '), (6, 'P'), (9, 'h'), (11, 'n'), (0, 'H'), (1, 'e'), (10, 'o')}   李白是一个社区大学的老师,一天,他让学生小明计算一下温室里植物的平均高度。 平均高度 = 不同高度的和 / 不同高度的数量 输入格式 输入N
个用空格分隔的植物的高度 输出格式 在一行内输出植物的平均高度,保留小数点后3位 示例 输入:
 161 182 161 154 176 170 167 171 170 174
输出:
 169.375   开始你的任务吧,祝你成功!

def average(array):
    # 你的代码写在这里
    a = set(array)
    return sum(a)/len(a)

if __name__ == '__main__':
    arr = list(map(int, input().split()))
    result = average(arr)
    print(result)

第6关:手机销售统计

读取目录为:
 step7/sale2018.csv
 step7/sale2019.csv
文件中包含有2018和2019手机销售榜单数据(市场份额百分数),请根据要求升序输出分析结果: 1.输入'1'时,以列表形式在两行中分别输出2019年和2018年上榜品牌 2.输入'2'时,以列表形式输出2019年和2018年都上榜的品牌 3.输入'3'时,以列表形式输出2019年和2018年上榜的所有品牌 4.输入'4'时,以列表形式输出2019年新上榜品牌 5.输入'5'时,以列表形式输出2019年新上榜和落榜品牌 读取文件可参考代码: 1. with open('sale2019.csv', 'r', encoding='utf-8') as data2019:  2.     sale2019 = [[line.strip().split(',')[0], float(line.strip().split(',')[1])] for line in data2019]   示例 输入:
5 输出:
['中兴', '联想', '金立']  开始你的任务吧,祝你成功!

with open('step7/sale2019.csv','r',encoding='utf-8') as data2019:
    sale2019 = [[line.strip().split(',')[0],float(line.strip().split(',')[1])] for line in data2019]
with open('step7/sale2018.csv','r',encoding='utf-8') as data2018:
    sale2018 = [[line.strip().split(',')[0],float(line.strip().split(',')[1])] for line in data2018]
# 以上代码读取文件,不要修改。
saleSet2019 = { x[0] for x in sale2019}
saleSet2018 = { x[0] for x in sale2018}
n = input()
if n == '1':
    print(sorted(saleSet2019))
    print(sorted(saleSet2018))
elif n == '2':
    s2018and2019 = saleSet2019 & saleSet2018
    print(sorted(s2018and2019))
elif n == '3':
    s20182019all = saleSet2019 | saleSet2018
    print(sorted(s20182019all))
elif n =='4':
    s2019new = saleSet2019 - saleSet2018
    print(sorted(s2019new))
elif n == '5':
    newAndold = saleSet2019 ^ saleSet2018
    print(sorted(newAndold))

第7关:集合添加元素

任务描述

向集合中加入单一元素,可以使用.add() 方法操作,该 操作将向集合中加入,返回值为“None”

例如:

    s = set('Wuhan')
    print(s)              # {'n', 'a', 'W', 'u', 'h'}
    s.add('A')            # 向集合中增加一个元素
    print(s)              # {'n', 'a', 'A', 'W', 'u', 'h'}
    print(s.add('Hubei')) # 本方法返回值为 None
    print(s)              # {'n', 'a', 'A', 'W', 'u', 'Hubei', 'h'}

应用你的知识帮助你的好朋友小明,小明喜欢集邮,他有大量的来自不同国家的邮票,他决定数一下他的集邮册中共有来自多少个不同国家的邮票,他请你帮忙,你一个一个的把N张邮票拿出来,找出共有多少个不重复的国家。
输入格式

第一行输入一个整数N,表示所有邮票的数目
接下来的N行,每行输入一张邮票来自哪一个国家的名字
输出格式

在一行中输出不重复的国家的数量
示例

输入:
7
UK
China
USA
France
New Zealand
UK
France

输出:
5

n = int(input())
s = set()
for i in range(n):
    a = input()
    s.add(a)
print(len(s))

第8关:列表嵌套字典的排序

任务描述

第一行输入一个正整数 N,随后的N 行各输入一个人的姓名和年龄,中间用空格分隔(形如 “Tom 18” ),将字符串转为形如 {"name":"Tom","age":18} 的字典,按顺序加入到列表中,得到一个元素为字典的列表,分别根据年龄和姓名对其排序输出。
输入格式

第一行输入一个正整数 N
随后的N 行各输入一个形如 “Tom  18” 的字符串
输出格式

根据年龄排序的列表
根据姓名排序的列表
示例 1

输入:
4
Tom 18
Jerry 47
Cat 20
Doge 33    

输出:
[{'name': 'Tom', 'age': 18}, {'name': 'Cat', 'age': 20}, {'name': 'Doge', 'age': 33}, {'name': 'Jerry', 'age': 47}]
[{'name': 'Cat', 'age': 20}, {'name': 'Doge', 'age': 33}, {'name': 'Jerry', 'age': 47}, {'name': 'Tom', 'age': 18}]

n = int(input())
s = []
for i in range(n):
    line = input()
    name,age = line.split()
    age = int(age)
    s.append({"name":name,"age":age})
one = sorted(s,key = lambda x:x["age"])
two = sorted(s,key = lambda x:x["name"])
print(one)
print(two)

第9关:绩点计算

任务描述

平均绩点计算方法:

    (课程学分1*绩点+课程学分2*绩点+......+课程学分n*绩点)/(课程学分1+课程学分2+......+课程学分n)

用户循环输入五分制成绩和课程学分,题目测试数据保证至少有一组或以上合法数据输入。输入‘-1’时结束输入,计算学生平均绩点。等级与绩点对应关系如下表:
成绩     等级     绩点
90-100     A     4.0
85-89     A-     3.7
82-84     B+     3.3
78-81     B     3.0
75-77     B-     2.7
72-74     C+     2.3
68-71     C     2.0
64-67     C-     1.5
60-63     D     1.3
补考60     D-     1.0
60以下     F     0
输入格式

每组输入包括两行
第一行是五分制的分数
第二行是一个代表学分的数字
输出格式

平均绩点,严格保留两位小数
示例

输入:
A
3
B
3
A
2
-1
输出:
3.62

# 定义成绩与绩点的对应关系
grade_to_gpa = {
    'A': 4.0,
    'A-': 3.7,
    'B+': 3.3,
    'B': 3.0,
    'B-': 2.7,
    'C+': 2.3,
    'C': 2.0,
    'C-': 1.5,
    'D': 1.3,
    'D-': 1.0,
    'F': 0.0
}

# 初始化总学分和总绩点
total_credits = 0
total_gpa = 0

# 循环输入成绩和学分
while True:
    grade = input("")
    if grade == '-1':
        break
    credits = int(input(""))
    
    # 计算绩点
    gpa = grade_to_gpa[grade]
    total_gpa += gpa * credits
    total_credits += credits

# 计算平均绩点
average_gpa = total_gpa / total_credits

# 输出平均绩点,保留两位小数
print(f"{average_gpa:.2f}")

第10关:通讯录(MOD)

任务描述

模拟通讯录的数据修改功能。

    def menu():
        print('''\n欢迎使用PYTHON学生通讯录
    1:添加学生
    2:删除学生
    3:修改学生信息
    4:搜索学生
    5:显示全部学生信息
    6:退出并保存''')
    dic={'张自强': ['12652141777', '材料'], '庚同硕': ['14388240417', '自动化'], '王岩': ['11277291473', '文法']}

要求编写程序
输出字典原始数据,再调用menu函数输出用户选择界面
(1)输入‘3’ 进行修改学生信息,输入姓名,如果该姓名已存在,则继续输入电话,学院信息,并输出“Success”的提示信息,如果不存在,给出“No Record”提示信息。
无论是否修改成功,结束后需要输出操作后的字典数据。
(2)如果输入其他选项,无需读入姓名,直接输出“ERROR”。
输入格式

3 庚同硕 123456789 法学
输出格式

{'张自强': ['12652141777', '材料'], '庚同硕': ['14388240417', '自动化'], '王岩': ['11277291473', '文法']}

欢迎使用PYTHON学生通讯录 1:添加学生 2:删除学生 3:修改学生信息 4:搜索学生 5:显示全部学生信息 6:退出并保存 3 庚同硕 123456789 法学 Success {'张自强': ['12652141777', '材料'], '庚同硕': ['123456789', '法学'], '王岩': ['11277291473', '文法']}
示例 1

输入:
3
庚同硕
123456789
法学

输出:
{'张自强': ['12652141777', '材料'], '庚同硕': ['14388240417', '自动化'], '王岩': ['11277291473', '文法']}

欢迎使用PYTHON学生通讯录
1:添加学生
2:删除学生
3:修改学生信息
4:搜索学生
5:显示全部学生信息
6:退出并保存
#输入数据
Success
{'张自强': ['12652141777', '材料'], '庚同硕': ['123456789', '法学'], '王岩': ['11277291473', '文法']}

示例 2

输入:
3
王朔

输出:
{'张自强': ['12652141777', '材料'], '庚同硕': ['14388240417', '自动化'], '王岩': ['11277291473', '文法']}
欢迎使用PYTHON学生通讯录
1:添加学生
2:删除学生
3:修改学生信息
4:搜索学生
5:显示全部学生信息
6:退出并保存
#输入数据
No Record
{'张自强': ['12652141777', '材料'], '庚同硕': ['14388240417', '自动化'], '王岩': ['11277291473', '文法']}

def menu():
    print('''\n欢迎使用PYTHON学生通讯录
1:添加学生
2:删除学生
3:修改学生信息
4:搜索学生
5:显示全部学生信息
6:退出并保存''')

# 初始化通讯录
dic = {
    '张自强': ['12652141777', '材料'],
    '庚同硕': ['14388240417', '自动化'],
    '王岩': ['11277291473', '文法']
}

# 输出原始数据
print(dic)

# 调用菜单函数
menu()

# 读取用户选择
choice = input("")

if choice == '3':
    # 修改学生信息
    name = input()
    if name in dic:
        # 输入新的电话和学院信息
        phone = input()
        department = input()
        # 更新字典
        dic[name] = [phone, department]
        print("Success")
    else:
        print("No Record")
    # 输出操作后的字典数据
    print(dic)
else:
    # 如果输入其他选项,输出ERROR
    print("ERROR")
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值