这里我们继续复习有关Python字典的相关知识,相关题目来源于头歌实践教学平台。
我们知道在Python中获取字典的值主要有两个方法,一是根据字典的键索引对应的值,二是用get()方法获取键对应的值,使用这种方法时,键不存时不会触发异常,而且可以设计键不存在时的返回值,应用非常广泛,因此本期博客我们就通过几道题目来学习一下get()方法的使用。
在做题之前我们来了解一下字典使用,dict[key]:本质是把“键”当作字典的索引值来使用的,不存在该索引值,则会提示错误,dict.get(k[, default]) 可以避免键不存在时引发的错误。
before = 'abcdefghijklmnopqrstuvwxyz'
after = [".-", "-...", "-.-.", "-..", ".", "..-.", "--.", "....", "..", ".---", "-.-", ".-..", "--", "-.", "---", ".--.", "--.-", ".-.", "...", "-", "..-", "...-", ".--", "-..-", "-.--", "--.."]
morse_dic = dict(zip(before, after)) # 两个序列对应元素组合,转为字典
# 前三行执行结果是第6行字典,可手动生成字典
morse_dic = {'a': '.-', 'b': '-...', 'c': '-.-.', 'd': '-..', 'e': '.', 'f': '..-.', 'g': '--.', 'h': '....', 'i': '..', 'j': '.---', 'k': '-.-', 'l': '.-..', 'm': '--', 'n': '-.', 'o': '---', 'p': '.--.', 'q': '--.-', 'r': '.-.', 's': '...', 't': '-', 'u': '..-', 'v': '...-', 'w': '.--', 'x': '-..-', 'y': '-.--', 'z': '--..'}
txt = input().lower()
for c in txt:
print(morse_dic.get(c, c), end='')
运行的结果是:
i love you
.. .-..---...-. -.-----..-
before = 'abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ'
after = 'defghijklmnopqrstuvwxyzabcFGHIJKLMNOPQRSTUVWXYZABCDE'
table = dict(zip(before,after))
# 前三行执行结果是第6行字典,可手动生成字典
# table = {'a': 'd', 'b': 'e', 'c': 'f', 'd': 'g', 'e': 'h', 'f': 'i', 'g': 'j', 'h': 'k', 'i': 'l', 'j': 'm', 'k': 'n', 'l': 'o', 'm': 'p', 'n': 'q', 'o': 'r', 'p': 's', 'q': 't', 'r': 'u', 's': 'v', 't': 'w', 'u': 'x', 'v': 'y', 'w': 'z', 'x': 'a', 'y': 'b', 'z': 'c', 'A': 'F', 'B': 'G', 'C': 'H', 'D': 'I', 'E': 'J', 'F': 'K', 'G': 'L', 'H': 'M', 'I': 'N', 'J': 'O', 'K': 'P', 'L': 'Q', 'M': 'R', 'N': 'S', 'O': 'T', 'P': 'U', 'Q': 'V', 'R': 'W', 'S': 'X', 'T': 'Y', 'U': 'Z', 'V': 'A', 'W': 'B', 'X': 'C', 'Y': 'D', 'Z': 'E'}
text = input()
for c in text:
print(table.get(c, c), end='')
运行的结果是:
i love you
l oryh brx
我们写一个函数,然后把数字加密功能添加进来:
def caesar_cipher(text):
"""接收一个字符串为参数,采用字母表和数字中后面第3个字符代替当前字符的方法
对字符串中的字母和数字进行替换,实现加密效果,返回值为加密的字符串。"""
before = 'abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789'
after = 'defghijklmnopqrstuvwxyzabcDEFGHIJKLMNOPQRSTUVWXYZABC3456789012'
table = dict(zip(before,after))
# 前三行执行结果是第6行字典,可手动生成字典
# table = {'a': 'd', 'b': 'e', 'c': 'f', 'd': 'g', 'e': 'h', 'f': 'i', 'g': 'j', 'h': 'k', 'i': 'l', 'j': 'm', 'k': 'n', 'l': 'o', 'm': 'p', 'n': 'q', 'o': 'r', 'p': 's', 'q': 't', 'r': 'u', 's': 'v', 't': 'w', 'u': 'x', 'v': 'y', 'w': 'z', 'x': 'a', 'y': 'b', 'z': 'c', 'A': 'D', 'B': 'E', 'C': 'F', 'D': 'G', 'E': 'H', 'F': 'I', 'G': 'J', 'H': 'K', 'I': 'L', 'J': 'M', 'K': 'N', 'L': 'O', 'M': 'P', 'N': 'Q', 'O': 'R', 'P': 'S', 'Q': 'T', 'R': 'U', 'S': 'V', 'T': 'W', 'U': 'X', 'V': 'Y', 'W': 'Z', 'X': 'A', 'Y': 'B', 'Z': 'C', '0': '3', '1': '4', '2': '5', '3': '6', '4': '7', '5': '8', '6': '9', '7': '0', '8': '1', '9': '2'}
ciphertext = ''
for c in text:
ciphertext = ciphertext + table.get(c, c)
return ciphertext
if __name__ == '__main__':
plaintext = input()
print(caesar_cipher(plaintext))
运行的结果是:
2022 i love you
5355 l oryh brx
month = input().lower().capitalize() # 输入转小写再将首字母大写
month_dic = {'January':'Jan.', 'February':'Feb.', 'March':'Mar.', 'April':'Apr.', 'May':'May.', 'June':'Jun.', 'July':'Jul.', 'August':'Aug.', 'September':'Sept.', 'October':'Oct.',
'November':'Nov.', 'December':'Dec.'}
print(month_dic.get(month,'spelling mistake')) # 输入月份不存在时输出'spelling mistake'
运行的结果是:
march
Mar.
def is_leap(year):
"""接收整数年份为参数,判断是否是闰年,返回布尔值"""
return year % 4 == 0 and year % 100 != 0 or year % 400 == 0
def days_of_month(date_str):
"""根据输入的年月日,返回该月的天数"""
day_dic = {'01': 31, '02': 28, '03': 31, '04': 31, '05': 31, '06': 31, '07': 31, '08': 31, '09': 31, '10': 31,
'11': 31, '12': 31, }
day = day_dic.get(date_str[4:6]) # 获得平年当前月的天数
if date_str[4:6]=='02' and is_leap(int(date_str[:4])): # 若月份为2月,判断是否闰年,闰年加一天
day = day + 1
return day
if __name__ == '__main__':
date_in = input() # 输入一个年月日
print(days_of_month(date_in))
运行的结果是:
20221211
31
连续输入五分制成绩,当输入成绩是五分制成绩时,继续输出该门课程学分,若在输入成绩时直接输入回车则结束程序,计算贯点并输出。
score = {'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}
credit_ls, gpa_ls = [],[]
while s:= input(): # 输入成绩,直接输入回车时结束循环
if s in score.keys(): # 若输入的成绩在字典的键中存在
credit = float(input()) # 输入对应课程学分
credit_ls.append(credit) # 学分加入列表
gpa_ls.append(score.get(s) * credit) # 当前课程成绩*当前课程绩点结果为当前成绩对应的绩点
else:
print('data error')
gpa_ave = sum(gpa_ls) / sum(credit_ls) # 计算学生平均绩点
print(f'{gpa_ave:.2f}')
运行的结果是:
A
66
4.00
capitals = {'湖南': '长沙', '湖北': '武汉', '广东': '广州', '广西': '南宁', '河北': '石家庄', '河南': '郑州', '山东': '济南', '山西': '太原', '江苏': '南京', '浙江': '杭州', '江西': '南昌', '黑龙江': '哈尔滨', '新疆': '乌鲁木齐', '云南': '昆明', '贵州': '贵阳', '福建': '福州', '吉林': '长春','安徽': '合肥', '四川': '成都', '西藏': '拉萨', '宁夏': '银川', '辽宁': '沈阳', '青海': '西宁', '甘肃': '兰州', '陕西': '西安','内蒙古': '呼和浩特', '台湾': '台北', '北京': '北京', '上海': '上海', '天津': '天津', '重庆': '重庆', '香港': '香港', '澳门': '澳门'}
while province := input(): # 输入省(直辖市、自治区或特区名)
print(capitals.get(province, '输入错误'))
运行的结果是:
湖北
武汉
如下是CSV数据信息:
with open('university.csv','r',encoding='utf-8') as f:
ls = [x.strip().split(',') for x in f]
univ_dic = {x[1]: ','.join(x) for x in ls}
univ_name = input() # 例如输入:北京大学
print(univ_dic.get('学校名称')) # 输出标题行
print(univ_dic.get(univ_name)) # 输出完整信息,如:1,北京大学,4111010001,教育部,北京市,本科,
运行的结果是:
北京大学
序号,学校名称,学校标识码,主管部门,所在地,办学层次,备注
1,北京大学,4111010001,教育部,北京市,本科,
d = {'I': 1, 'IV': 3, 'V': 5, 'IX': 8, 'X': 10, 'XL': 30, 'L': 50, 'XC': 80, 'C': 100, 'CD': 300, 'D': 500, 'CM': 800,'M': 1000}
# enumerate('MCCIII') # 给每个元素加一个序号[(0, 'M'), (1, 'C'), (2, 'C'), (3, 'I'), (4, 'I'), (5, 'I')]
s = input()
print(sum(d.get(s[max(i - 1, 0):i + 1], d[n]) for i, n in enumerate(s)))
运行的结果是:
D
500
before = 'abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ'
after = 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz'
table = dict(zip(before,after))
# 前三行执行结果是第6行字典,可手动生成字典
# table = {'a': 'A', 'b': 'B', 'c': 'C', 'd': 'D', 'e': 'E', 'f': 'F', 'g': 'G', 'h': 'H', 'i': 'I', 'j': 'J', 'k': 'K', 'l': 'L', 'm': 'M', 'n': 'N', 'o': 'O', 'p': 'P', 'q': 'Q', 'r': 'R', 's': 'S', 't': 'T', 'u': 'U', 'v': 'V', 'w': 'W', 'x': 'X', 'y': 'Y', 'z': 'Z', 'A': 'a', 'B': 'b', 'C': 'c', 'D': 'd', 'E': 'e', 'F': 'f', 'G': 'g', 'H': 'h', 'I': 'i', 'J': 'j', 'K': 'k', 'L': 'l', 'M': 'm', 'N': 'n', 'O': 'o', 'P': 'p', 'Q': 'q', 'R': 'r', 'S': 's', 'T': 't', 'U': 'u', 'V': 'v', 'W': 'w', 'X': 'x', 'Y': 'y', 'Z': 'z'}
for c in input():
print(table.get(c, c),end='')
运行的结果是:
i love you
I LOVE YOU