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

目录

第一关 字符串去重排序

第二关 列表去重

第三关 猜年龄

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

第五关 集合介绍

第六关 手机销售统计

第七关 集合添加元素

第八关 列表嵌套字典的排序

第九关 绩点计算

第十关 通讯录(MOD)

第十一关 字典增加元素

第十二关 字的属性、方法与应用

第十三关 查询省会

第十四关 英汉词典

第十五关 通讯录(添加)

如果此文章对你有所帮助,麻烦点个赞,谢谢~~~

点赞加关注,追新不迷路~~~


第一关 字符串去重排序

ls = list(set(input()))  # 字符串转集合去重,再转为列表
ls.sort()                # 列表排序 
print(''.join(ls))       # 列表中的字符串元素连接为一个字符串
 


第二关 列表去重

name_list = input().split(',')  # 将输入的人名分割成列表
result = []
for name in name_list:
    if name not in result:
        result.append(name)  # 如果名字不在结果列表中,则加入
print(result)


第三关 猜年龄

for age in range(11, 23):
    age_3 = age ** 3  # 年龄的立方
    age_4 = age ** 4  # 年龄的4次方
    num_1 = age_3 // 1000  # 4位数的千位数字
    num_2 = age_3 % 1000 // 100  # 4位数的百位数字
    num_3 = age_3 % 100 // 10  # 4位数的十位数字
    num_4 = age_3 % 10  # 4位数的个位数字
    num_5 = age_4 // 100000  # 6位数的十万位数
    num_6 = age_4 % 100000 // 10000  # 6位数的万位数
    num_7 = age_4 % 10000 // 1000  # 6位数的千位数
    num_8 = age_4 % 1000 // 100  # 6位数的百位数
    num_9 = age_4 % 100 // 10  # 6位数的十位数
    num_0 = age_4 % 10  # 6位数的个位数
    if (num_1 != num_2 != num_3 != num_4 != num_5 != num_6 != num_7 != num_8 != num_9 != num_0) and (age_4 > 100000):
        print(age)
        break


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

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


第五关 集合介绍

def average(array):
    set1 = set(array)# 将重复元素删除
    num = len(set1)# 计算初数量的总数
    Sum = 0
    for i in set1:# 循环计算出总数
        Sum+=i
    return f"{(Sum / num):.3f}"
#你的代码写在这里list里面现在是整形的元素
 
 
 
if __name__ == '__main__':
    arr = list(map(int, input().split()))  # map()函数用于将列表中的每个元素都转换为整数
    result = average(arr)
    print(result)


第六关 手机销售统计

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)))


第七关 集合添加元素

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


第八关 列表嵌套字典的排序

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)


第九关 绩点计算

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}')


第十关 通讯录(MOD)

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


第十一关 字典增加元素

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('您输入的姓名在通讯录中已存在')


第十二关 字的属性、方法与应用

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('键不存在')


第十三关 查询省会

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)


第十四关 英汉词典

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)


第十五关 通讯录(添加)

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
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

萌新发文啦~

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值