成百上千的没有被打印出来。怎么做?



这是我的代码:

digit = input("Enter a number to convert to words: ")
units = {
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"}

tens =  {
20:"twenty", 30:"thirty", 40:"fourty", 50:"fifty", 60:"sixty", 70:"seventy", 
80:"eight", 90:"ninety"}

hundred = { 100:"one hundred", 200:"two hundred"
}
def number_to_words(problem):
if len(digit) <= 2 and int(digit) in units.keys():

print(units[int(digit)])

elif len(digit) == 2:

split_number = []
for letters in digit:
split_number.append(letters)
if len(split_number) == 2:

first_letter = split_number[0] + '0'
second_letter = split_number[1]
for num in tens.keys():
first_letter = int(first_letter)
if first_letter == num:
global split_tens
split_tens = tens[first_letter]
for num in units.keys():
second_letter = int(second_letter)
if second_letter == num:
global split_unit
split_unit = units[second_letter]
print(split_tens,'-', split_unit)

if len(digit) == 3:
split_number = []
for letters in digit:
split_number.append(letters)

if len(split_number) == 3:
first_letter = split_number[0] + "00" 
second_letter = split_number[1] + "0"
third_letter = split_number[2]
# print(first_letter, second_letter, third_letter)
for num in split_number:
first_letter = int(first_letter)
second_letter = int(second_letter)
# if split_number[1] == int(0):
#     second_letter = "and"
third_letter = int(third_letter)
if first_letter == hundred.keys():
pass
if second_letter == tens.keys():
pass
if third_letter == units.keys():
pass
print(hundred[first_letter], "and", tens[second_letter], units[third_letter])
number_to_words(digit)

你只处理最多3位数的数字,所以你只需要你的单位和十位字典。

即使不考虑这一点,你的代码也过于复杂了。一些明显的问题:

  • 无需遍历digit并保存到列表。因为digit是一个字符串,你可以索引它。
    • 作为题外,如果您需要将字符串的每个字符保存到列表中,您可以简单地使用split_number = list(digit)
  • unitstensdict。不需要遍历它们来匹配键。这违背了使用字典的目的。

试试这样写:

units = {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"}

tens =  {20:"twenty", 30:"thirty", 40:"fourty", 50:"fifty", 60:"sixty", 70:"seventy", 80:"eighty", 90:"ninety"}
def number_to_words(digit):
if int(digit) in units.keys():
name = units[int(digit)]

elif int(digit) in tens.keys():
name = tens[int(digit)]
elif len(digit) == 2:
name = tens[int(digit[0]+'0')]+"-"+units[int(digit[-1])]

elif len(digit) == 3:
if int(digit[1:]) == 0:
name = units[int(digit[0])]+ " hundred"
elif int(digit[1:]) in units.keys():
name = units[int(digit[0])]+ " hundred and " + units[int(digit[1:])]
elif int(digit[1:]) in tens.keys():
name = units[int(digit[0])]+ " hundred and " + tens[int(digit[1:])]
else:
name = units[int(digit[0])]+ " hundred and " + tens[int(digit[1]+'0')]+"-"+units[int(digit[-1])]
return name
>>> number_to_words("456")
'four hundred and fifty-six'
>>> number_to_words("78")
'seventy-eight'
>>> number_to_words("820")
'eight hundred and twenty'
编辑:

像这样使用递归会简洁得多:

roots = {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:"fourty", 50:"fifty", 60:"sixty", 70:"seventy", 80:"eighty", 90:"ninety"}
def number_to_words(digit):
if int(digit) in roots.keys():
return roots[int(digit)]

elif len(digit) == 2:
return roots[int(digit[0]+'0')]+"-"+number_to_words(digit[-1])

elif len(digit) == 3:
if int(digit[1:]) == 0:
return roots[int(digit[0])]+ " hundred"
else:
return (roots[int(digit[0])]+ " hundred and "+number_to_words(digit[1:]))
return None

最新更新