设为首页 收藏本站
查看: 1146|回复: 0

[经验分享] python:将数字转换成用英文表达的程序

[复制链接]

尚未签到

发表于 2017-5-6 10:06:18 | 显示全部楼层 |阅读模式
  前几天无意中看到了一篇文章列了很多数字的英文表达方式(http://blog.csdn.net/sun7545526/article/details/8122416),正好这段时间在学习python,所以写了个简单的程序用来将数字翻译成英文的表达方式,例如输入123,返回 one hundred and twenty-three
,目前该程序可以表示的范围为0-999,999,999,999.由于本人是个python新手,所以如果用的不完善的地方,还请帮忙改正

  


'''
convert number to string, number range is 0-999,999,999,999 and must be integer
Created on 2012-10-31
@author: Eric
'''
import locale;
NUMBER_CONSTANT = {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" };
IN_HUNDRED_CONSTANT = {2:"twenty", 3:"thirty", 4:"forty", 5:"fifty", 6:"sixty", 7:"seventy", 8:"eighty", 9:"ninety"}
BASE_CONSTANT = {0:" ", 1:"hundred", 2:"thousand", 3:"million", 4:"billion"};
#supported number range is 1-n billion;
def translateNumberToEnglish(number):
if str(number).isnumeric():
if str(number)[0] == '0' and len(str(number)) > 1:
return translateNumberToEnglish(int(number[1:]));
if int(number) < 20:
return NUMBER_CONSTANT[int(number)];
elif int(number) < 100:
if str(number)[1] == '0':
return IN_HUNDRED_CONSTANT[int(str(number)[0])];
else:
return IN_HUNDRED_CONSTANT[int(str(number)[0])] + "-" + NUMBER_CONSTANT[int(str(number)[1])];
else:
locale.setlocale(locale.LC_ALL, "English_United States.1252");
strNumber = locale.format("%d"    , number, grouping=True);
numberArray = str(strNumber).split(",");
stringResult = "";
groupCount = len(numberArray) + 1;
for groupNumber in numberArray:
if groupCount > 1 and groupNumber[0:] != "000":
stringResult += str(getUnderThreeNumberString(str(groupNumber))) + " ";
else:
break;
groupCount -= 1;
if groupCount > 1:
stringResult += BASE_CONSTANT[groupCount] + ",";
endPoint = len(stringResult) - len(" hundred,");
#return stringResult[0:endPoint];
return stringResult;
else:
print("please input a number!");
#between 0-999
def getUnderThreeNumberString(number):
if str(number).isnumeric() and len(number) < 4:
if len(number) < 3:
return translateNumberToEnglish(int(number));
elif len(number) == 3 and number[0:] == "000":
return " ";
elif len(number) == 3 and number[1:] == "00":
return NUMBER_CONSTANT[int(number[0])] + "  " + BASE_CONSTANT[1];
else:   
return NUMBER_CONSTANT[int(number[0])] + "  " + BASE_CONSTANT[1] + " and " + translateNumberToEnglish((number[1:]));
else:
print("number must below 1000");

def testTranslateNumberToEnglish():
print("0: " + translateNumberToEnglish(0));
print("9: " + translateNumberToEnglish(9));
print("33: " + translateNumberToEnglish(33));
print("40: " + translateNumberToEnglish(40));
print("100: " + translateNumberToEnglish(100));
print("103: " + translateNumberToEnglish(103));
print("123: " + translateNumberToEnglish(123));
print("1,121,912  " + translateNumberToEnglish(1121912));
print("211,121,900  " + translateNumberToEnglish(211121900));
print("11,000,000  " + translateNumberToEnglish(11000000));
print("1,111,121,912  " + translateNumberToEnglish(111121912));
print("2,211,121,900  " + translateNumberToEnglish(2211121900));
print("1,111,000,000  " + translateNumberToEnglish(1111000000));
if __name__ == '__main__':
testTranslateNumberToEnglish();


  输出的结果为:
  0: zero

9: nine

33: thirty-three

40: forty

100: one hundred

103: one hundred and three

123: one hundred and twenty-three

1,121,912 one million,one hundred and twenty-one thousand,nine hundred and twelve

211,121,900 two hundred and eleven million,one hundred and twenty-one thousand,nine hundred

11,000,000 eleven million,

1,111,121,912 one hundred and eleven million,one hundred and twenty-one thousand,nine hundred and twelve

2,211,121,900 two billion,two hundred and eleven million,one hundred and twenty-one thousand,nine hundred

1,111,000,000 one billion,one hundred and eleven million,

运维网声明 1、欢迎大家加入本站运维交流群:群②:261659950 群⑤:202807635 群⑦870801961 群⑧679858003
2、本站所有主题由该帖子作者发表,该帖子作者与运维网享有帖子相关版权
3、所有作品的著作权均归原作者享有,请您和我们一样尊重他人的著作权等合法权益。如果您对作品感到满意,请购买正版
4、禁止制作、复制、发布和传播具有反动、淫秽、色情、暴力、凶杀等内容的信息,一经发现立即删除。若您因此触犯法律,一切后果自负,我们对此不承担任何责任
5、所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其内容的准确性、可靠性、正当性、安全性、合法性等负责,亦不承担任何法律责任
6、所有作品仅供您个人学习、研究或欣赏,不得用于商业或者其他用途,否则,一切后果均由您自己承担,我们对此不承担任何法律责任
7、如涉及侵犯版权等问题,请您及时通知我们,我们将立即采取措施予以解决
8、联系人Email:admin@iyunv.com 网址:www.yunweiku.com

所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其承担任何法律责任,如涉及侵犯版权等问题,请您及时通知我们,我们将立即处理,联系人Email:kefu@iyunv.com,QQ:1061981298 本贴地址:https://www.yunweiku.com/thread-373670-1-1.html 上篇帖子: Python低内耗读取文件的二分查找单词 下篇帖子: Python单例模式和Borg惯用法及相关问题
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

扫码加入运维网微信交流群X

扫码加入运维网微信交流群

扫描二维码加入运维网微信交流群,最新一手资源尽在官方微信交流群!快快加入我们吧...

扫描微信二维码查看详情

客服E-mail:kefu@iyunv.com 客服QQ:1061981298


QQ群⑦:运维网交流群⑦ QQ群⑧:运维网交流群⑧ k8s群:运维网kubernetes交流群


提醒:禁止发布任何违反国家法律、法规的言论与图片等内容;本站内容均来自个人观点与网络等信息,非本站认同之观点.


本站大部分资源是网友从网上搜集分享而来,其版权均归原作者及其网站所有,我们尊重他人的合法权益,如有内容侵犯您的合法权益,请及时与我们联系进行核实删除!



合作伙伴: 青云cloud

快速回复 返回顶部 返回列表