每日一题——PAT乙级1002-写出这个数

写在前面

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

问章末尾有详细的类型的反复转化。

题意

如果想听讲解的(自己录的,各位勿喷):PAT (Basic Level) Practice (中文)—乙级—Python-1002 写出这个数 (20 分)_哔哩哔哩_bilibili

1002 写出这个数 (20 分)

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

输入格式:

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

输出格式:

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

输入样例:

1
1234567890987654321123456789

点击并拖拽以移动

输出样例:

1
yi san wu

点击并拖拽以移动

思路讲解

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

代码实现

1
2
3
4
5
6
7
8
9
10
11
12
13
14
a=input()
sum=0
for i in a:
b=int(i)
sum+=b
c=str(sum)
dict={'1':'yi','2':'er','3':'san','4':'si','5':'wu','6':'liu','7':'qi','8':'ba','9':'jiu','0':'ling'}
d=0
for j in c:
d+=1
if d==len(c):
print(dict[j],end='')
else:
print(dict[j],end=' ')

点击并拖拽以移动

复杂的类型转化(你去pycharm跑一下就知道怎么回事了,骨灰级详细):

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
print("请输入:")
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=' ')