一、PAT (Basic Level) Practice (中文)第1002题
这个题挺有意思,题目真的很简单,但是对于Python考察的是各种type怎么计算。因为这个老子看来半天代码,感觉没错啊,但是吧代码放到pycharm上一看报错就知道怎么回事了,那个字符之间不可以计算。虽然浪费了我好长一段时间,但是也对数据类型计算也有了更深的了解
问章末尾有详细的类型的反复转化,自己去pycharm跑一下就知道怎么回事了。
读入一个正整数 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=' ')