题解 | #学英语#
学英语
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))
曼迪匹艾公司福利 115人发布