当前位置: 首页 > 面试题库 >

如何不使用num2word库将数字转换为单词?

穆飞星
2023-03-14
问题内容

我需要将1到99之间的数字转换为单词。这是我到目前为止所得到的:

num2words1 = {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'}
num2words2 = ['Twenty', 'Thirty', 'Forty', 'Fifty', 'Sixty', 'Seventy', 'Eighty', 'Ninety']

def number(Number):

    if (Number > 1) or (Number < 19):
        return (num2words1[Number])
    elif (Number > 20) or (Number < 99):
        return (num2words2[Number])
    else:
        print("Number Out Of Range")
        main()

def main():
    num = eval(input("Please enter a number between 0 and 99: "))
    number(num)
main()

现在,到目前为止,我最大的问题是if,elif和else语句似乎不起作用。仅第一个if语句运行。

第二个问题是创建20-99之间数字的字符串版本。

PS:是的,我知道num2word库,但不允许使用它。


问题答案:

您的第一条陈述逻辑不正确。除非等于Number或小于1,否则该语句 始终为 True;否则,该语句 始终为 True。200也大于1。

and改用,并1在可接受的值中包括:

if (Number >= 1) and (Number <= 19):

您也可以使用链接:

if 1 <= Number <= 19:

对于20或更大的数字,可使用divmod()来获得十位数和余数:

tens, remainder = divmod(Number, 10)

演示:

>>> divmod(42, 10)
(4, 2)

然后使用这些值从各个部分构建您的数字:

return num2words2[tens - 2] + '-' + num2words1[below_ten]

不要忘记考虑数字大于20且divmod操作没有余数的情况:

return num2words2[tens - 2] + '-' + num2words1[remainder] if remainder else num2words2[tens - 2]

全部放在一起:

def number(Number):
    if 0 <= Number <= 19:
        return num2words1[Number]
    elif 20 <= Number <= 99:
        tens, remainder = divmod(Number, 10)
        return num2words2[tens - 2] + '-' + num2words1[remainder] if remainder else num2words2[tens - 2]
    else:
        print('Number out of implemented range of numbers.')


 类似资料:
  • 我无法在pandas dataframe中创建一个新列,该列使用python num2words库将数字转换为单词,它使用简单的int或float参数,但不使用series 这就是我曾经尝试过的: TypeError Traceback(最近的调用最后)在---- ###################################################################

  • 问题内容: 我写了一个非常简单的查询,结果为500,我需要像下面这样转换该值:- 问题答案: 用力卢克;) SqlFiddleDemo 提示采用拼写形式。 编辑: 添加对以下内容的支持: SqlFiddleDemo 编辑2: 添加对float的有限支持: SqlFiddleDemo3 编辑3: 10.3的输出为十点三,但10.3的输出为十点三,10.03的输出为十点三。我怎样才能做到这一点? 根据

  • 问题内容: 请建议如何将使用库转换为使用库。 我未成功执行的操作: 问题答案: 您无需使用。您应该使用Gson在JSON字符串和您自己的Java对象之间进行转换。 请参阅《Gson用户指南》: (序列化) (反序列化)

  • 问题内容: 我正在编写将给定数量转换为单词的代码,这是我在谷歌搜索后得到的。但是我认为要完成一个简单的任务需要一些冗长的代码。两个正则表达式和两个循环,我想要更简单的方法。 我正在尝试使其尽可能短。并发布我的想法 有什么建议? 同样,上面的代码转换为英语编号系统,例如Million / Billion,我不希望使用南亚编号系统。就像在Lakhs和Crores 问题答案: 更新 :看起来这比我想象的

  • 问题内容: 当我在mysql中执行查询时,我尝试按以下方式打印输出。 Salary列的值为45000,第三列中的第二列中的Value通过Query转换为单词。 我找到了一些文章,在Oracle中可以使用以下查询获得如上所述的结果: 输出: 在MySQL中,我尝试了LPAD,RPAD,但那些只是将字符串添加到结果中,而不是将单词转换为字符串。 我找到了一些教程,但所有这些教程都对“ TO_CHAR(

  • 问题内容: 我正在尝试将以单词形式编写的数值转换为整数。例如,“ iPhone有233.7万个应用程序”将变成“ iPhone为230783个应用程序” 在开始编码之前,我想知道此转换是否存在任何功能/代码。 问题答案: 有很多页面讨论从数字到单词的转换。反方向的数量不多。 以获取一种不错的算法: 好吧,总的来说,您正在做两件事:查找标记(转换为数字的单词)和应用语法。简而言之,您正在为一种非常有