|
发表于 2020-2-18 11:26:36
|
显示全部楼层
好难,终于做出来了,不确定要不要加and,于是按照网上的说法,在百倍与十位之间加了and
- def fun332(num):
- if num >= 0 and num < 2147483648:
- unit = ['Hundred ', ' Thousand ', ' Million ', ' Billion ']
- numbers = {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: 'Fourty ', 50: 'Fifty ', 60: 'Sixty ', 70: 'Seventy ', 80: 'Eighty ', 90: 'Ninety '}
- list1 = [int(n) for n in str(num)]
- list1.reverse()
- l = len(list1)
- gn = l//3+1 if l%3 else l//3
- glist = []
- for i in range(gn):
- glist.append(list1[i*3:i*3+3])
- temp = []
- for gl in glist:
- temp.append(num2en(gl, numbers, unit))
- result = ''
- for i in range((len(temp)-1), 0, -1):
- if temp[i]:
- result += temp[i] + unit[i]
- else:
- result += temp[i]
- return result + temp[0]
- else:
- print("请输入小于2147483648的正整数!")
- return None
-
- def num2en(gl, numbers, unit):
- result = ''
- if len(gl) == 1:
- result += numbers[gl[0]]
- elif len(gl) == 2:
- result = num2en2(gl, numbers)
- else:
- n2 = num2en2(gl[:2], numbers)
- if gl[2]:
- if n2:
- result = numbers[gl[2]]+unit[0]+'And '+n2
- else:
- result = numbers[gl[2]]+unit[0]
- else:
- result = 'And '+ n2 if n2 else ''
-
- return result.strip()
- def num2en2(gl2, numbers):
- result = ''
- if gl2[0] == 0:
- result = numbers[gl2[1]*10]
- else:
- if gl2[1] == 1:
- result = numbers[gl2[1]*10 + gl2[0]]
- else:
- result = numbers[gl2[1]*10] + numbers[gl2[0]]
- if 'Zero' in result:
- result = result.replace('Zero', '')
- return result.strip()
- print(fun332(1400000))
复制代码 |
|