当前位置:网站首页>每日一题——PAT乙级1002题

每日一题——PAT乙级1002题

2022-07-07 21:49:00 InfoQ

一、PAT (Basic Level) Practice (中文)第1002题

这个题挺有意思,题目真的很简单,但是对于Python考察的是各种type怎么计算。因为这个老子看来半天代码,感觉没错啊,但是吧代码放到pycharm上一看报错就知道怎么回事了,那个字符之间不可以计算。虽然浪费了我好长一段时间,但是也对数据类型计算也有了更深的了解

问章末尾有详细的类型的反复转化,自己去pycharm跑一下就知道怎么回事了。

1002 写出这个数 (20 分)

读入一个正整数 n,计算其各位数字之和,用汉语拼音写出和的每一位数字。

输入格式:

每个测试输入包含 1 个测试用例,即给出自然数 n 的值。这里保证 n 小于 10100。

输出格式:

在一行内输出 n 的各位数字之和的每一位,拼音数字间有 1 空格,但一行中最后一个拼音数字后没有空格。

输入样例:

1234567890987654321123456789

输出样例:

yi san wu

思路:

#题目大意:给一段数,把各个位置的数相加,得数在变成汉语拼音
#首先要接受n,n是一个字符串形式即str()
#把n变成列表形式list(),把每一个数相加,即为又回到了str模式
#在变成列表中的每一个数,为每一个数匹配一个汉语拼音
#所以我们还要建立一个字典,根据key匹配value
#因为输出样式里面有空格还要再加入一个循环,但是注意截止条件,最后一个不输出“ ”,即当等于len(列表),不输出空格

代码:

transform={'1':'yi','2':'er','3':'san','4':'si','5':'wu','6':'liu','7':'qi','8':'ba','9':'jiu','0':'ling'}
#输入
a=input() 
#将输入的数字字符串转换为列表的形式
b=list(a)
 #将数字中的每一位求和
c=sum(int(i) for i in b)
 #求和结果转为字符串形式,用于计算长度
d=str(c)
 #标记位,用来判断for循环的最后一个
flag=0
for j in d:
 flag=flag+1
#如果为for循环的最后一位,则不输出空格
 if flag==len(d):
 #print默认的end为end='\n',先根据情况将其修改
 print(transform[j],end='')
 else:
 print(transform[j],end=' ')

详细的运算流程(pycharm运行)

transform={'1':'yi','2':'er','3':'san','4':'si','5':'wu','6':'liu','7':'qi','8':'ba','9':'jiu','0':'ling'}
a=input()
print("input输入的类型:",type(a))

b=list(a)
print("转发化为列表的b为:",b)

#c=sum(int(i) for i in b)
sum=0
for i in a:
 s=int(i)
 sum=sum+s
print('sum的数据类型:',type(sum)," 结果: ",sum)

d=str(sum)
print("转化为字符串形式的sum"," 类型:",type(d)," 字符串形式的数:",d," 他的长度:",len(d))

flag=0
for j in d:
 flag=flag+1
 if flag==len(d):
 print(transform[j],end='')
 else:
 print(transform[j],end=' ')

原网站

版权声明
本文为[InfoQ]所创,转载请带上原文链接,感谢
https://xie.infoq.cn/article/ccba2251298604b2e43c24435