Created
April 4, 2016 11:29
-
-
Save dispensable/16d4efd0afebd4f1becf1c9a4a42cc08 to your computer and use it in GitHub Desktop.
给出一个整型数字,返回代表该值的英文(0-1000)
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' | |
# 三位数剩余的十位和个位视为两位数用and连接 | |
restnum = number[1:3] | |
engrestnum = two_digit(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') | |
def cli_english_num(): | |
"""命令行界面""" | |
while True: | |
number = raw_input("please input number(0-1000): ") | |
print '%s in english is %s' % (number, engnum(number)) | |
continuerun = raw_input(""" | |
--------------------- | |
是否继续检查数字, | |
[1]继续 | |
[0]退出 | |
请输入数字并以回车结束: | |
---------------------\n | |
""") | |
if continuerun == '0': | |
break | |
cli_english_num() |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment