Skip to content

Instantly share code, notes, and snippets.

@dispensable
Created April 4, 2016 11:29
Show Gist options
  • Save dispensable/16d4efd0afebd4f1becf1c9a4a42cc08 to your computer and use it in GitHub Desktop.
Save dispensable/16d4efd0afebd4f1becf1c9a4a42cc08 to your computer and use it in GitHub Desktop.
给出一个整型数字,返回代表该值的英文(0-1000)
# _*_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