如何让我的整数到单词字典功能正常工作

2024-05-27 11:17:35 发布

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

我能够使这个函数在某些情况下将整数转换为单词,但当输入大于120时仍然有问题;对于121122、、、和任何大于..20的值,即221233等。。它返回100 None(对于120以上的情况)。如果输入超过1020,它将不起作用。你知道吗

def int_to_word(n):
    d={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'}
    k=1000
    m=k*1000
    if (n <20):
        print(d.get(n))
    elif (n >=20 and n <100):
        if n%10==0:
            print(d.get(n))
        else:
            print(d.get(n//10*10),d.get(n%10),end="")
    elif (n>=100) and (n<k):
        if n%100==0:
            print(d[n//100],end=" ")
            print("hundred")
        else :
            print(d.get(n//100),"hundred",d.get(n%100),end="")
    elif (n>=k)and (n<m):
        if n%k==0:
            print(d.get(n//k),end=" ")
            print("thousand")
        else:
            print(d.get(n//k),end=" ")
            print("thousand",end=" ")
            print(d.get(n%k))

int_to_word(n)

Tags: andto函数getif情况整数else
2条回答

这看起来像家庭作业,所以我会暗示而不是完全提供你的答案。你知道吗

请注意,(在美式英语中)处理“千”与处理小于1000的数字完全相同。同样的情况(在美国英语中)也适用于10E6(百万),10E9(十亿),10E12(万亿),等等。据我所知,这在印度英语中是不同的,有10万,什么都没有。同样,在那些认为10E9=“10亿”和10E12=“10亿”的国家,你肯定会想根据你的导师的期望来调整你的答案。你知道吗

总之,107000是“107000”,123456是“123000456”

您可以看到这是一个循环的机会,因为每次循环的逻辑都是相同的。你知道吗

话虽如此,你将不得不把注意力集中在数字小于1000的部分。百位部分相当简单:401是“四百零一”,525是“五百二十五”,所以您所需要做的就是检查一个有效的百位数字并添加/不添加适当的文本。你知道吗

下一步,我们来讨论十位数和一位数。看看你的代码,你有太多的逻辑。我建议您明确地将各个部分分开,这样您就知道您要处理的是什么:

hundreds = (n % 1000) // 100
tens_ones = n % 100

现在你可以问:tens_onesd吗?如果是这样,你就完了。如果不是,你就得把它分成十部分(再乘以10回到30或者别的什么,在d)和一部分,在d。你知道吗

对于您的代码,我认为问题在于您没有考虑如何正确处理数百数千数字。您的代码只处理小于1000000的数字。以下是根据您的想法修改的代码:

def int_to_word(n):
d={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'}
k=1000
m=k*1000
if (n <20):
    print(d.get(n))
elif (n >=20 and n <100):
    if n%10==0:
        print(d.get(n))
    else:
        print(d.get(n//10*10),d.get(n%10),end="")
elif (n>=100) and (n<k):
    if n%100==0:
        print(d[n//100],end=" ")
        print("hundred")
    else :
        print(d.get(n//100),"hundred",d.get(n%100//10*10),d.get(n%100%10),end=" ")
elif (n>=k)and (n<m):
    if n%k==0:
        print(d.get(n//k//10*10),d.get(n//k%10),end=" ")
        print("thousand")
    else:
        if n//k > 100:
            print(d.get(n//k//100),end=" ")
            print("hundred",end=" ")
            print(d.get(n//k%100//10*10),d.get(n//k%100%10),end=" ")
            print("thousand",end=" ")
        elif n//k >10:
            print(d.get(n//k//10*10),d.get(n//k%10),end=" ")
            print("thousand",end=" ")
        else:
            print(d.get(n//k%10),end=" ")
            print("thousand",end=" ")
        print(d.get(n%k//100),"hundred",d.get(n%k%100//10*10),d.get(n%k%100%10),end=" ")

在[2]中:int\u to \u word(999999)

玖拾玖万玖仟玖佰玖拾玖

相关问题 更多 >

    热门问题