读入一个正整数 n,计算其各位数字之和,用汉语拼音写出和的每一位数字。
输入格式:
每个测试输入包含 1 个测试用例,即给出自然数 n 的值。这里保证 n 小于 10100。
输出格式:
在一行内输出 n 的各位数字之和的每一位,拼音数字间有 1 空格,但一行中最后一个拼音数字后没有空格。
输入样例:
1234567890987654321123456789
输出样例:
yi san wu
python实现:
def calculate():
dic = {'0': 'ling', '1': 'yi', '2': 'er', '3': 'san', '4': 'si', '5': 'wu', '6': 'liu', '7': 'qi', '8': 'ba', '9': 'jiu'}
sum = 0
output = []
n = input()
for i in n:
sum = sum + eval(i) # 135
for i in str(sum):
if i in dic.keys():
output.append(dic[i])
print(" ".join(output))
def main():
calculate()
if __name__ == '__main__':
main()
![](https://i-blog.csdnimg.cn/blog_migrate/a9cd5d31cd65460f9bbc0c8093995528.png)
当出现 固定的成对匹配时要想到使用字典 dic{ key: value }
eval() 函数:又称为评估函数,它的功能是去掉参数最外侧引号,变成python可执行的语句,并执行语句的函数。
def test():
a = '123'
sum = 0
for i in a:
print(i) # str类型的1 2 3
sum = sum + eval(i) # eval()函数可以把str类型的数字转换为int类型
print(sum) # int类型的6
python中可以直接for i in s,表示从头开始遍历string类型的s中的每一位。因此当遇到要遍历很长的一串数字的每一位的时候可以考虑把该数字转换为str类型,使用for循环
eval(i) 可以把str类型的i直接转换为int。例如eval('1+2')的结果为int类型的3
对于字典dic = {'0': 'ling', '1': 'yi', '2': 'er', '3': 'san', '4': 'si', '5': 'wu'}
def test2():
dic = {'0': 'ling', '1': 'yi', '2': 'er', '3': 'san', '4': 'si', '5': 'wu'}
a = dic.keys()
print(a)
a = dic.keys()的结果为:dict_keys(['0', '1', '2', '3', '4', '5', '6', '7', '8', '9']),注意这是一个list[]
def test2():
dic = {'0': 'ling', '1': 'yi', '2': 'er', '3': 'san', '4': 'si', '5': 'wu'}
for i in dic:
print(dic[i])
dic[i] 表示把关键字为i 的value输出,因此结果为:
ling
yi
er
san
si
wu
.join() 法用于将序列中的元素 以指定的字符连接生成一个 新的字符串
例如:
symbol = "-"
seq = ("a", "b", "c") # 字符串string序列
print symbol.join(seq)
结果为:a-b-c
遇到结果之间用指定字符链接,要想到.joint()方法
在本题答案中
def calculate_re():
dic = {'0': 'ling', '1': 'yi', '2': 'er', '3': 'san', '4': 'si', '5': 'wu', '6': 'liu', '7': 'qi', '8': 'ba', '9': 'jiu'}
n = input()
sum = 0
output = []
for i in n:
sum = sum + eval(i)
for i in str(sum):
if i in dic.keys():
output.append(dic[i])
print(output)
print(" ".join(output))
如果不使用.join(),直接print(output),结果为:['yi', 'san', 'wu']
使用.join(),print(" ".join(output)),结果为:yi san wu