编写一个 Python 程序,将用户输人的一个 1~999 的整数转换成其对应的英文 表示,例如,729 将被转换成 seven hundred and twenty r nine。 要求,在程序中尽可能地便 用西数封装一些常用的转换,不得少于3个函数。
时间: 2024-05-05 16:15:43 浏览: 94
以下是一个可能的解决方案:
```python
# 定义数字到英文的转换字典
NUM_TO_EN = {
0: 'zero',
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',
}
def num_to_en(num):
"""将数字转换成英文"""
if num < 20:
return NUM_TO_EN[num]
elif num < 100:
tens = num // 10 * 10
ones = num % 10
if ones == 0:
return NUM_TO_EN[tens]
else:
return NUM_TO_EN[tens] + ' ' + NUM_TO_EN[ones]
elif num < 1000:
hundreds = num // 100
remainder = num % 100
if remainder == 0:
return NUM_TO_EN[hundreds] + ' hundred'
else:
return NUM_TO_EN[hundreds] + ' hundred and ' + num_to_en(remainder)
else:
return 'number out of range'
def input_num():
"""获取用户输入的数字"""
while True:
try:
num = int(input('Enter a number between 1 and 999: '))
if 1 <= num <= 999:
return num
else:
print('Number out of range, try again.')
except ValueError:
print('Invalid input, try again.')
def main():
num = input_num()
en = num_to_en(num)
print(en)
if __name__ == '__main__':
main()
```
这个程序定义了三个函数:
- `num_to_en(num)`:将给定数字转换成英文字符串。这个函数首先检查数字是否小于 20,如果是,就返回相应的英文单词;否则,它将数字分解成十位和个位,然后查找对应的英文单词。如果数字大于等于 100,函数将数字分解成百位和余数,然后递归调用自己来处理余数部分,最后将所有部分组合成一个字符串。
- `input_num()`:获取用户输入的数字。这个函数使用一个无限循环来等待有效输入。如果输入的值不是整数,或者不在 1~999 的范围内,它会提示用户重新输入。
- `main()`:程序的主函数,它获取用户输入数字,将其转换成英文,并打印结果。
在程序的主体中,我们首先调用 `input_num()` 函数来获取用户输入,然后调用 `num_to_en()` 函数来将数字转换成英文,并打印结果。
阅读全文