pta难题

pta中遇到的难题


pta中的难题
@[PTA python题]


一、判断回文字符串

回文就是字符串中心对称,从左向右读和从右向左读的内容是一样的。 输入一个字符串,判断该字符串是否为回文,只考虑数字和字母字符,字母的大小写没有区别。

1.输入样例

A man,a plan; cnalPanama

2.输出样例

yes

3.代码

代码如下(示例):

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*B

2.输出样例:

a1B 2587

3.代码

代码如下(示例):

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 Python

2.输出样例

y 7

3.代码

代码如下(示例):

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.输出样例

72

3.代码

代码如下(示例):

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.输入样例

3

2.输出样例

123 132 213 231 312 321

3.代码

代码如下(示例):

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当中

Logo

为开发者提供学习成长、分享交流、生态实践、资源工具等服务,帮助开发者快速成长。

更多推荐