'''编写算法将数字编号翻译为英文编号。例如:35706,翻译为:three-five-seven-zero-six
算法设计1:
1、将英文one--nine存入数组中,对应下标0--9,便于随机存取
2、通过求余,取整运算,渠道编号的各个位数字,用这个数字做下标,取到对应的英文数字
3、考虑到输入的结果是从高位到低位进行的,而取各位数字,比较简单的方法是从低位到高位开始通过求余和整除运算逐步完成的。所以还要另外开辟一个数组,用来存储从低位到高位翻译好的结果,并同时设置变量记录编号的位数,最后倒着从高位到低位输出结果
'''
def main1():
a = []
for i in range(0,10):
a.append(-1)
eng = ['zero','one','two','three','four','five','six','seven','eight','nine']
num1 = int(input("请输入一个整数:"))
num2 = num1
ind =0
while num2 != 0:
a[ind] =num2 % 10
ind +=1
num2 //= 10
print("%d翻译为英文:%s" %(num1,eng[a[ind-1]]),end="")
for i in range(ind-2,-1,-1):
print("-%s" %eng[a[i]],end="")
#注:当num1=0时,该方法无法进行
'''
算法设计2:
数字编号按字符串输入,更符合实际:
1、用数值类型无法存储以0开头的编号,如‘0001’按数值类型存储只能存储为1
2、按字符串处理编号可以方便的从左到右(从高位到低位)进行,与输出过程相符合,不需要开辟数组用来存储翻译结果
3、无须通过算术运算来取编号的各位数字
算法要点:
由字符串中取出的‘数字’编号是字符类型,根据字符‘0’的ASCII码值为48,则“字符-48”就是字符所对应的数字值,用它做下标就可以而完成翻译。
'''
def main2():
eng = ['zero','one','two','three','four','five','six','seven','eight','nine']
num =str(input("请输入数字编码,(会自动转换为字符串类型):"))
if len(num) == 0:
print("您的输入有误!")
else:
print("%s翻译为英文:%s" %(num,eng[ord(num[0])-48]),end="") #使用ord()函数将字符转化为ASCII码值
for i in range(1,len(num)):
print("-%s" % eng[ord(num[i])-48], end="")
'''
算法设计3:
将输入的字符串逐一遍历,从预先设定好的字典中查找出对应的值。
'''
def main3():
eng = {'1':'one','2':'two','3':'three','4':'four','5':'five','6':'six','7':'seven','8':'eight','9':'nine','0':'zero'}
kv=""
num = str(input("请输入数字编码,(会自动转换为字符串类型):"))
for i in num:
kv += eng[i]+'-'
print("%s翻译为英文:%s" %(num,kv[:-1]))
if __name__ == '__main__':
main1()
print(' ')
main2()
print(' ')
main3()
运行结果:
请输入一个整数:23456
23456翻译为英文:two-three-four-five-six
请输入数字编码,(会自动转换为字符串类型):9876
9876翻译为英文:nine-eight-seven-six
请输入数字编码,(会自动转换为字符串类型):1239
1239翻译为英文:one-two-three-nine