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