【python】pythonPTA编程练习2

7-1 输出不重复的字符

分数 10
作者 马杨珲
单位 浙江科技学院
输入一个字符串,把最左边的10个不重复的字符(大小写算不同字符)挑选出来。 如不重复的字符不到10个,则按实际数目输出。

输入格式:
输入一个字符串s。

输出格式:
输出一个字符串,包含字符串s最左边10个不重复的字符。不到10个按实际输出。

输入样例1:
在这里给出一组输入。例如:

Hello world, hello python

输出样例1:
在这里给出相应的输出。例如:

Helo wrd,h

输入样例2:
在这里给出一组输入。例如:

succeed

输出样例2:
在这里给出相应的输出。例如:

suced
n = input() #输入一个字符串
s = ''#定义一个str变量来存储最后输出的字符串
for i in n:
    if i not in s:#这步去重
        if len(s)<10:#取前10个
            s+=i 
print(s)

7-2 找列表中最大元素的下标(高教社,《Python编程基础及应用》习题4-7

分数 5
作者 海洋饼干叔叔
单位 重庆大学
输入一个整数列表,找出整数列表中最大元素的下标,如果最大元素的个数超过1,那么请打印输出所有的下标。

输入格式:
数字1,数字2,数字3,…,数字n

输出格式:
下标1
下标2

下标k

输入样例:

3,2,3

输出样例:

0
2
a = list(map(int,(input().split(','))))
b=0
for i in range(len(a)):
    if a[i]>=b:
        b=a[i]
        print(i)

7-3 删除列表中的重复值(高教社,《Python编程基础及应用》习题4-8)

分数 5
作者 海洋饼干叔叔
单位 重庆大学
输入一个列表,删除其中的重复值,再输出。

要求
假设列表中存在k个值为a的元素,删除前k-1个元素,保留最后一个。
不同元素在列表中的相对位置不应被改变。

输入格式:
[元素1, 元素2, … , 元素n]

输出格式:
[元素1,元素2, … , 元素k]

输入样例:

[4,3,2,3,2,4,True]

输出样例:

[3, 2, 4, True]

提示:将形如"[1,3,5]"的字符串转换成列表可以使用eval()函数。

注意:不要在遍历列表的同时对列表进行增删改操作,这样会引起混乱,导致不正确的结果!

注意,输出格式应与输出样例一致,涉及空格,逗号等。

请接着往下看:你的程序真的对了吗?
多数读者的解题思路是制造一个v列表的复制品以避免在遍历v的同时删除v中的元素。该解决方案可以通过本题设置的全部测试。但这并不意味着该解决方案是“完全正确”的。请尝试下述输入:

[1,7,6,7,7,True,'a',9.8,'a',True]

很遗憾,程序将产生错误的输出:

[6, 7, 9.8, 'a', True]

产生这种意外结果的原因是:在Python里1和True是相等的! 0和False也是相等的! 在使用列表的count()函数,index()函数,remove()函数时,1和True, 0和False被不加区分地对待。

下述代码的执行结果证实了这一点:

v = [1,True,2,True,0,False]
print("count of 1:", v.count(1), ",count of True:", v.count(True))
print("count of 0:", v.count(0), ",count of False:", v.count(False))
print("index of True:",v.index(True), ",index of False",v.index(False))
v.remove(True)
print("after v.remove(True):",v)

其执行结果为:


count of 1: 3 ,count of True: 3     #1,True都同时为1或True
count of 0: 2 ,count of False: 2    #0,False都同时为0或False
index of True: 0 ,index of False 4  #下标0的1被视为True
after v.remove(True): [True, 2, True, 0, False]   #1被当作True移除了

以下代码可有效解决True和1 以及0和False的问题:

li = eval(input())#将字符串转化为列表
li2=[ele for ele in reversed(li)]#反向列表中list中的元素
count1=0#分别用来记录列表中1和0的个数
count2=0
li=[]
for i in li2:
        if not isinstance(i, bool) and i == 1:#把列表中所有的1存入列表li
            li.insert(0,1)
            count1+=1
        if not isinstance(i, bool) and i == 0:#把列表中所有的0存入列表li

                li.insert(0,0)
                count2+=1
        if i not in li:#除0,1以外不在li中的元素存入li,去重
            li.insert(0,i)
for x in range(count1-1):#list.remove(x):移除列表中x的第一个匹配项
    li.remove(1)
for j in range(count2-1):
    li.remove(0)
print(li)

7-4 统计字符串列表中每个字母出现的次数(高教社,《Python编程基础及应用》习题6-8)

分数 10
作者 海洋饼干叔叔
单位 重庆大学
统计字符串列表中每个字母出现的次数。

编写程序,使用eval()函数读入一个仅包含字符串对象的列表,然后统计该列表中每个字母出现的次数。
列表中的字符串对象仅包含小写英文字母。

输入格式:
一个仅包括字符串对象的列表,且全部字符串对象中仅出现小写英文字母。

输出格式:
字母,次数

字母,次数

(注意按a-z的顺序输出)

输入样例:

["aaab", "cccdz"]

输出样例:
在这里给出相应的输出。例如:

a,3
b,1
c,3
d,1
z,1
li = eval(input())
dict = {}
for i in li:
    for j in i:
        if j not in dict.keys():
            dict[j] = 1
        else:
            dict[j]+=1

for i in sorted(dict):
    print('{},{}'.format(i,dict[i]))

7-5 jmu-python-异常-学生成绩处理中级版

分数 10
作者 郑如滨
单位 集美大学
小明在帮老师处理数据,这些数据的第一行是n,代表有n行整数成绩需要统计。
接着连续输入n个成绩,如果中途输入错误(非整数)提示’Error! Reinput’,
并输出错误的数据。然后重新输入,直到输入n个正确的成绩才退出。如果整个
输入过程中没有错误数据,提示’All OK’。最后输出所有学生的平均值,保留两
位小
数。

注:该程序可以适当处理小错误,比如对于有些数据如果左右包含空格,先去掉
空格再行处理。

输入格式:
第一行为n,代表接下来要输入的正确行数。
然后输入成绩,输入错误则提示重输,直到输入n行正确的数据为止。

输出格式:
如果输入过程中无异常,需输出All OK。

输入样例1:

3
1
  2   
    3   

输出样例1:

All OK
avg grade = 2.00

输入样例2:

3
1
#
b
2
3

输出样例2:

Error for data #! Reinput
Error for data b! Reinput
avg grade = 2.00
n = int(input())#输入n个成绩
num = n
sum_grade = 0
flag = True
err_grade = ""
err_list = [] #用来存储错误的输入
while n:
    try:
        err_grade = input()
        grade = int(err_grade)#转化为int
        sum_grade += grade
        n = n-1
    except:#捕捉异常,将不是int型的字符存储在err_list列表中
        flag = False #flag表示输入有异常
        err_list.append(err_grade)
if flag:
    print("All OK")
else:#对异常的数据作出处理
    for grade in err_list:
        print("Error for data %s! Reinput" % grade)
print("avg grade = %.2f" % (sum_grade/num))

7-6 下标异常

分数 10
作者 马杨珲
单位 浙江科技学院
输入一个非空字符串和一个索引值,输出字符串中,该索引值对应的字符。若发现异常,则输出“输入下标有误”

输入格式:
输入一个非空的字符串,再输入一个索引值(Python中可以是正向索引,也可以是反向索引)。

输出格式:
输出字符串中,该索引值对应的字符。若发现异常(如输入的索引值太大或太小,超出字符串的索引值范围;如输入的索引值为非整数等),则输出“输入下标有误”

输入样例:
在这里给出一组输入。例如:

Hello World
-4

输出样例:
在这里给出相应的输出。例如:

o

输入样例:
在这里给出一组输入。例如:

abcd
4

输出样例:
在这里给出相应的输出。例如:

输入下标有误

输入样例:
在这里给出一组输入。例如:

Good
?

输出样例:
在这里给出相应的输出。例如:

输入下标有误
n = input()
try:
    i = int(input())
    print(n[i])
except:
    print('输入下标有误')

7-7 往返跑方阵

分数 10
作者 马杨珲
单位 浙江科技学院
所谓“往返跑方阵”,是指对任意给定的n,将1到n×n的整数依次填写到n×n的方阵中,从右上角第1个格子开始,向下填充;倒底后,往左移动一列,改变方向,向上填充;到最上面一行后,再向左一列,改变方向,向下填充;.…… 以此类推,直到将n×n的方阵填满。本题要求构造这样的“往返跑方阵”。

输入格式:
输入一个正整数n(1⩽n⩽10 )

输出格式:
输出n×n的往返跑方阵。每行n个数字,每个数字占3位,右对齐

输入样例1:
在这里给出一组输入。例如:

3

输出样例1:
在这里给出相应的输出。例如:

7  6  1
8  5  2
9  4  3

输入样例2:
在这里给出一组输入。例如:

5

输出样例2:
在这里给出相应的输出。例如:

21 20 11 10  1
22 19 12  9  2
23 18 13  8  3
24 17 14  7  4
25 16 15  6  5
n = int(input())
i = 0#行下标
j = n-1 #列下标
list1 = [[0 for j in range(n)] for j in range(n)]# 创建一个nxn的矩阵
num = 1
while True:
    while i < n:#从上往下放
        list1[i].insert(0, num)
        num += 1    
        i +=1 #将某列放满
    i=n-1 #从最后一行开始放数字
    j -= 1#给n-1列放数字
    if j < 0:#循环终止条件,意味着放满了!
        break
    while i >=0:#将n-1列从下往上放,直至放满
        list1[i].insert(0, num)
        num += 1
        i -= 1 
    i = 0 #从第一行开始放数字
    j -= 1 #放几列减几次,直到放满,循环终止
    if j < 0:
        break
for i in range(n):#遍历输出矩阵
    for j in range(n):
        if j == n-1:
            # print('{:>2d}')
            print("%3d" % list1[i][j])
        else:
            print("%3d" % list1[i][j], end='')

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值