湖北师范大学-Python-第七章集合与字典作业

第1关:字符串去重排序

任务描述
输入一个非空字符串,去除重复的字符后,从小到大排序输出为一个新字符串。

输入格式
一个非空字符串

输出格式
去重排序后的字符串

示例
输入:
Life is short, you need Python!
输出:
!,LPdefhinorstuy

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

第2关:列表去重

任务描述
输入一系列以逗号分隔的英文人名,其中包含重复的名字,请将其中重复的名字去掉,输出包含不重复人名的列表,名字出现顺序与输入顺序相同。

输入格式
一系列以逗号分隔的英文人名

输出格式
包含不重复人名的列表,名字出现顺序与输入顺序相同

示例 1
输入:
Calvin,bob,ada,McCord,Smith,Babbs,Calvin,Smith
输出:
['Calvin', 'bob', 'ada', 'McCord', 'Smith', 'Babbs']

lst=input().split(',')
lst1=list(set(lst))
print(sorted(lst1,key=lst.index))

第3关:猜年龄

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

输入格式
该题目没有输入

输出格式
一个正整数(维纳当年的年龄)

示例
输出:
9

for x in range(100):
    a=str(x*x*x)
    if len(a)==4:
        b=str(x*x*x*x)
        if len(b)==6:
            if len(set(a+b))==10:
                print(x)

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

任务描述
将用户输入用空格分隔的一系列地名创建集合MySet,输入一个正整数 n,你将被要求读入 n 个输入(输入形式如下所示),每得到一个输入后,根据输入进行操作。


输入格式
第一行输入一个正整数 n

输出格式
每遇到“print”时,将集合转为列表,按元素升序排序后输出列表

示例
输入:
8
湖北 湖南 吉林
print
del 湖北
print
clear
add 江西
add 河北
update 北京 上海 天津 重庆
print

输出:
['吉林', '湖北', '湖南']
['吉林', '湖南']
['上海', '北京', '天津', '江西', '河北', '重庆']

n = int(input()) # 输入一个正整数 n
name = input()  # 吉林,湖北,湖南
arr = set(name.split())
MyList = name.split()
for i in range(n):
    ls = input().split()  # 输入命令及参数,之间用空格分隔
    if ls[0] == 'print':  # 如要输入的命令是“print”,输出字典
        print(sorted(list(arr)))
    elif ls[0] == 'update':  # 如要输入的命令是“update”,更新ls[1]表示的键对应的值
        arr.update(set(ls[1:]))
    elif ls[0] == 'add':  # 如要输入的命令是“add”,增加一个键值对,题目确保输入的键在字典中不存在
        arr.add(ls[1])
    elif ls[0] == 'del':  # 如要输入的命令是“del”,删除字典中指定的键值对,键不存在时返回“键不存在”
        arr.discard(ls[1])
    elif ls[0] == 'clear':  # 如要输入的命令是“clear”,清空字典中全部元素
        arr.clear()

第5关:集合介绍

任务描述
集合是一个无序的、没有重复元素的数据类型,在输出或转为序列类型时,其元素位置随机出现。

李白是一个社区大学的老师,一天,他让学生小明计算一下温室里植物的平均高度。

平均高度 = 不同高度的和 / 不同高度的数量

输入格式
输入N
个用空格分隔的植物的高度

输出格式
在一行内输出植物的平均高度,保留小数点后3位

示例
输入:
161 182 161 154 176 170 167 171 170 174
输出:
169.375

def average(array):
    # 你的代码写在这里
    

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

第6关:手机销售统计

任务描述
sale2018.csv
sale2019.csv
读取目录为:
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年新上榜和落榜品牌

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]
 
set2019 = set([x[0] for x in sale2019])
set2018 = set([x[0] for x in sale2018])
select = input()
if select == '1':
    print(sorted(set2019),sorted(set2018),sep='\n')
elif select == '2':
    print(sorted(list(set2019&set2018)))
elif select == '3':
    print(sorted(list(set2019|set2018)))
elif select == '4':
    print(sorted(list(set2019-set2018)))
elif select == '5':
    print(sorted(list(set2019^set2018)))

第7关:集合添加元素

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

输出格式
在一行中输出不重复的国家的数量

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

输出:
5

# 接下来的N行,每行输入一张邮票来自哪一个国家的名字
N = int(input())# 输入邮票的总数
list1 = []# 输入国家的名称
for i in range(N):
    a = input()
    list1.append(a)
set1 = set(list1)
print(len(set1))

第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())# 输入人数的总数
d={}# 定义一个空的字典,用来存放人的数据
ls= []# 定义一个列表来存放数据
a = {}# 用来存放输入的数据
for i in range (n):# 通过循环来输入人的基本信息
    a[i]=input().split()   
    d["name"] = a[i][0]# 姓名
    d["age"] = int(a[i][1])# 年龄
    ls.append(d.copy())   # 将个人的数据存放进入列表中
def cmp1(a):
    return a['age'] #返回字典的年龄 
 
def cmp2(a):
    return a['name']# 返回字典的姓名
 
ls.sort(key = cmp1)# 排序的过程
print(ls)
 
ls.sort(key = cmp2)
print(ls)

第9关:绩点计算

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

输出格式
平均绩点,严格保留两位小数

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

dic={'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}
num=0
nf=0
while True:
    socre=input()
    if socre == '-1':
        break
    f=int(input())
    num+=dic.get(socre)*f
    nf+=f
print(f'{num/nf:.2f}')

第10关:通讯录(MOD)

输入格式
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', '文法']}

print({'张自强': ['12652141777', '材料'], '庚同硕': ['14388240417', '自动化'], '王岩': ['11277291473', '文法']})
print()
dict = {'张自强': ['12652141777', '材料'], '庚同硕': ['14388240417', '自动化'], '王岩': ['11277291473', '文法']}
# 学生通讯录管理系统主界面
def showMenu():
    print("欢迎使用PYTHON学生通讯录")
    print("1:添加学生")
    print("2:删除学生")
    print("3:修改学生信息")
    print("4:搜索学生")
    print("5:显示全部学生信息")
    print("6:退出并保存")
 
 
# 选择输入的功能
def getSelcet():
    selectNum = int(input())
    return selectNum
 
 
# 实现序号1:添加学生信息
def addstuInof():
    name = input()
    if len(name) ==0:
        print("ERROR")
    else:
        stu_num = input()
        zuanye = input()
        dict[name] = [stu_num,zuanye]
        print('Success')
        print(dict)
 
# 实现序号2:删除学生信息
 
def delstuInof():
    name = input()
    del dict[name]
    print('Success')
    print(dict)
 
# 实现序号3:修改学生信息
def modifystuInfo():
    name = input()
    if name in dict:
        stu_num = input()
        zuanye = input()
        dict[name] = [stu_num,zuanye]
        print('Success')
        print(dict)
    else:
        print('No Record')
        print(dict)
 
# 实现序号4:搜索学生信息
def seckstuIofo():
    name = input()
    print(dict[name])
 
 
# 实现序号5:显示全部学生信息
def showstuInfo():
    print(dict)
 
 
# 实现序号6 退出显示管理系统
def exitSystem():
    pass
 
# main主函数
def main():
    showMenu()
    num = getSelcet()
    if num == 1:
        addstuInof()
    elif num == 2:
        delstuInof()
    elif num == 3:
        modifystuInfo()
    elif num == 4:
        seckstuIofo()
    elif num == 5:
        showstuInfo()
    elif num == 6:
        exitSystem()
        print("ERROR")
 
main()

第11关:字典增加元素

输入格式
输入有两行:
第一行是要加入的姓名
第二行是电话号码

输出格式
参考输入输出示例

示例 1
输入:
普希京
8589995566

输出:
您输入的姓名在通讯录中已存在

示例 2
输入:
成龙
8508887777

输出:
赵小明:13299887777
特明朗:814666888
普希京:522888666
吴小京:13999887777
成龙:8508887777

dict1 = {'赵小明': '13299887777', '特明朗': '814666888', '普希京': '522888666', '吴小京': '13999887777'}
a = input()
b = input()
if a not in dict1:
    dict1[a] = b
    for i in dict1:
        print(i+':'+dict1[i])
else:
    print('您输入的姓名在通讯录中已存在')

第12关:字典的属性、方法与应用

输入
第一行输入一个正整数 n
第二行输入用逗号分隔的多个人名
第三行输入的逗号分隔的、与第二行相同数量的手机号
随后的 n 行,每行输入一个如示例格式的命令,命令与参数间空格分隔

输出
每遇到“print”时,在新的一行输出字典 

示例 1
输入:
8
Tom,Jack,Lee
13988776655,13855664488,13644668888
key
value
print
clear
add ethan 17700001111
add Tom 13988776655
update Tom 13000112222
print

输出:
['Tom', 'Jack', 'Lee']
['13988776655', '13855664488', '13644668888']
{'Tom': '13988776655', 'Jack': '13855664488', 'Lee': '13644668888'}
{'ethan': '17700001111', 'Tom': '13000112222'}

n = int(input())
name = input().split(',')
telnumber = input().split(',')
dic = dict(zip(name, telnumber))
for i in range(n):
    order = input().split()
    if order[0] == 'key':
        print([x for x in dic])
    elif order[0] == 'value':
        print([dic[x] for x in dic])
    elif order[0] == 'print':
        print(dic)
    elif order[0] == 'clear':
        dic.clear()
    elif order[0] == 'add':
        dic[order[1]] = order[2]
    elif order[0] == 'update':
        dic.update({order[1] : order[2]})
    elif order[0] == 'del' :
        if order[1] in dic:
            del dic[order[1]]
        else:
            print('键不存在')

第13关:查询省会

输入格式
一个或多个输入
每行输入一个省、直辖市、自治区或特别行政区名称
最后一行输入一个回车

输出格式
输出对应的省会名称

示例 1
输入:
新疆
北京

输出:
乌鲁木齐
北京

capitals = {'湖南': '长沙', '湖北': '武汉', '广东': '广州', '广西': '南宁', '河北': '石家庄', '河南': '郑州', '山东': '济南', '山西': '太原', '江苏': '南京',
            '浙江': '杭州', '江西': '南昌', '黑龙江': '哈尔滨', '新疆': '乌鲁木齐', '云南': '昆明', '贵州': '贵阳', '福建': '福州', '吉林': '长春',
            '安徽': '合肥', '四川': '成都', '西藏': '拉萨', '宁夏': '银川', '辽宁': '沈阳', '青海': '西宁', '海南': '海口', '甘肃': '兰州', '陕西': '西安',
            '内蒙古': '呼和浩特', '台湾': '台北', '北京': '北京', '上海': '上海', '天津': '天津', '重庆': '重庆', '香港': '香港', '澳门': '澳门'}
lis1 = []
lis2 = []
while True:
    city = input()
    if len(city) == 0:
        break
    else:
        lis1.append(city)
for i in lis1:
    if i in capitals:
        lis2.append(capitals[i])
    else:
        print('输入错误')
for j in lis2:
    print(j)

第14关:英汉词典

任务描述
你从武汉搬到美国生活,这里的人都讲英语,你的英语不好,好在你有一个程序,可以把英语译成中文,帮助你与人沟通。
本关所用文件及路径:'step15/dicts.txt'
下述文件仅用于本地查看文件格式,数据与本关文件不完全相同:

dicts.txt
(注意:词典文件没有精校,存在部分格式不一致的问题,处理时根据空格切分一次,只把英文和中文解释切分开。)

输入
输入一个英文句子

输出
输出英文句子中每个单词的中文意思,每行一个单词,单词字母转小写,"'s" 用 " is"替换,"n't" 用" not" 替换(替换为空格加is或not),单词与意义间用空格分隔,当查询的词在文件中不存在时,输出'自己猜'

示例 1
输入:
For others, but to live for yourself.
输出:
for 给,作...用的
others 自己猜
but 但是,除了
to 向,到
live 居住,生存 活的
for 给,作...用的
yourself 你(们)自己

import string
 
def read_to_dic(filename):
    """读文件每行根据空格切分一次,作为字典的键和值添加到字典中。
    返回一个字典类型。
    """
    my_dic = {}
    with open('/data/bigfiles/dicts.txt', 'r', encoding='utf-8') as f:
        date = f.readlines()
        for x in date:
            x = x.replace('生存,','生存 ') #之前打开数据集有点问题,在这里用代码修改了一下数据集
            x = x.strip().split(maxsplit=1)
            my_dic.update({x[0]: x[1]})
    return my_dic
 
def sentence_to_lst(sentence):
    """将句子里的's 用 is 替换,n't 用 not 替换。
    所有符号替换为空格,再根据空格切分为列表。
    返回列表。
    """
    sentence = sentence.replace("n't", ' not')
    sentence = sentence.replace("'s", ' is')
    for x in string.punctuation:
        sentence = sentence.replace(x, ' ')
    sentence_lst = sentence.split()
    return sentence_lst
 
def query_words(sentence_lst, my_dic):
    """接收列表和字典为参数,对列表中的单词进行遍历,
    将单词字母转小写,到字典中查询单词的中文意义并输出。
    若单词在字典中不存在,输出'自己猜'。
    """
    for word in sentence_lst:
        word = word.lower()
        print(word, my_dic.get(word, '自己猜'))
 
if __name__ == '__main__':
    my_str = input()
    file = 'dicts.txt'
    dic = read_to_dic(file)
    lst = sentence_to_lst(my_str)
    query_words(lst, dic)

第15关:通讯录(添加)

输入格式
1 杨彪 11002345678 材料

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

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

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

print({'张自强': ['12652141777', '材料'], '庚同硕': ['14388240417', '自动化'], '王岩': ['11277291473', '文法']})
print()
dict = {'张自强': ['12652141777', '材料'], '庚同硕': ['14388240417', '自动化'], '王岩': ['11277291473', '文法']}
# 学生通讯录管理系统主界面
def showMenu():
    print("欢迎使用PYTHON学生通讯录")
    print("1:添加学生")
    print("2:删除学生")
    print("3:修改学生信息")
    print("4:搜索学生")
    print("5:显示全部学生信息")
    print("6:退出并保存")
 
 
# 选择输入的功能
def getSelcet():
    selectNum = int(input())
    return selectNum
 
 
# 实现序号1:添加学生信息
def addstuInof():
    name = input()
    if name in dict:
        print('Fail')
        print(dict)
    else:
        stu_num = input()
        zuanye = input()
        dict[name] = [stu_num,zuanye]
        print('Success')
        print(dict)
 
# 实现序号2:删除学生信息
 
def delstuInof():
    name = input()
    if len(name) == 0:
        print("ERROR")
    else:
        del dict[name]
        print('Success')
        print(dict)
 
# 实现序号3:修改学生信息
def modifystuInfo():
    name = input()
    if name in dict:
        stu_num = input()
        zuanye = input()
        dict[name] = [stu_num,zuanye]
        print('Success')
        print(dict)
    else:
        print('No Record')
        print(dict)
 
# 实现序号4:搜索学生信息
def seckstuIofo():
    name = input()
    print(dict[name])
 
 
# 实现序号5:显示全部学生信息
def showstuInfo():
    print(dict)
 
 
# 实现序号6 退出显示管理系统
def exitSystem():
    pass
 
# main主函数
def main():
    showMenu()
    num = getSelcet()
    if num == 1:
        addstuInof()
    elif num == 2:   
        delstuInof()
    elif num == 3:
        modifystuInfo()
    elif num == 4:
        seckstuIofo()
    elif num == 5:
        showstuInfo()
    elif num == 6:
        exitSystem()
        print("ERROR")
 
main()

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值