文章目录
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='')