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))