Python每日一练 08——get()方法学习

Python每日一练 08——get()方法学习

文章目录

  • Python每日一练 08——get()方法学习
    • 一、前言
    • 二、题目
      • 1、莫尔斯电码转换
      • 2、凯撒密码加密
      • 3、缩写月份单词
      • 4、本月天数
      • 5、绩点计算
      • 6、查询省会
      • 7、查询高校信息
      • 8、罗马数字转换
      • 9、大小写转换

一、前言

这里我们继续复习有关Python字典的相关知识,相关题目来源于头歌实践教学平台。

我们知道在Python中获取字典的值主要有两个方法,一是根据字典的键索引对应的值,二是用get()方法获取键对应的值,使用这种方法时,键不存时不会触发异常,而且可以设计键不存在时的返回值,应用非常广泛,因此本期博客我们就通过几道题目来学习一下get()方法的使用。

在做题之前我们来了解一下字典使用,dict[key]:本质是把“键”当作字典的索引值来使用的,不存在该索引值,则会提示错误,dict.get(k[, default]) 可以避免键不存在时引发的错误。

二、题目

1、莫尔斯电码转换

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
.. .-..---...-. -.-----..-

2、凯撒密码加密

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

3、缩写月份单词

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.

4、本月天数

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

5、绩点计算

连续输入五分制成绩,当输入成绩是五分制成绩时,继续输出该门课程学分,若在输入成绩时直接输入回车则结束程序,计算贯点并输出。

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

6、查询省会

capitals = {'湖南': '长沙', '湖北': '武汉', '广东': '广州', '广西': '南宁', '河北': '石家庄', '河南': '郑州', '山东': '济南', '山西': '太原', '江苏': '南京', '浙江': '杭州', '江西': '南昌', '黑龙江': '哈尔滨', '新疆': '乌鲁木齐', '云南': '昆明', '贵州': '贵阳', '福建': '福州', '吉林': '长春','安徽': '合肥', '四川': '成都', '西藏': '拉萨', '宁夏': '银川', '辽宁': '沈阳', '青海': '西宁', '甘肃': '兰州', '陕西': '西安','内蒙古': '呼和浩特', '台湾': '台北', '北京': '北京', '上海': '上海', '天津': '天津', '重庆': '重庆', '香港': '香港', '澳门': '澳门'}
while province := input():                   # 输入省(直辖市、自治区或特区名)
    print(capitals.get(province, '输入错误'))

运行的结果是:

湖北
武汉

7、查询高校信息

如下是CSV数据信息:

Python每日一练 08——get()方法学习_第1张图片

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,教育部,北京市,本科,

8、罗马数字转换

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

9、大小写转换

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

你可能感兴趣的:(Python每日一练,Python编程基础,python,开发语言)