【头歌-Python】Python第七章作业(初级)

第1关:字符串去重排序

任务描述

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

输入格式

一个非空字符串

输出格式

去重排序后的字符串

示例

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

参考代码

print(''.join(sorted(set(input()))))

第2关:列表去重

任务描述

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

输入格式

一系列以逗号分隔的英文人名

输出格式

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

示例 1

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

参考代码

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

第3关:猜年龄

任务描述

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

输入格式

该题目没有输入

输出格式

一个正整数(维纳当年的年龄)

示例

  • 输出:
9

参考代码

age1 = 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
    res = set(str(num1)+str(num2))
    if len(res) == 10:
        print(i)

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

任务描述

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

add name:             # 在集合中加入元素name
print:                # 将集合转为列表,按元素升序排序后输出列表
del name:             # 删除集合中的元素name,当name不存在时,不能引发错误
update name:          # name为空格逗号分隔的字符串,将其转为集合,并用name中的元素修改集合MySet
clear:                # 清空集合

输入格式

第一行输入一个正整数 n

输出格式

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

示例

  • 输入:
8
湖北 湖南 吉林
print
del 湖北
print
clear
add 江西
add 河北
update 北京 上海 天津 重庆
print
  • 输出:
['吉林', '湖北', '湖南']
['吉林', '湖南']
['上海', '北京', '天津', '江西', '河北', '重庆']

参考代码

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

第5关:集合介绍

任务描述

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

例如:

print(set())
# 产生空集合 set()
print(set('Hello Python'))
# 字符串转集合,去掉重复字符 {'t', 'h', 'P', 'H', 'l', 'e', 'y', 'o', ' ', 'n'}
print(set((1, 2, 3, 4, 5, 5)))
# 元组转集合,去掉重复元素 {1, 2, 3, 4, 5}
print(set(set(['H', 'e', 'l', 'l', 'o', ' ', 'P', 'y', 't', 'h', 'o', 'n'])))
#  列表转集合,去掉重复元素{'t', 'h', 'P', 'H', 'l', 'e', 'y', 'o', ' ', 'n'}
print(set([1, 2, 1, 2, 3, 4, 5, 6, 0, 9, 12, 22, 3]))
# 列表转集合,去掉重复元素 {0, 1, 2, 3, 4, 5, 6, 9, 12, 22}
print(set({'University': 'WHUTI', 'Rank': 40}))
# 字典转集合,返回字典的键(字典的键唯一),不确定顺序 {'Rank', 'University'}
print(set(enumerate(['H', 'e', 'l', 'l', 'o', ' ', 'P', 'y', 't', 'h', 'o', 'n'])))
# {(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):
    Set = set(array)
    return sum(Set)/len(Set)
    
if __name__ == '__main__':
    arr = list(map(int, input().split()))
    result = average(arr)
    print(result)

第6关:手机销售统计

任务描述

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

1.输入’1’时,以列表形式在两行中分别输出2019年和2018年上榜品牌
2.输入’2’时,以列表形式输出2019年和2018年都上榜的品牌
3.输入’3’时,以列表形式输出2019年和2018年上榜的所有品牌
4.输入’4’时,以列表形式输出2019年新上榜品牌
5.输入’5’时,以列表形式输出2019年新上榜和落榜品牌

读取文件可参考代码:

with open('sale2019.csv', 'r', encoding='utf-8') as data2019: 
    sale2019 = [[line.strip().split(',')[0], float(line.strip().split(',')[1])] for line in data2019]

示例

  • 输入:
5
  • 输出:
['中兴', '联想', '金立']

参考代码

with open('/data/bigfiles/sale2019.csv', 'r', encoding='utf-8') as data2019: 
    sale2019 = set([line.strip().split(',')[0] for line in data2019])
with open('/data/bigfiles/sale2018.csv', 'r', encoding='utf-8') as data2018: 
    sale2018 = set([line.strip().split(',')[0] for line in data2018])

n = input()
if n =='1':
    print(sorted(sale2019))
    print(sorted(sale2018))
elif n =='2':
    print(sorted(sale2018&sale2019))
elif n =='3':
    print(sorted(sale2018|sale2019))
elif n =='4':
    print(sorted(sale2019-sale2018))
elif n =='5':
    print(sorted((sale2019-sale2018)|(sale2018-sale2019)))

第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())
Set = set()
for i in range(n):
    Set.add(input())
print(len(Set))

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

任务描述

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

输入格式

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

成绩等级绩点
90-100A4.0
85-89A-3.7
82-84B+3.3
78-81B3.0
75-77B-2.7
72-74C+2.3
68-71C2.0
64-67C-1.5
60-63D1.3
补考60D-1.0
60以下F0

输出格式

根据年龄排序的列表
根据姓名排序的列表

示例 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())
res = []
for i in range(n):
    data = input().split()
    res.append({'name':data[0], 'age':int(data[1])})
print(sorted(res, key = lambda x:x['age']))
print(sorted(res, key = lambda x:x['name']))

第9关:绩点计算

任务描述

平均绩点计算方法:

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

用户循环输入五分制成绩和课程学分,题目测试数据保证至少有一组或以上合法数据输入。输入‘-1’时结束输入,计算学生平均绩点。等级与绩点对应关系如下表:

输入格式

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

输出格式

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

示例

  • 输入:
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}
score = num = 0
while 1:
    n = input()
    if n != '-1':
        sco = int(input())
        score = score + dic[n]*sco
        num = num + sco
    else:
        print(f'{score/num:.2f}')
        break

第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', '文法']}

参考代码

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

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

print(dic)
menu()
n = input()
if n == '3':
    name = input()
    if name in dic:
        dic[name] = [input(), input()]
        print('Success')
    else:
        print('No Record')
    print(dic)
else:
    print('ERROR')

第11关:字典增加元素

任务描述

现有字典:

dict1 = {'赵小明': '13299887777', '特明朗': '814666888', '普希京': '522888666', '吴小京': '13999887777'}

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

输入格式

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

输出格式

参考输入输出示例

示例 1

  • 输入:
普希京
8589995566
  • 输出:
您输入的姓名在通讯录中已存在

示例 2

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

参考代码

dic = {'赵小明': '13299887777', '特明朗': '814666888', '普希京': '522888666', '吴小京': '13999887777'}
name = input()
num = input()
if name not in dic:
    dic[name] = num
    for k,v in dic.items():
        print(f'{k}:{v}')
else:
    print('您输入的姓名在通讯录中已存在')

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

任务描述

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

add name number: # 在字典中加入以name为键、以number为值的元素
print: # 输出字典
del name: # 删除字典中以name为键的元素,当name不存在时,输出’键不存在’
update name number: # 更新字典中以name为键的元素的值为number
value: # 以列表形式输出字典中的所有值
key: # 以列表形式输出字典中所有键
clear: # 清空字典

输入

第一行输入一个正整数 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())
dic = dict(zip(input().split(','), input().split(',')))
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] in ['add', 'update']:
        dic[order[1]] = order[2]
    elif order[0] == 'del' :
        if order[1] in dic:
            del dic[order[1]]
        else:
            print('键不存在')

第13关:查询省会

任务描述

有诗云:
两湖两广两河山,五江云贵福吉安,四西二宁青甘陕,还有内台北上天。
中国各省、直辖市、自治区和特别行政区的字典数据如下:

capitals = {'湖南':'长沙','湖北':'武汉','广东':'广州','广西':'南宁','河北':'石家庄','河南':'郑州','山东':'济南','山西':'太原','江苏':'南京','浙江':'杭州','江西':'南昌','黑龙江':'哈尔滨','新疆':'乌鲁木齐','云南':'昆明','贵州':'贵阳','福建':'福州','吉林':'长春','安徽':'合肥','四川':'成都','西藏':'拉萨','宁夏':'银川','辽宁':'沈阳','青海':'西宁','海南':'海口','甘肃':'兰州','陕西':'西安','内蒙古':'呼和浩特','台湾':'台北','北京':'北京','上海':'上海','天津':'天津','重庆':'重庆','香港':'香港','澳门':'澳门'}`

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

输入格式

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

输出格式

输出对应的省会名称

示例 1

  • 输入:
新疆
北京
  • 输出:
乌鲁木齐
北京

参考代码

capitals = {'湖南':'长沙','湖北':'武汉','广东':'广州','广西':'南宁','河北':'石家庄','河南':'郑州','山东':'济南','山西':'太原','江苏':'南京','浙江':'杭州','江西':'南昌','黑龙江':'哈尔滨','新疆':'乌鲁木齐','云南':'昆明','贵州':'贵阳','福建':'福州','吉林':'长春','安徽':'合肥','四川':'成都','西藏':'拉萨','宁夏':'银川','辽宁':'沈阳','青海':'西宁','海南':'海口','甘肃':'兰州','陕西':'西安','内蒙古':'呼和浩特','台湾':'台北','北京':'北京','上海':'上海','天津':'天津','重庆':'重庆','香港':'香港','澳门':'澳门'}

ls1, ls2 = [], []
while 1:
    city = input()
    if len(city) == 0:
        break
    else:
        ls1.append(city)
for c in ls1:
    if c in capitals:
        ls2.append(capitals[c])
    else:
        print('输入错误')
print('\n'.join(ls2))

第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 get_dic(filename):
    dic = {}
    with open('/data/bigfiles/dicts.txt', 'r', encoding='utf-8') as f:
        for x in f.readlines():
            x = x.replace('生存,', '生存 ').strip().split(maxsplit=1)
            dic[x[0]] = x[1]
    return dic
 
def get_list(sentence):
    sentence = sentence.replace("n't", ' not').replace("'s", ' is')
    for x in string.punctuation:
        sentence = sentence.replace(x, ' ')
    return sentence.split()
 
def judge(ls, dic):
    for word in ls:
        word = word.lower()
        print(word, dic.get(word, '自己猜'))
 
if __name__ == '__main__':
    sent = input()
    filename = 'dicts.txt'
    dic = get_dic(filename)
    ls = get_list(sent)

第15关:通讯录(添加)

任务描述

模拟通讯录的数据添加功能。

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

要求编写程序
首先输出字典原始数据,再调用menu函数输出用户选择界面,接下来读用户输入:
(1) 输入‘1’ 进行添加学生,输入姓名,如果该姓名已存在,则输出“Fail”的提示信息,如果不存在,继续输入电话和所在学院。添加完毕后输出“Success”提示信息。
无论是否添加成功,结束后需要输出操作后的字典数据。
(2) 如果输入其他选项,无需再读姓名,直接输出“ERROR”。

输入格式

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', '材料']}

参考代码

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

def menu():
    print('''\n欢迎使用PYTHON学生通讯录
1:添加学生
2:删除学生
3:修改学生信息
4:搜索学生
5:显示全部学生信息
6:退出并保存''')
 
print(dic)
menu()
num = int(input())
if num == 1:
    name = input()
    if name in dic:
        print("Fail")
    else:
        dic[name] = [input(), input()]
        print('Success')
    print(dic)
else:
    print("ERROR")

文章出处登录后可见!

已经登录?立即刷新

共计人评分,平均

到目前为止还没有投票!成为第一位评论此文章。

(0)
扎眼的阳光的头像扎眼的阳光普通用户
上一篇 2023年11月2日
下一篇 2023年11月2日

相关推荐