pta难题
pta中遇到的难题
pta中的难题
@[PTA python题]
一、判断回文字符串
回文就是字符串中心对称,从左向右读和从右向左读的内容是一样的。 输入一个字符串,判断该字符串是否为回文,只考虑数字和字母字符,字母的大小写没有区别。
1.输入样例
A man,a plan; cnalPanama2.输出样例
yes3.代码
代码如下(示例):
s = input().lower()
x = ''.join(filter(str.isalnum, s))
a = reversed(list(x))
if list(a) == list(x):
print("Yes")
else:
print("No")
4.小题总结
①本题需去除多余的字符,采用filter迭代,使用字符串的isalnum()函数仅保留数字和字母
② reversed() 的返回值类型 并不是list,而是返回一个反转的迭代器,所以需要时,要再套上一个list()
③list.reverse() 与 reversed(list)的区别:
list.reverse()改变原list列表,但没有返回值
reversed(list)不改变原来的列表,返回一个迭代器
二、输入一行字符串,并将它转换成10进制数输出
输入一行字符串,去掉非16进制字符,并将它转换成10进制数输出。
1.输入样例:
_ahg1*B2.输出样例:
a1B 25873.代码
代码如下(示例):
a= input()
b = list(a)
c = []
for i in range(len(b)):
if 'a'<= b[i] <= 'f' or 'A' <= b[i] <= 'B' or '0'<= b[i] <= '9':
c.append(b[i])
result = ''.join(c)
print(result)
print(int(result,16))
4.小题总结
①去除非16进制字符,需要我们对字符串进行操作,因需要去除的其他字符很多,字符串自带的strip(),replace()很难操作,故考虑采取转换为列表来处理
②列表中元素的类型为字符串类型(<class ‘str’>),采用字符串的比较
③ 列表–>字符串: str = ‘’.join(lst)
字符串–>列表: lst = list(str)
④10进制转16进制: hex(16) ==> 0x10
16进制转10进制: int(‘0x10’, 16) ==> 16
三、输入字符串,排序后输出最大字符及该字符在原字符串中的索引
输入字符串,排序后输出最大字符及该字符在原字符串中的索引。相同字符的索引取最大值。提示:用元组实现。
1.输入样例
Hello Python2.输出样例
y 73.代码
代码如下(示例):
a = input()
b = tuple(a)
for i in b:
if i == max(b):
result = i
num = len(b)-1-b[::-1].index(result)
print("{0:} {1:d}".format(max(b),num))
4.小题总结
①本题要求使用元组实现,元组是不可变对象
②本题要求相同元素索引取最大值,所以需用到元组的倒序排列,这里采用的是分片
③倒序后,元组的index函数随之发生变化,使用总长度求倒序前位序
四、列表数字元素加权和
输入一个嵌套列表,嵌套层次不限,根据层次,求列表元素的加权和。第一层每个元素 的值为:元素值1,第二层每个元素的值为:元素值2,第三层每个元素的值为:元素值*3, …,以此类推!
1.输入样例
[1,2,[3,4,[5,6],7],8]2.输出样例
723.代码
代码如下(示例):
def isnum(s,n):
sum = 0
for i in s:
if isinstance(i,int):
sum += n*i
if isinstance(i,list):
sum+= isnum(i,n+1)
return sum
print(isnum(eval(input()),1))
4.小题总结
①通过eval()和input()函数结合输入并处理列表
②列表中存在多种类型元素,本题采用
isinstance(object,classinfo)函数
其中object就是你的对象名称,classinfo就是你要判断的类型
五、输出全排列
输入整数n(3<=n<=7),编写程序输出1,2,…,n整数的全排列,按字典序输出。
1.输入样例
32.输出样例
123 132 213 231 312 3213.代码
代码如下(示例):
import random
n = int(input())
lst = []
sum = 1
for i in range(1,n+1):
sum = sum * i
lst.append(str(i))
s = set()
while len(s)<sum:
random.shuffle(lst)
s.add("".join(lst))
s = sorted(s)
for i in range(0,len(s)):
print(s[i])
exit(0)
4.小题总结
①全排列,采用集合set()来采集所有随机情况就不会出现重复
②需要注意的是列表的append()函数添加的元素需要为字符串类型
③ sorted函数作用就是将set集合中的s进行升序排列(字典序排序),然后将其赋值给原来的set集合s当中