题解 | #学英语#

学英语

https://www.nowcoder.com/practice/1364723563ab43c99f3d38b5abef83bc

import sys


dict = {0: '', 1: 'one', 2: 'two', 3: 'three', 4: 'four', 5: 'five', 6: 'six', 7: 'seven', 8: 'eight',
9: 'nine', 10: 'ten', 11: 'eleven', 12: 'twelve', 13: 'thirteen', 14: 'fourteen', 15: 'fifteen', 16: 'sixteen',
17: 'seventeen', 18: 'eighteen', 19: 'nineteen', 20: 'twenty', 30: 'thirty', 40: 'forty', 50: 'fifty',
60: 'sixty', 70: 'seventy', 80: 'eighty', 90: 'ninety'}

magnitude = {1: 'thousand', 2: 'million', 3: 'billion', 4: 'trillion'}


def nums_to_english(num: str):
    temp_result = []
    if len(num) == 3:
        if int(num[0]) != 0:
            temp_result += [dict[int(num[0])], 'hundred']
            if int(num[1:]) != 0:
                temp_result.append('and')
        num = num[1:]
    if int(num) in dict:
        temp_result += [dict[int(num)]]
    else:
        temp_result += [dict[int(num[0] + '0')], dict[int(num[1])]]
    return temp_result


result = []
for line in sys.stdin:
    a = line.split()[0]
    level = 0
    while a:
        if level > 0:
            result = nums_to_english(a[-3:]) + [magnitude[level]] + result
        else:
            result = nums_to_english(a[-3:]) + result
        a = a[:-3]
        level += 1
    print(' '.join(result))

英文计数每三位进一个数量级,比如4位数是千thousand,7位数是百万million,那么大概思路就是循环从输入中切出后三位做循环直到输入全部切完。

数量级从0开始记,每做一次切片数量级+1,如果数据小于等于3位那就不需要加数量级,大于等于三位的情况根据数量级字典查询即可,如果题目要求的数据数量级超过百万级,给字典里再加更高数量级的键和键值即可,不改主要代码。

每三位的处理:

百位的处理:

如果传入的字符串长度等于3,先对首位做非0判断,如果为0就跳过,不为0的话,根据首位的值在翻译字典中检索其翻译,然后加上hundred关键字,同时判断后两位是否非0,如果后两位都是0就跳过,反之则需要加and关键字(按照英文习惯,加and的条件是百位不为0且百位以下也不为0,就是说不是整百就要加and)。

后两位的处理:

其中1到19的关键字以及100以内的10的整数均录入在字典中,这些情况只需要在字典中查出对应翻译即可,这里做个数字是否在字典中的判断,如果是以上情况则直接从字典中找对应的翻译,如果不是的话,取出十位的数字,拼一个0然后去查找对应的十位翻译,然后再拼上个位翻译即可。

对于0x这种数字,我在字典中给0映射的翻译是空字符,如果是0[1-9]这样的格式,拼出来就是正常的个位数字的翻译,如果是00就拼出来空字符串,因为结果是暂存为列表形式,最后是用空格join的方式输出,所以不影响结果(加入后两位非0判断也行,但是这种情况还是得判断十位是否为0,不如字典中给0映射为空,代码量还少些)。

全部评论

相关推荐

诨号无敌鸭:恭喜佬,但是有一个小问题:谁问你了?我的意思是,谁在意?我告诉你,根本没人问你,在我们之中0人问了你,我把所有问你的人都请来 party 了,到场人数是0个人,誰问你了?WHO ASKED?谁问汝矣?誰があなたに聞きましたか?누가 물어봤어?我爬上了珠穆朗玛峰也没找到谁问你了,我刚刚潜入了世界上最大的射电望远镜也没开到那个问你的人的盒,在找到谁问你之前我连癌症的解药都发明了出来,我开了最大距离渲染也没找到谁问你了我活在这个被辐射蹂躏了多年的破碎世界的坟墓里目睹全球核战争把人类文明毁灭也没见到谁问你了
点赞 评论 收藏
分享
10-24 18:56
已编辑
杭州第二中学 Java
bxiajuxujwjqna:有没有考虑过高并发的场景?消息堆积怎么办?消息丢失又怎么办?
点赞 评论 收藏
分享
点赞 收藏 评论
分享
牛客网
牛客企业服务