第七章集合与字典作业(下)

第9关:绩点计算

任务描述
平均绩点计算方法:

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

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

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

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

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

# 成绩与绩点的对应关系
grade_to_gpa = {
    '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.0
}
total_gpa = 0  # 累加绩点
total_credits = 0  # 累加学分
while True:
    grade = input().strip()  # 输入成绩等级
    if grade == '-1':  # 输入 '-1' 时结束循环
        break
    credits = int(input().strip())  # 输入学分
    if grade in grade_to_gpa:  # 如果成绩有效
        gpa = grade_to_gpa[grade]  # 获取对应的绩点
        total_gpa += gpa * credits  # 加权绩点累加
        total_credits += credits  # 累加学分
# 计算平均绩点
average_gpa = total_gpa / total_credits
# 输出平均绩点,保留两位小数
print(f"{average_gpa:.2f}")

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

def menu():
    print('''\n欢迎使用PYTHON学生通讯录
1:添加学生
2:删除学生
3:修改学生信息
4:搜索学生
5:显示全部学生信息
6:退出并保存''')
# 初始数据
dic = {'张自强': ['12652141777', '材料'], '庚同硕': ['14388240417', '自动化'], '王岩': ['11277291473', '文法']}
# 打印初始字典
print(dic)
# 调用menu函数显示选项
menu()
# 处理用户输入
choice = input()
if choice == '3':
    name = input()
    if name in dic:
        phone = input()
        department = input()
        dic[name] = [phone, department]
        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

# 初始字典
dict1 = {'赵小明': '13299887777', '特明朗': '814666888', '普希京': '522888666', '吴小京': '13999887777'}
# 输入要添加的姓名和电话号码
name = input()
phone = input()
# 判断姓名是否在字典中存在
if name in dict1:
    print("您输入的姓名在通讯录中已存在")
else:
    # 如果不存在,加入字典
    dict1[name] = phone
    # 输出字典中的所有键值对
    for key, value in dict1.items():
        print(f"{key}:{value}")

第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())  # 输入操作次数
names = input().split(',')  # 读取人名并分割
numbers = input().split(',')  # 读取手机号并分割
# 创建初始字典
MyDict = {names[i]: numbers[i] for i in range(len(names))}
# 进行操作
for _ in range(n):
    command = input().split()  # 输入命令并按空格分隔
    if command[0] == 'add':
        # 添加新的键值对
        MyDict[command[1]] = command[2]
    elif command[0] == 'print':
        # 输出字典
        print(MyDict)
    elif command[0] == 'del':
        # 删除指定键
        if command[1] in MyDict:
            del MyDict[command[1]]
        else:
            print('键不存在')
    elif command[0] == 'update':
        # 更新指定键的值
        if command[1] in MyDict:
            MyDict[command[1]] = command[2]
        else:
            print('键不存在')
    elif command[0] == 'value':
        # 输出字典的所有值
        print(list(MyDict.values()))
    elif command[0] == 'key':
        # 输出字典的所有键
        print(list(MyDict.keys()))
    elif command[0] == 'clear':
        # 清空字典
        MyDict.clear()

第13关:查询省会

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

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

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

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

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

示例 1
输入:
新疆
北京

输出:
乌鲁木齐
北京

# 省会字典
capitals = {
    '湖南': '长沙', '湖北': '武汉', '广东': '广州', '广西': '南宁', '河北': '石家庄', '河南': '郑州', 
    '山东': '济南', '山西': '太原', '江苏': '南京', '浙江': '杭州', '江西': '南昌', '黑龙江': '哈尔滨', 
    '新疆': '乌鲁木齐', '云南': '昆明', '贵州': '贵阳', '福建': '福州', '吉林': '长春', '安徽': '合肥', 
    '四川': '成都', '西藏': '拉萨', '宁夏': '银川', '辽宁': '沈阳', '青海': '西宁', '海南': '海口', 
    '甘肃': '兰州', '陕西': '西安', '内蒙古': '呼和浩特', '台湾': '台北', '北京': '北京', '上海': '上海', 
    '天津': '天津', '重庆': '重庆', '香港': '香港', '澳门': '澳门'
}
# 接收用户输入并输出结果
while True:
    province = input()
    # 如果输入为空,退出程序
    if province == "":
        break
    # 输出对应的省会名称或"输入错误"
    if province in capitals:
        print(capitals[province])
    else:
        print("输入错误")

第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):
    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关:通讯录(添加)

任务描述
模拟通讯录的数据添加功能。

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

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

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)

def delstuInof():
    name = input()
    if len(name) == 0:
        print("ERROR")
    else:
        del dict[name]
        print('Success')
        print(dict)

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)

def seckstuIofo():
    name = input()
    print(dict[name])

def showstuInfo():
    print(dict)

def exitSystem():
    pass

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、付费专栏及课程。

余额充值