题解 | #学英语#

学英语

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

# 这个函数可以把数字变成英文单词
def number_to_english(n):
    # 这里有一些小于20的数字的英文名字
    to19 = "one two three four five six seven eight nine ten eleven twelve thirteen fourteen fifteen sixteen seventeen eighteen nineteen".split()
    # 这里列出了十的整数倍的英文名字,从20开始到90
    tens = "twenty thirty forty fifty sixty seventy eighty ninety".split()
    # 这些是大数字的单位,比如一千、一百万和十亿
    thousands = "thousand million billion".split()

    # 这个小函数帮我们把数字转换成单词
    def words(n):
        # 如果数字小于20,我们直接从to19列表里找到对应的单词
        if n < 20:
            return to19[n - 1 : n]
        # 如果数字小于100,我们找到对应的十位单词,然后再递归找个位
        if n < 100:
            return [tens[n // 10 - 2]] + words(n % 10)
        # 如果数字小于1000,我们找到百位的单词,可能还要加上"and",然后再递归找十位和个位
        if n < 1000:
            return (
                [to19[n // 100 - 1]]
                + ["hundred"]
                + ["and"] * (0 < n % 100 < 100)
                + words(n % 100)
            )
        # 对于更大的数字,我们用循环来找到它是千、百万还是十亿级别的,然后把数字分成小块递归处理
        for p, w in enumerate(thousands, 1):
            if n < 1000 ** (p + 1):
                return words(n // 1000 ** p) + [w] + words(n % 1000 ** p)

    # 我们用' '.join把所有单词连接成一个句子,如果数字是0,就直接说"zero"
    return " ".join(words(n)) or "zero"


# 现在,让我们输入一个数字
n = int(input())
# 然后我们把它变成英文单词
print(number_to_english(n))

全部评论

相关推荐

点赞 评论 收藏
分享
Natrium_:这时间我以为飞机票
点赞 评论 收藏
分享
点赞 收藏 评论
分享
牛客网
牛客企业服务