Last active
April 4, 2016 11:13
-
-
Save dispensable/b5dd8cf2a578c3b366a1cdacd1d4c6d4 to your computer and use it in GitHub Desktop.
给出一个整型数字,返回代表该值的英文.
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
# _*_coding:utf-8_*_ | |
# !/usr/bin/env python | |
# 给出一个整型数字,返回代表该值的英文 | |
# 范围为[0, 1000) | |
# 思路: | |
# 是否是不规则读法; | |
# 两位数读法; | |
# 三位数 = n hundred and 两位数读法 | |
# 不规则读法 | |
englishnum = {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', 20: 'twenty', 30: 'thirty', 40: 'forty', 50:'fifty', | |
80: 'eighty', 100: 'one-hundred'} | |
def two_digit(number): | |
"""返回两位数的数字读法(不包括10-20)""" | |
numberint = int(number) | |
if 100 > numberint > 20: | |
firstnum = int(number[0]) | |
lastnum = int(number[1]) | |
tens = firstnum * 10 | |
# 处理以0结尾的数字 | |
if lastnum != 0: | |
if tens in englishnum: | |
return '%s-%s' % (englishnum[tens], englishnum[lastnum]) | |
else: | |
return '%sty-%s' % (englishnum[firstnum], englishnum[lastnum]) | |
else: | |
# 处理以0为结尾的不规则数字 | |
if tens in englishnum: | |
return englishnum[tens] | |
else: | |
return englishnum[firstnum] + 'ty' | |
# 处理开头为0的两位数 | |
elif (len(number) == 2) & (numberint in englishnum): | |
return englishnum[numberint] | |
else: | |
print 'not two digit' | |
def three_digit(number): | |
"""返回三位数的英文读法""" | |
numberint = int(number) | |
if 1000 > numberint >= 100: | |
# 三位数的百位 | |
tfirstnum = numberint / 100 | |
# 百位读法 | |
engtfirstnum = englishnum[tfirstnum] + '-hundred' | |
# 分离出余下的十位和个位 | |
restnum = numberint - tfirstnum * 100 | |
# 处理十位数为0的三位数 | |
if 0 < restnum < 10: | |
engrestnum = englishnum[restnum] | |
# 处理类似100,200的整百数 | |
elif restnum == 0: | |
return engtfirstnum | |
# 剩下的二位数 | |
else: | |
engrestnum = two_digit(str(restnum)) | |
return '%s and %s' % (engtfirstnum, engrestnum) | |
def engnum(number): | |
"""返回0-1000的数字的英语读法""" | |
numberint = int(number) | |
length = len(number) | |
# 检查不规则的英文读法的数字 | |
if numberint in englishnum: | |
return englishnum[numberint] | |
# 返回两位数的读法 | |
elif length == 2: | |
return two_digit(number) | |
# 返回三位数的读法 | |
elif length == 3: | |
return three_digit(number) | |
else: | |
raise Exception('Error, the number may not in 0-1000') | |
# 运行程序 | |
while True: | |
number = raw_input("please input number(0-1000): ") | |
print '%s in english is %s' % (number, engnum(number)) | |
print engnum(number) | |
continuerun = raw_input(""" | |
--------------------- | |
是否继续检查数字, | |
[1]继续 | |
[0]退出 | |
请输入数字并以回车结束: | |
---------------------\n | |
""") | |
if continuerun == '0': | |
break | |
# for i in range(100, 999, 13): | |
# i = str(i) | |
# print '%s in english is: %s' % (i, engnum(i)) |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment