题解 | #学英语#
学英语
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))