如何在不使用 num2word 库的情况下将数字转换为单词? [英] How to convert numbers to words without using num2word library?

查看:51
本文介绍了如何在不使用 num2word 库的情况下将数字转换为单词?的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

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

num2words1 = {1: '一', 2: '二', 3: '三', 4: '四', 5: '五', \6:'六',7:'七',8:'八',9:'九',10:'十',\11:十一",12:十二",13:十三",14:十四",\15:'十五',16:'十六',17:'十七',18:'十八',19:'十九'}num2words2 = ['二十','三十','四十','五十','六十','七十','八十','九十']定义编号(编号):如果(数字 > 1)或(数字 <19):返回 (num2words1[Number])elif (Number > 20) or (Number < 99):返回 (num2words2[Number])别的:打印(数字超出范围")主要的()定义主():num = eval(input("请输入一个 0 到 99 之间的数字:"))数量(数量)主要的()

现在,我目前遇到的最大问题是 if、elif 和 else 语句似乎不起作用.只运行第一个 if 语句.

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

附言是的,我知道 num2word 库,但我不允许使用它.

解决方案

你的第一条语句逻辑不正确.除非 Number 小于等于 1,否则该语句总是为真;200 也大于 1.

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

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

您也可以使用链接:

如果 1 <= 数字 <= 19:

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

十,余数 = divmod(Number, 10)

演示:

<预><代码>>>>divmod(42, 10)(4, 2)

然后使用这些值从零件中构建您的数字:

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

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

return num2words2[tens - 2] + '-' + num2words1[remainder] 如果余数 else num2words2[tens - 2]

全部放在一起:

def number(Number):如果 0 <= 数字 <= 19:返回 num2words1[数字]elif 20 <= 数字 <= 99:十,余数 = divmod(Number, 10)返回 num2words2[tens - 2] + '-' + num2words1[remainder] 如果余数否则 num2words2[tens - 2]别的:print('数字超出了实现的数字范围.')

I need to turn numbers from 1 - 99 into words. This is what I got so far:

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()

Now, the BIGGEST problem that I have so far is that the if, elif and else statements DO NOT seem to work. Only the first if statement runs.

The second problem is creating the string version of the numbers from 20-99....

P.S. Yes, I know about the num2word library, but I am not allowed to use it.

解决方案

Your first statement logic is incorrect. Unless Number is 1 or smaller, that statement is always True; 200 is greater than 1 as well.

Use and instead, and include 1 in the acceptable values:

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

You could use chaining as well:

if 1 <= Number <= 19:

For numbers of 20 or larger, use divmod() to get both the number of tens and the remainder:

tens, remainder = divmod(Number, 10)

Demo:

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

then use those values to build your number from the parts:

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

Don't forget to account for cases when the number is above 20 and doesn't have a remainder from the divmod operation:

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

All put together:

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.')

这篇关于如何在不使用 num2word 库的情况下将数字转换为单词?的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
相关文章
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆