我想在python中将数字转换成单词,而不导入任何模块或库
我已经试过编写一些代码,但是当在这段时间内出现这么多的零时,它就不能正常工作了
print("upto sixty three digits only: ")
a=input("enter the number: ")
c=a
e=int(a)
b=""
l=[]
l2=[]
while len(c)%3 != 0:
c="0"+c
d=len(c)/3
while len(c)!=0:
l.append(c[0:3])
c=c[3:len(c)]
on=["", "one","two","three", "four","five","six","seven", "eight", "nine", "ten", "eleven", "twelve", "thirteen", "fourteen", "fifteen", "sixteen", "seventeen", "eighteen", "nineteen"]
tens=["","","twenty", "thirty", "forty", "fifty", "sixty", "seventy", "eighty", "ninety"]
h="hundred"
grt=["thousand","million","billion","trillion","quadrillion","quintillion","sextillion","septillion","octillion","nonillion","decillion","undecillion","duodecillion","tredecillion","quattuor-decillion","quindecillion","sexdecillion","septen-decillion","octodecillion","novemdecillion","vigintillion" ]
for i in l:
k=int(i)
if i[0]=="0":
if k<20:
l2.append(on[k])
else:
l2.append(str(tens[k//10])+" "+str(on[k%10]))
else:
if int(i[1:3])<20:
l2.append(str(on[k//100])+" "+h+" "+str(on[k%100]))
else:
l2.append(str(on[k//100])+" "+h+" "+str(tens[(k%100)//10])+" "+str(on[k%10]))
for i in range(0,len(l2)):
b=b+l2[i]+" "+grt[int(d-2)]+" "
d=d-1
l=b.split()
l.pop()
d=""
for i in l:
d=d+i+" "
print(d)
当输入的数字之间没有零时,代码工作正常
(例如123456789=>;一亿二千三百四十五万六千七百八十九)
但当中间有许多零时,它就不起作用了
(例如120000000987=>;一亿两千万九百八十七)
您缺少的是一个if语句: 只要写,而不是简单的
如果值为“”(0),则不添加grt wortd的if语句
只是一些额外的建议: 编码/测试更容易的是声明一个函数,然后您可以针对一些“测试模式”调用您的函数,并更改/改进您的代码,直到所有测试都正常为止。你知道吗
下面是一个将代码转换为函数的示例,以及一些测试这两个示例的行,这些都是您在问题中发布的。你知道吗
我得再加一行才能通过考试。 我删除了一个带有以下行的尾随空白字符:
d=d.带()
请看下面的代码:
正如@gelonida所建议的,如果你用函数来做“肮脏的工作”会更好。例如,我修改了您的脚本,添加了两个函数,一个用于将数字划分为长度为3的块,另一个用于对前面提到的块进行“文字化”。就像这样,我相信代码会变得更简单、更简短、更易读:
上一次打印调用中,我使用了一个快速的方法来均匀地排列单词。 告诉我你是怎么想的!你知道吗
相关问题 更多 >
编程相关推荐