大学Python任务:日期汉字格式转换

img

img

编写程序,用户输入阿拉伯数字的日期,转换为汉字的日期。
例如,输入2021/2/25,输出二零二一年二月二十五日

逻辑:
1.定义一个字典对应数字和汉字做数字和汉字的转换
2.将两个/分别转成年和月,在最后加上日
参考代码:

date_map = {'0': '零', '1': '一', '2': '二', '3': '三', '4': '四', '5': '五', '6': '六', '7': '七', '8': '八','9': '九'}
def dateTrans(date):
    date_cn = list(date)
    # 处理数字日期
    for i in range(len(date)):
        if date[i] in date_map:
            date_cn[i] = date_map[date[i]]
    # 处理年月日
    year = date.find('/')
    month = date.rfind('/')
    date_cn[year] = '年'
    date_cn[month] = '月'
    date_cn.append('日')

    # 处理日,兼容月份只有一位数情况
    if (month == 7 and len(date) == 10) or (month == 6 and len(date) == 9):
        if date_cn[month+1] == '零':
            date_cn.pop(month+1)
        elif date_cn[month+1] == '一':
            date_cn[month+1] = '十'
        else:
            date_cn.insert(month+2, '十')

    # 处理月
    if month == 7:
        if date_cn[5] == '零':
            date_cn.pop(5)
        elif date_cn[5] == '一':
            date_cn[5] = '十'

    return ''.join(date_cn)

if __name__ == '__main__':
    date = '2021/12/02'
    date_cn = dateTrans(date)
    print(date_cn)

如果不强制用find函数的话可以使用split做字符串的切割,会更简单点:
1.以/切割字符串成年月日
2.分别对年月日做转换然后拼接字符串
参考代码

date_map = {'0': '零', '1': '一', '2': '二', '3': '三', '4': '四', '5': '五', '6': '六', '7': '七', '8': '八','9': '九'}
def numToCn(num):
    cn = list(num)
    if len(num) == 4:   # 年
        for i in range(len(cn)):
            if cn[i] in date_map:
                cn[i] = date_map[num[i]]
    else:   # 月、日
        if len(cn) == 1:
            cn = [date_map[cn[0]]]
        else:
            if cn[0] == '0':    # 以零开头,只需要第二位
                cn = [date_map[cn[1]]]
            elif cn[0] == '1':
                cn[0] = '十'
                cn[1] = date_map[cn[1]]
            else:
                cn[0] = date_map[cn[0]]
                cn.append(date_map[cn[1]])
                cn[1] = '十'
    return ''.join(cn)

year, month, day = date.split('/')
date_cn = numToCn(year)+"年"+numToCn(month)+"月"+numToCn(day)+"日"
print(date_cn)

确实简单好多 😁