第七章集合与字典作业

目录

1.字符串去重排序

2.列表去重

第3关 猜年龄

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

 第5关 集合介绍 

第6关 手机销售统计

第7关 集合添加元素

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

第9关 绩点计算

 第10关 通讯录(MOD)

扫描二维码关注公众号,回复: 15186075 查看本文章

 第11关 字典增加元素

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

第13关 查询省会

第14关 英汉词典

第15关 通讯录(添加)


1.字符串去重排序

任务描述

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

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

2.列表去重

任务描述

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

输入: Calvin,bob,ada,McCord,Smith,Babbs,Calvin,Smith

输出: ['Calvin', 'bob', 'ada', 'McCord', 'Smith', 'Babbs']

开始你的任务吧,祝你成功!

n = input().split(',')
a = []
[a.append(i) for i in n if i not in a]
print(a)

第3关 猜年龄

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

dig = (1, 2, 3, 4, 5, 6, 7, 8, 9, 0)
age1 = 0
age2 = 0
while age1 **3 < 10000:
    age1  += 1
while True:
    b = age2**4
    if b >= 100000 and b < 1000000:
        break
    age2 += 1

for i in range(age2,age1):
    num1 = i**3
    num2 = i**4
    set1 = set()
    for j in str(num1):
        set1.add(j)
    for k in str(num2):
        set1.add(k)
    if len(set1) == len(dig):
        print(i)

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

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

  1. add name: # 在集合中加入元素name
  2. print: # 将集合转为列表,按元素升序排序后输出列表
  3. del name: # 删除集合中的元素name,当name不存在时,不能引发错误
  4. update name: # name为空格逗号分隔的字符串,将其转为集合,并用name中的元素修改集合MySet
  5. clear: # 清空集合
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()

 第5关 集合介绍 

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

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

def average(array):
    # 你的代码写在这里
    return sum(set(array))/len(set(array))
    
if __name__ == '__main__':
    arr = list(map(int, input().split()))
    result = average(arr)
    print(result)

第6关 手机销售统计

文件中包含有2018和2019手机销售榜单数据(市场份额百分数),请根据要求升序输出分析结果:

1.输入'1'时,以列表形式在两行中分别输出2019年和2018年上榜品牌

2.输入'2'时,以列表形式输出2019年和2018年都上榜的品牌

3.输入'3'时,以列表形式输出2019年和2018年上榜的所有品牌

4.输入'4'时,以列表形式输出2019年新上榜品牌

5.输入'5'时,以列表形式输出2019年新上榜和落榜品牌

with open('/data/bigfiles/sale2019.csv', 'r', encoding='utf-8') as data2019: 
    sale2019 = [line.strip().split(',')[0] for line in data2019]
with open('/data/bigfiles/sale2018.csv', 'r', encoding='utf-8') as data2018: 
    sale2018 = [line.strip().split(',')[0] for line in data2018]
n = input()
if n =='1':
    print(sorted(sale2019))
    print(sorted(sale2018))
if n =='2':
    print(sorted([x for x in sale2019 if x in sale2018]))
if n =='3':
    print(sorted(sale2019 + [x for x in sale2018 if x not in sale2019]))
if n =='4':
    print(sorted([x for x in sale2019 if x not in sale2018]))
if n =='5':
    print(sorted([x for x in (sale2019 + sale2018) if x not in[x for x in sale2019 if x in sale2018]]))

第7关 集合添加元素

n = int(input())
lis = []
for i in range(n):
    a = input()
    lis.append(a)
print(len(set(lis)))

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

输入: 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())
list = []
for i in range(n):
    dic = {}
    name_age = input().split()
    dic.update({'name':name_age[0], 'age':int(name_age[1])})
    list.append(dic)
print(sorted(list,key = lambda x : x['age']))
print(sorted(list,key = lambda x : x['name']))

第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
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}
s = 0
n = 0
while True:
    a = input()

    if a != '-1':
        b = int(input())
        s += dic[a] * b
        n += b
    else:
        print(f'{s/n:.2f}')
        break

 第10关 通讯录(MOD)

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

  1. def menu():
  2. print('''\n欢迎使用PYTHON学生通讯录
  3. 1:添加学生
  4. 2:删除学生
  5. 3:修改学生信息
  6. 4:搜索学生
  7. 5:显示全部学生信息
  8. 6:退出并保存''')
  9. dic={'张自强': ['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. dict1 = {'赵小明': '13299887777', '特明朗': '814666888', '普希京': '522888666', '吴小京': '13999887777'}

尝试向其中加入一个键值对,键和值在两行里输入,如果输入的键在字典中已经存在,则输出“您输入的姓名在通讯录中已存在”,如输入的键在字典中不存在则把键和值加入到字典中。操作完成后输出字典中所有键值对。

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关 字典的属性、方法与应用

将用户输入用逗号分隔的一系列人名做为键,用户输入的逗号分隔的手机号做为值,创建字典MyDict,输入一个正整数 n,你将被要求读入 n 个输入(输入形式如下所示),每得到一个输入后,根据输入进行操作。

  1. add name number: # 在字典中加入以name为键、以number为值的元素
  2. print: # 输出字典
  3. del name: # 删除字典中以name为键的元素,当name不存在时,输出'键不存在'
  4. update name number: # 更新字典中以name为键的元素的值为number
  5. value: # 以列表形式输出字典中的所有值
  6. key: # 以列表形式输出字典中所有键
  7. clear: # 清空字典
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 = {'湖南':'长沙','湖北':'武汉','广东':'广州','广西':'南宁','河北':'石家庄','河南':'郑州','山东':'济南','山西':'太原','江苏':'南京','浙江':'杭州','江西':'南昌','黑龙江':'哈尔滨','新疆':'乌鲁木齐','云南':'昆明','贵州':'贵阳','福建':'福州','吉林':'长春','安徽':'合肥','四川':'成都','西藏':'拉萨','宁夏':'银川','辽宁':'沈阳','青海':'西宁','海南':'海口','甘肃':'兰州','陕西':'西安','内蒙古':'呼和浩特','台湾':'台北','北京':'北京','上海':'上海','天津':'天津','重庆':'重庆','香港':'香港','澳门':'澳门'}`

设计程序,接收用户输入的省、直辖市、自治区和特别行政区名称,输出对应的省会名称,当输入错误时输出“输入错误”。程序可以重复接收用户输入,直接输入回车时退出程序。

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. def menu():
  2. print('''\n欢迎使用PYTHON学生通讯录
  3. 1:添加学生
  4. 2:删除学生
  5. 3:修改学生信息
  6. 4:搜索学生
  7. 5:显示全部学生信息
  8. 6:退出并保存''')
  9. dic={'张自强': ['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 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()

猜你喜欢

转载自blog.csdn.net/m0_70456205/article/details/130494817