第七章集合与字典作业

目录

1.字符串去重排序

2.列表去重

第3关 猜年龄

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

 第5关 集合介绍 

第6关 手机销售统计

第7关 集合添加元素

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

第9关 绩点计算

 第10关 通讯录(MOD)

 第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