Python 如何在不使用num2word库的情况下将数字转换为单词?
我需要把1-99的数字转换成文字。到目前为止,我得到的是:Python 如何在不使用num2word库的情况下将数字转换为单词?,python,python-3.x,Python,Python 3.x,我需要把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', \
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()
num2words1={1:'1',2:'2',3:'3',4:'4',5:'5',\
6:'六',7:'七',8:'八',9:'九',10:'十',\
11:'十一',12:'十二',13:'十三',14:'十四',\
15:‘十五’、16:‘十六’、17:‘十七’、18:‘十八’、19:‘十九’}
num2words2=[“二十”、“三十”、“四十”、“五十”、“六十”、“七十”、“八十”、“九十”]
def编号(编号):
如果(数量>1)或(数量<19):
返回(num2words1[数字])
elif(数量>20)或(数量<99):
返回(num2words2[数字])
其他:
打印(“数字超出范围”)
main()
def main():
num=eval(输入(“请输入一个介于0和99之间的数字:”)
数字(num)
main()
到目前为止,我遇到的最大问题是if、elif和else语句似乎不起作用。只有第一个if语句运行
第二个问题是创建20-99之间的数字的字符串版本
是的,我知道num2word库,但我不允许使用它。您的第一个语句逻辑不正确。除非
Number
为1或更小,否则该语句始终为真;200也大于1
改为使用和
,并将1
包含在可接受的值中:
if (Number >= 1) and (Number <= 19):
演示:
然后使用这些值从零件中生成编号:
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.')
def编号(编号):
如果0<代码>如果编号>19且编号<99:
textNumber=str(数字)
第一位数字,第二位数字=文本编号
firstWord=num2words2[int(firstDigit)]
secondWord=num2words1[int(第二位数)]
单词=第一个单词+第二个单词
如果编号为0:
word=num2words1[数字]
如果数字>99:
错误
我还将数字转换为单词,用于一些模糊匹配例程。我使用了一个名为Influct的库,我从pwdyson那里找到了一个非常棒的库:
您可以通过使用一个字典和一个try/except子句(如下所示)来简化此操作:
num2words = {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', 0: 'Zero'}
>>> def n2w(n):
try:
print num2words[n]
except KeyError:
try:
print num2words[n-n%10] + num2words[n%10].lower()
except KeyError:
print 'Number out of range'
>>> n2w(0)
Zero
>>> n2w(13)
Thirteen
>>> n2w(91)
Ninetyone
>>> n2w(21)
Twentyone
>>> n2w(33)
Thirtythree
递归地:
num2words = {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 spell(num):
if num == 0:
return ""
if num < 20:
return (num2words[num])
elif num < 100:
ray = divmod(num,10)
return (num2words2[ray[0]-2]+" "+spell(ray[1]))
elif num <1000:
ray = divmod(num,100)
if ray[1] == 0:
mid = " hundred"
else:
mid =" hundred and "
return(num2words[ray[0]]+mid+spell(ray[1]))
num2words={1:'1',2:'2',3:'3',4:'4',5:'5',\
6:'六',7:'七',8:'八',9:'九',10:'十',\
11:'十一',12:'十二',13:'十三',14:'十四',\
15:‘十五’、16:‘十六’、17:‘十七’、18:‘十八’、19:‘十九’}
num2words2=[“二十”、“三十”、“四十”、“五十”、“六十”、“七十”、“八十”、“九十”]
def拼写(num):
如果num==0:
返回“”
如果num<20:
返回(num2words[num])
elif num<100:
射线=divmod(数值,10)
return(num2words2[ray[0]-2]+“”+拼写(ray[1]))
elif num导入数学
number=int(输入(“输入要打印的编号:”)
数字列表=[“零”、“一”、“二”、“三”、“四”、“五”、“六”、“七”、“八”、“九”]
青少年名单=[“十”、“十一”、“十二”、“十三”、“十四”、“十五”、“十六”、“十七”、“十八”、“十九”]
十年清单=[“二十”、“三十”、“四十”、“五十”、“六十”、“七十”、“八十”、“九十”]
如果number=10,number=19,number,这就完成了我的任务(Python2.x)
nums={1:“一”,2:“二”,3:“三”,4:“四”,5:“五”,6:“六”,7:“七”,8:“八”\
9:“九”,0:“零”,10:“十”,11:“十一”,12:“十二”,13:“十三”,14:“十四”\
15:“十五”,16:“十六”,17:“十七”,18:“十八”,19:“十九”,20:“二十”,30:“三十”,40:“四十”,50:“五十”\
60:“六十”,70:“七十”,80:“八十”,90:“九十”}
num=输入(“输入一个数字:”)
#将三位数转换成单词
如果100def给定文本(num):
配对={1:'1',2:'2',3:'3',4:'4',5:'5',6:'6',7:'7',8:'8',9:'9',10:'10'',
11:‘十一’、12:‘十二’、13:‘十三’、14:‘十四’、15:‘十五’、16:‘十六’、17:‘十七’、18:‘十八’、19:‘十九’、20:‘二十’,
30:‘三十’、40:‘四十’、50:‘五十’、60:‘六十’、70:‘七十’、80:‘八十’、90:‘九十’、0:‘‘’
返回对[num]
def toText(数字,单位):
n=int(num)#此行可以删除
ans=“”
如果n 0:
返回“+ans+”+单位
其他:
返回“”
num=“99,99,9999”#使用原始输入()
num=num.replace(“,”)#要删除“,”
尝试:
num=str(int(num))#检查有效数字
除:
打印“无效”
退出()
而len(num)则使用名为num2words的python库
Link->num2words={1:'一',2:'二',3:'三',4:'四',5:'五'\
6:'六',7:'七',8:'八',9:'九',10:'十',\
11:'十一',12:'十二',13:'十三',14:'十四',\
15:'十五',16:'十六',17:'十七',18:'十八',\
19:'十九',20:'二十',30:'三十',40:'四十',\
50:'五十',60:'六十',70:'七十',80:'八十',\
90:'90',0:'0'}
def n2w(n):
尝试:
返回num2words[n]
除KeyError外:
尝试:
返回num2words[n-n%10]+num2words[n%10]。lower()
除KeyError外:
尝试:
如果(n>=100和n0):
w=w+'和'+n2w(n)
返回w
elif(n>=1000):
w=“”
w=w+n2w(整数(n/1000))+‘千’
n=n-int((n/1000))*1000
如果(n>0且n=100):
w=w+n2w(整数(n/100))+‘百’
n=n-(整数(n/100)*100)
如果(n>0):
w=w+'和'+n2w(n)
返回w
除KeyError外:
返回“阿耀”
对于范围内的i(099999):
印刷品(n2w(i))
是否允许您使用其他软件包?这个对我来说真的很好:
. 它对于自然语言生成非常有用,并且有一种将数字转换为英语文本的方法
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.')
if Number > 19 and Number < 99:
textNumber = str(Number)
firstDigit, secondDigit = textNumber
firstWord = num2words2[int(firstDigit)]
secondWord = num2words1[int(secondDigit)]
word = firstWord + secondWord
if Number <20 and Number > 0:
word = num2words1[Number]
if Number > 99:
error
num2words = {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', 0: 'Zero'}
>>> def n2w(n):
try:
print num2words[n]
except KeyError:
try:
print num2words[n-n%10] + num2words[n%10].lower()
except KeyError:
print 'Number out of range'
>>> n2w(0)
Zero
>>> n2w(13)
Thirteen
>>> n2w(91)
Ninetyone
>>> n2w(21)
Twentyone
>>> n2w(33)
Thirtythree
num2words = {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 spell(num):
if num == 0:
return ""
if num < 20:
return (num2words[num])
elif num < 100:
ray = divmod(num,10)
return (num2words2[ray[0]-2]+" "+spell(ray[1]))
elif num <1000:
ray = divmod(num,100)
if ray[1] == 0:
mid = " hundred"
else:
mid =" hundred and "
return(num2words[ray[0]]+mid+spell(ray[1]))
import math
number = int(input("Enter number to print: "))
number_list = ["zero","one","two","three","four","five","six","seven","eight","nine"]
teen_list = ["ten","eleven","twelve","thirteen","fourteen","fifteen","sixteen","seventeen","eighteen","nineteen"]
decades_list =["twenty","thirty","forty","fifty","sixty","seventy","eighty","ninety"]
if number <= 9:
print(number_list[number].capitalize())
elif number >= 10 and number <= 19:
tens = number % 10
print(teen_list[tens].capitalize())
elif number > 19 and number <= 99:
ones = math.floor(number/10)
twos = ones - 2
tens = number % 10
if tens == 0:
print(decades_list[twos].capitalize())
elif tens != 0:
print(decades_list[twos].capitalize() + " " + number_list[tens])
nums = {1:"One", 2:"Two", 3:"Three" ,4:"Four", 5:"Five", 6:"Six", 7:"Seven", 8:"Eight",\
9:"Nine", 0:"Zero", 10:"Ten", 11:"Eleven", 12:"Tweleve" , 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"}
num = input("Enter a number: ")
# To convert three digit number into words
if 100 <= num < 1000:
a = num / 100
b = num % 100
c = b / 10
d = b % 10
if c == 1 :
print nums[a] + "hundred" , nums[b]
elif c == 0:
print nums[a] + "hundred" , nums[d]
else:
c *= 10
if d == 0:
print nums[a] + "hundred", nums[c]
else:
print nums[a] + "hundred" , nums[c], nums[d]
# to convert two digit number into words
elif 0 <= num < 100:
a = num / 10
b = num % 10
if a == 1:
print nums[num]
else:
a *= 10
print nums[a], nums[b]
def giveText(num):
pairs={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:'fourty',50:'fifty',60:'sixty',70:'seventy',80:'eighty',90:'ninety',0:''} # this and above 2 lines are actually single line
return pairs[num]
def toText(num,unit):
n=int(num)# this line can be removed
ans=""
if n <=20:
ans= giveText(n)
else:
ans= giveText(n-(n%10))+" "+giveText((n%10))
ans=ans.strip()
if len(ans)>0:
return " "+ans+" "+unit
else:
return " "
num="99,99,99,999"# use raw_input()
num=num.replace(",","")# to remove ','
try:
num=str(int(num)) # to check valid number
except:
print "Invalid"
exit()
while len(num)<9: # i want fix length so no need to check it again
num="0"+num
ans=toText( num[0:2],"Crore")+toText(num[2:4],"Lakh")+toText(num[4:6],"Thousand")+toText(num[6:7],"Hundred")+toText(num[7:9],"")
print ans.strip()
num2words = {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', 0: 'Zero'}
def n2w(n):
try:
return num2words[n]
except KeyError:
try:
return num2words[n-n%10] + num2words[n%10].lower()
except KeyError:
try:
if(n>=100 and n<=999):
w=''
w=w+str(n2w(int(n/100)))+'Hundred'
n=n-(int(n/100)*100)
if(n>0):
w=w+'And'+n2w(n)
return w
elif(n>=1000):
w=''
w=w+n2w(int(n/1000))+'Thousand'
n=n-int((n/1000))*1000
if(n>0 and n<100):
w=w+'And'+n2w(n)
if(n>=100):
w=w+n2w(int(n/100))+'Hundred'
n=n-(int(n/100)*100)
if(n>0):
w=w+'And'+n2w(n)
return w
except KeyError:
return 'Ayyao'
for i in range(0,99999):
print(n2w(i))
$ pip install inflect
>>> import inflect
>>> p = inflect.engine()
>>> p.number_to_words(1234567)
'one million, two hundred and thirty-four thousand, five hundred and sixty-seven'
>>> p.number_to_words(22)
'twenty-two'
def nums_to_words(string):
string = int(string) # Convert the string to an integer
one_ten=['zero', 'one', 'two', 'three', 'four', 'five', 'six', 'seven',
'eight', 'nine']
ten_nineteen=['ten', 'eleven', 'twelve', 'thirteen', 'fourteen',
'fifteen',
'sixteen', 'seventeen', 'eighteen', 'nineteen']
twenty_ninety=[' ', ' ','twenty', 'thirty', 'forty', 'fifty', 'sixty',
'seventy', 'eighty',
'ninety']
temp_str = ""
if string == 0: # If the string given equals to 0
temp_str = 'zero ' # Assign the word zero to the var temp_str
# Do the calculation to find each digit of the str given
first_digit = string // 1000
second_digit = (string % 1000) // 100
third_digit = (string % 100) // 10
fourth_digit = (string % 10)
if first_digit > 0:
temp_str = temp_str + one_ten[first_digit] + ' thousand '
# one_ten[first_digit] gets you the number you need from one_ten and you add thousand (since we're trying to convert to words ofc)
# You do the same for the rest...
if second_digit > 0:
temp_str = temp_str + one_ten[second_digit] + ' hundred '
if third_digit > 1:
temp_str = temp_str + twenty_ninety[third_digit] + " "
if third_digit == 1:
temp_str = temp_str + ten_nineteen[fourth_digit] + " "
else:
if fourth_digit:
temp_str = temp_str + one_ten[fourth_digit] + " "
if temp_str[-1] == " ": # If the last index is a space
temp_str = temp_str[0:-1] # Slice it
return temp_str
def convert(num):
units = ("", "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 ")
if num < 0:
return "minus "+convert(-num)
if num<20:
return units[num]
if num<100:
return tens[num // 10] +units[int(num % 10)]
if num<1000:
return units[num // 100] +"hundred " +convert(int(num % 100))
if num<1000000:
return convert(num // 1000) + "thousand " + convert(int(num % 1000))
if num < 1000000000:
return convert(num // 1000000) + "million " + convert(int(num % 1000000))
return convert(num // 1000000000)+ "billion "+ convert(int(num % 1000000000))
print(convert(100001333))
ones = {
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'}
tens = {
2: 'twenty', 3: 'thirty', 4: 'forty', 5: 'fifty', 6: 'sixty',
7: 'seventy', 8: 'eighty', 9: 'ninety'}
illions = {
1: 'thousand', 2: 'million', 3: 'billion', 4: 'trillion', 5: 'quadrillion',
6: 'quintillion', 7: 'sextillion', 8: 'septillion', 9: 'octillion',
10: 'nonillion', 11: 'decillion'}
def say_number(i):
"""
Convert an integer in to it's word representation.
say_number(i: integer) -> string
"""
if i < 0:
return _join('negative', _say_number_pos(-i))
if i == 0:
return 'zero'
return _say_number_pos(i)
def _say_number_pos(i):
if i < 20:
return ones[i]
if i < 100:
return _join(tens[i // 10], ones[i % 10])
if i < 1000:
return _divide(i, 100, 'hundred')
for illions_number, illions_name in illions.items():
if i < 1000**(illions_number + 1):
break
return _divide(i, 1000**illions_number, illions_name)
def _divide(dividend, divisor, magnitude):
return _join(
_say_number_pos(dividend // divisor),
magnitude,
_say_number_pos(dividend % divisor),
)
def _join(*args):
return ' '.join(filter(bool, args))
def test_say_number(data, expected_output):
"""Test cases for say_number(i)."""
output = say_number(data)
assert output == expected_output, \
"\n for: {}\n expected: {}\n got: {}".format(
data, expected_output, output)
test_say_number(0, 'zero')
test_say_number(1, 'one')
test_say_number(-1, 'negative one')
test_say_number(10, 'ten')
test_say_number(11, 'eleven')
test_say_number(99, 'ninety nine')
test_say_number(100, 'one hundred')
test_say_number(111, 'one hundred eleven')
test_say_number(999, 'nine hundred ninety nine')
test_say_number(1119, 'one thousand one hundred nineteen')
test_say_number(999999,
'nine hundred ninety nine thousand nine hundred ninety nine')
test_say_number(9876543210,
'nine billion eight hundred seventy six million '
'five hundred forty three thousand two hundred ten')
test_say_number(1000**1, 'one thousand')
test_say_number(1000**2, 'one million')
test_say_number(1000**3, 'one billion')
test_say_number(1000**4, 'one trillion')
test_say_number(1000**5, 'one quadrillion')
test_say_number(1000**6, 'one quintillion')
test_say_number(1000**7, 'one sextillion')
test_say_number(1000**8, 'one septillion')
test_say_number(1000**9, 'one octillion')
test_say_number(1000**10, 'one nonillion')
test_say_number(1000**11, 'one decillion')
test_say_number(1000**12, 'one thousand decillion')
test_say_number(
1-1000**12,
'negative nine hundred ninety nine decillion nine hundred ninety nine '
'nonillion nine hundred ninety nine octillion nine hundred ninety nine '
'septillion nine hundred ninety nine sextillion nine hundred ninety nine '
'quintillion nine hundred ninety nine quadrillion nine hundred ninety '
'nine trillion nine hundred ninety nine billion nine hundred ninety nine'
' million nine hundred ninety nine thousand nine hundred ninety nine')
phone_words = input('Phone: ')
numbered_words = {
'0': 'zero',
'1': 'one',
'2': 'two',
'3': 'three',
'4': 'four',
'5': 'five',
'6': 'six',
'7': 'seven',
'8': 'eight',
'9': 'nine'
}
output = ""
for ch in phone_words:
output += numbered_words.get(ch, "!") + " "
phone_words = numbered_words
print(output)
single_digit = {0: 'zero', 1: 'one', 2: 'two', 3: 'three', 4: 'four',
5: 'five', 6: 'six', 7: 'seven', 8: 'eight',
9: 'nine'}
teen = {10: 'ten', 11: 'eleven', 12: 'twelve', 13: 'thirteen',
14: 'fourteen', 15: 'fifteen', 16: 'sixteen',
17: 'seventeen', 18: 'eighteen', 19: 'nineteen'}
tens = {20: 'twenty', 30: 'thirty', 40: 'forty', 50: 'fifty', 60: 'sixty',
70: 'seventy', 80: 'eighty', 90: 'ninety'}
def spell_single_digit(digit):
if 0 <= digit < 10:
return single_digit[digit]
def spell_two_digits(number):
if 10 <= number < 20:
return teen[number]
if 20 <= number < 100:
div = (number // 10) * 10
mod = number % 10
if mod != 0:
return tens[div] + "-" + spell_single_digit(mod)
else:
return tens[number]
def spell_three_digits(number):
if 100 <= number < 1000:
div = number // 100
mod = number % 100
if mod != 0:
if mod < 10:
return spell_single_digit(div) + " hundred " + \
spell_single_digit(mod)
elif mod < 100:
return spell_single_digit(div) + " hundred " + \
spell_two_digits(mod)
else:
return spell_single_digit(div) + " hundred"
def spell(number):
if -1000000000 < number < 1000000000:
if number == 0:
return spell_single_digit(number)
a = ""
neg = False
if number < 0:
neg = True
number *= -1
loop = 0
while number:
mod = number % 1000
if mod != 0:
c = spell_three_digits(mod) or spell_two_digits(mod) \
or spell_single_digit(mod)
if loop == 0:
a = c + " " + a
elif loop == 1:
a = c + " thousand " + a
elif loop == 2:
a = c + " million " + a
number = number // 1000
loop += 1
if neg:
return "negative " + a
return a
string = input("Enter a string: ")
my_dict = {'0': 'zero', '1': 'one', '2': 'two', '3': 'three', '4': 'four', '5': 'five', '6': 'six', '7': 'seven', '8': 'eight', '9': 'nine'}
for item in string:
if item in my_dict.keys():
string = string.replace(item, my_dict[item])
print(string)
def num_to_word(num):
word_num = { "0": "zero", "00": "", "1" : "One" , "2" : "Two", "3" : "Three", "4" : "Four", "5" : "Five","6" : "Six", "7": "Seven", "8" : "eight", "9" : "Nine","01" : "One" , "02" : "Two", "03" : "Three", "04" : "Four", "05" : "Five","06" : "Six", "07": "Seven", "08" : "eight", "09" : "Nine", "10" : "Ten", "11": "Eleven", "12" :"Twelve", "13" : "Thirteen", "14" : "Fourteen", "15" : "Fifteen", "17":"Seventeen", "18" :"Eighteen", "19": "Nineteen", "20" : "Twenty", "30" : "Thirty", "40" : "Forty", "50" : "Fifty", "60" : "Sixty", "70": "seventy", "80" : "eighty", "90" : "ninety"}
keys = []
for k in word_num.keys():
keys.append(k)
if len(num) == 1:
return(word_num[num[0]])
elif len(num) == 2:
c = 0
for k in keys:
if k == num[0] + num[1]:
c += 1
if c == 1:
return(word_num[num[0] + num[1]])
else:
return(word_num[str(int(num[0]) * 10)] + " " + word_num[num[1]])
elif len(num) == 3:
c = 0
for k in keys:
if k == num[1] + num[2]:
c += 1
if c == 1:
return(word_num[num[0]]+ " Hundred " + word_num[num[1] + num[2]])
else:
return(word_num[num[0]]+ " Hundred " + word_num[str(int(num[1]) * 10)] + " " + word_num[num[2]])
elif len(num) == 4:
c = 0
for k in keys:
if k == num[2] + num[3]:
c += 1
if c == 1:
if num[1] == '0' :
return(word_num[num[0]]+ " Thousand " + word_num[num[2] + num[3]])
else:
return(word_num[num[0]]+ " Thousand " + word_num[num[1]]+ " Hundred " + word_num[num[2] + num[3]])
else:
if num[1] == '0' :
return(word_num[num[0]]+ " Thousand " + word_num[str(int(num[2]) * 10)] + " " + word_num[num[3]])
else:
return(word_num[num[0]]+ " Thousand " + word_num[num[1]]+ " Hundred " + word_num[str(int(num[2]) * 10)] + " " + word_num[num[3]])
elif len(num) == 5:
c = 0
d = 0
for k in keys:
if k == num[3] + num[4]:
c += 1
for k in keys:
if k == num[0] + num[1]:
d += 1
if d == 1:
val = word_num[num[0] + num[1]]
else:
val = word_num[str(int(num[0]) * 10)] + " " + word_num[num[1]]
if c == 1:
if num[1] == '0' :
return(val + " Thousand " + word_num[num[3] + num[4]])
else:
return(val + " Thousand " + word_num[num[2]]+ " Hundred " + word_num[num[3] + num[4]])
else:
if num[1] == '0' :
return(val + " Thousand " + word_num[str(int(num[3]) * 10)] + " " + word_num[num[4]])
else:
return(val + " Thousand " + word_num[num[2]]+ " Hundred " + word_num[str(int(num[3]) * 10)] + " " + word_num[num[4]])
num = [str(d) for d in input("Enter number: ")]
print(num_to_word(num).upper())