Python5 列表与元组
一、判断题
1-11
下面的程序当输入是 c d e a时,输出是 a c d e。 F
a = input().split(" ")
for i in a.sort():
print(i,end=" ")
sort是个排序函数,但是输入的字符串不是可遍历的对象。
1-12
下面程序输出的是:yes。 F
lst=["1","2","3","4","5"]
s1=""
for c in lst:
s1=s1+c+" "
s2=" ".join(lst)
if s1==s2:
print("yes")
else:
print("no")
s1比s2多了一个空格
1-14
1-14
表达式[4,5]*3
的结果是[[4,5],[4,5],[4,5]]
。
F
print([[4,5]]*3)
print([4,5]*3)
'''
[[4, 5], [4, 5], [4, 5]]
[4, 5, 4, 5, 4, 5]
'''
是取中括号中的元素重复
1-15
下面程序的输出是3。 F
lst=[34,6,7,0,0,0,9]
n=0
for i in lst:
if i==0:
lst.remove(i)
n+=1
print(n)
输出结果是2,主要是删除一个元素后面的索引号也会改变,所以只找到两个0。
lst=[34,6,7,0,0,0,9]
ls=[34,6,7,0,0,0,9]
n=0
for i in lst:
if i==0:
ls.remove(i)
n+=1
print(n)
这是改正之后的程序,这样就不用害怕列表的索引修改之后会影响找到指定元素了。
1-17
下面程序输出值是1。 F
data=[[1]*3]*3
data[0][1]=45
print(data[2][1])
其实是:
data=[[1]*3]*3
data[0][1]=45
print(data[2][1])
print(data)
'''
45
[[1, 45, 1], [1, 45, 1], [1, 45, 1]]
'''
在列表中的元素做乘法运算,是略过第一个中括号的,而操作嵌套列表时,列表中的相同元素的地址是一样的,所以都会改变。
1-18
下面程序输出的是:15264771766。 F
dic1={"ONE" : 15264771766,"Kate" : 13063767486,"Rose" : 15146046882,"Chise" : 13606379542,"Jason" : 13611987725}
dic2={"ONE" : 15619397270,"TWO" : 15929494512,"THREE" : 13794876998,"FOUR" : 18890393268,"FIVE" : 13292597821}
dic3={**dic1,**dic2}
print(dic3["ONE"])
1-25
对于 x=['p','y','t','h','o','n']
,y=[1,2,3]
,经过 x+=y
与 x.append(y)
两种运算, x 的结果相同。
F
四、编程题
7-6 sdut-字母替换 (10 分)
编写程序,将输入字符串中的大写英文字母按以下对应规则替换,其他字符不变。
(Python实现提示:转换表用元组实现)
原字母 对应字母
A Z
B Y
C X
D W
... ...
X C
Y B
Z A
输入格式:
在一行中输入字符串。
输出格式:
在一行中给出替换完成后的字符串。
输入样例:
This is a pen.
结尾无空行
输出样例:
在这里给出相应的输出。例如:
Ghis is a pen.
结尾无空行
这是第一次提交的错误答案:
def f(s):
for i in s:
num = ord(i) # 得到ASCII码
if (65 <= num <= 90): # 如果是大写字母
s = s.replace(i, chr(155 - num))
return s
# s = "ABCDEFGHIJKLMNOPQRSTUVWXYZ"
s = input()
ev = len(s) // 2
s1 = s[:ev]
s2 = s[ev:-1]
s = f(s1) + f(s2) + f(s[-1])
print(s)
首先说说为什么不能这么写,因为一长串字符串,一旦有相等的字符,就会被认为是地址相同,这样出来的可能引起连锁反应,然后就错了,就比如输入ZABB输出的是ZZYY,首先是Z变成了A,然后两个A地址相同,后面一个A变成Z,然后前一个A也跟着变成Z,因为这种弊端,不能使用字符串,要用列表。
下面是正确答案:
sw = []
for i in range(26):
sw = sw + [(chr(65+i),chr(65+25-i))]
lst = input()
lst1 = [sw[ord(i)-65][1] if 'A'<=i<='Z' else i for i in lst]
print(''.join(lst1))