在数字转换中占零

2024-06-25 23:46:08 发布

您现在位置:Python中文网/ 问答频道 /正文

我正在创建一个数字到单词的翻译,并有一个例外,它的工作。你知道吗

例如,如果在4056中键入了数字,则在'four thousand zero hundred fifty six'输出时,我很难计算零。此外,如果输入50,则输出'fifty zero'。你知道吗

到目前为止,我掌握的情况如下:

def convert(number_str):

    d1 = {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'}
    l2 = ['twenty','thirty','fourty','fifty','sixty','seventy','eighty','ninety']

    if (int(number_str) >= 1) and (int(number_str) < 19):
        return(d1[number_str])
    elif (int(number_str) >= 20) and (int(number_str) <99):
        tens, single = divmod(number_str, 10)
        return l2[tens-2] + " " + d1[single]
    elif (int(number_str) >= 100) and (int(number_str) <999):
        hundreds, tens1 = divmod(number_str, 100)
        tens, single = divmod(tens1,10)
        return(d1[hundreds]+' hundred '+l2[tens-2]+" "+d1[single])
    elif (int(number_str) >= 1000) and (int(number_str) <9999):
        thousands, hundreds1 = divmod(number_str,1000)
        hundreds, tens1 = divmod(hundreds1,100)
        tens, single = divmod(tens1,10)
        return(d1[thousands]+' thousand '+d1[hundreds]+' hundred '+l2[tens-2]+" "+d1[single])

def main():

    user_input = input('> ')
    while  user_input != 'quit':
        print(convert(int(user_input)))
        user_input = input('> ')

main()

为了更好地处理使用零来支持这个程序,我可以添加什么逻辑?提前谢谢!你知道吗


Tags: andnumberinputreturnintd1zerosingle
2条回答

我们在语言中使用的编号系统在使用有效地使用零作为占位符的阿拉伯语编号系统之前就已经发展得很好了。你知道吗

我可以想象,在某种逻辑中,任何零都不会被注释。纯粹地把它看作一个占位符,使左边的数字具有更高的10^n值。你知道吗

def convert(number_str):

    d1 = {0: '',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'} 
 # Changed zero to an empty string
    l2 = ['twenty','thirty','fourty','fifty','sixty','seventy','eighty','ninety']
    if int(number_str) == 0: # Catches the unique case when zero is mentioned
      return('zero')
    elif (int(number_str) >= 1) and (int(number_str) < 19):
        return(d1[number_str])
    elif (int(number_str) >= 20) and (int(number_str) <=99):
        tens, single = divmod(number_str, 10)
        return l2[tens-2] + " " + d1[single]
    elif (int(number_str) >= 100) and (int(number_str) <=999):
        hundreds, tens1 = divmod(number_str, 100)
        tens, single = divmod(tens1,10)
        return(d1[hundreds]+' hundred '+((l2[tens-2]+" "+d1[single]) if tens > 1 else d1[tens*10+single]))
        # Added a conditional statement above to deal with numbers ending
        # in a number less than 20
    elif (int(number_str) >= 1000) and (int(number_str) <=9999):
        thousands, hundreds = divmod(number_str,1000)
        return(d1[thousands]+' thousand '+ convert(hundreds))
        # Added a recursive call to save code

def main():

    user_input = input('> ')
    while  user_input != 'quit':
        print(convert(int(user_input)))
        user_input = input('> ')

main()

请注意,它是在两个地方编辑的。首先让零成为一个空字符串,然后抓住它只是零的条件。你知道吗

您需要为零添加特殊条件。例如,50的问题可以用if语句检查:

lif (int(number_str) >= 20) and (int(number_str) <99):
    tens, single = divmod(number_str, 10)
    if single == 0:
        return l2[tens-2]
    else:
        return l2[tens-2] + " " + d1[single]

您可以编写一个类似的if来处理数百位中的0。你知道吗

相关问题 更多 >