PTA題目03


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+=yx.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))


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM