第三章 使用字符串、列表和元組
一、判斷題
1.'age'+23不是正確的表達(dá)式。T
2.列表可以用find()函數(shù)來(lái)搜索數(shù)據(jù)是否在列表中。F
????????find()函數(shù)是字符串處理函數(shù);Python find() 方法檢測(cè)字符串中是否包含子字符串 str ,如果指定 beg(開(kāi)始) 和 end(結(jié)束) 范圍,則檢查是否包含在指定范圍內(nèi),如果包含子字符串返回開(kāi)始的索引值,否則返回-1。
????????str.find(str, beg=0, end=len(string))
????????str---a指定檢索的字符串
????????beg---開(kāi)始檢索,默認(rèn)為0
????????end---結(jié)束檢索,默認(rèn)為字符串的長(zhǎng)度
????????返回值
????????如果包含子字符串返回開(kāi)始的索引值,否則返回-1。
3.將列表中的元素順序打亂的函數(shù)shuffle()不是random模塊的函數(shù)或方法。F
????????random.shuffle(列表):將列表內(nèi)元素隨機(jī)排列
4.字符串和列表都是序列類(lèi)型。T
5.可以通過(guò)[]訪問(wèn)字符串的某個(gè)字符,也可將它修改成其他字符。F
????????my_string = "Hello"
????????# 訪問(wèn)字符串中的某個(gè)字符
????????char = my_string[1]? # 這將得到 'e'
????????# 嘗試修改字符串中的字符(這不會(huì)起作用,因?yàn)樽址遣豢勺兊模?/span>
????????# my_string[0] = 'J'? # 這會(huì)引發(fā)錯(cuò)誤
????????# 創(chuàng)建一個(gè)新的字符串來(lái)實(shí)現(xiàn)修改
????????new_string = 'J' + my_string[1:]? # 這樣可以得到 'Jello'
????????print(new_string)? # 輸出 'Jello'
6.字符串對(duì)象和元組對(duì)象是不可變對(duì)象,列表對(duì)象為可變對(duì)象。T
7.列表lst=[12, -5, -22, -10, -26, 35, 0, 49, 3, -21],lst[::]的結(jié)果是[12, -5, -22, -10, -26, 35, 0, 49, 3, -21]。T
????????b[:] ##單獨(dú)一個(gè)冒號(hào),代表從頭取到尾,步長(zhǎng)默認(rèn)為1
????????b[::]##單獨(dú)兩個(gè)冒號(hào)一樣代表從頭取到尾,步長(zhǎng)默認(rèn)為1
????????b[::-1]##注意,兩個(gè)冒號(hào)后面是步長(zhǎng),步長(zhǎng)為1,故應(yīng)從右往左取
8.列表lst=[12, -5, -22, -10, -26, 35, 0, 49, 3, -21],lst[::-1]的結(jié)果是[-21, 3, 49, 0, 35, -26, -10, -22, -5, 12]。T
9.列表lst=[12, -5, -22, -10, -26, 35, 0, 49, 3, -21],lst[::2]的結(jié)果是[12, -22, -26, 0, 3]。T
10.列表lst=[12, -5, -22, -10, -26, 35, 0, 49, 3, -21],lst[1::2]的結(jié)果是[12, -22, -26, 0, 3]。F
11.列表lst=[12, -5, -22, -10, -26, 35, 0, 49, 3, -21],lst[3:8:2]的結(jié)果是[-10, 35, 49]。T
12. 列表lst=[12, -5, -22, -10, -26, 35, 0, 49, 3, -21],lst[0:100]的結(jié)果是錯(cuò)誤。F
13. 列表lst=[12, -5, -22, -10, -26, 35, 0, 49, 3, -21],lst[100:]的結(jié)果是[]。T
14. 列表lst=[12, -5, -22, -10, -26, 35, 0, 49, 3, -21],lst[100]的結(jié)果是運(yùn)行錯(cuò)誤
????????a[0] ##單個(gè)數(shù),代表位數(shù),第0位就是a里面的第一位,切割一位
15.下面的程序當(dāng)輸入是 c d e a時(shí),輸出是 a c d e。F
????????a = input().split(" ")['', 'c', 'd', 'e', 'a']
????????for i in a.sort():???
???????????? print(i,end=" ") 下一個(gè)print接著上一個(gè)在同一行輸出
????????list.sort( key, reverse ),返回None,默認(rèn)升序list1.sort(reverse=False);
????????降序:list1.sort(reverse=True),代碼錯(cuò)了
????????sort()是一個(gè)列表(或可變序列)的方法,它直接對(duì)原始列表進(jìn)行排序,而不會(huì)創(chuàng)建新的對(duì)象。它改變?cè)剂斜淼捻樞?,并且不返回任何值(返回值為None)。sorted()是一個(gè)內(nèi)置函數(shù),接受可迭代對(duì)象作為參數(shù),并返回一個(gè)新的已排序的列表,而不改變?cè)紝?duì)象。
????????總的來(lái)說(shuō),sort()直接作用于列表本身并修改其順序,而sorted()則返回一個(gè)新的已排序列表,不影響原始數(shù)據(jù)。
16.表達(dá)式:"34" in "1234"==True?返回值是True。F
????????對(duì)于列表只能使用in檢查單個(gè)數(shù)據(jù)是否在列表中,對(duì)于字符串,in可以檢查某個(gè)字符串是否是另一個(gè)字符串的一部分,結(jié)果是bool值
????????#這個(gè)是先運(yùn)算 運(yùn)算優(yōu)先級(jí) == 高于in '1234' == True? ,這個(gè)結(jié)果為 False,然后再運(yùn)算 '34' in False,所以結(jié)果是False
????????print(? '34' in '1234' == True )
????????##這個(gè)是先運(yùn)算括號(hào)里面的內(nèi)容,為T(mén)rue,然后再運(yùn)算 True == True,結(jié)果還是 True
????????print(? ( '34' in '1234' ) == True )
17.下面程序輸出是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 = 1 2 3 4 5 (有空格)
????????s2 = 1 2 3 4 5(無(wú)空格)
????????. join():將序列(也就是字符串、元組、列表、字典)中的元素以指定的字符連接生成一個(gè)新的字符
????????+可實(shí)現(xiàn):數(shù)字相加,字符串拼接,列表合并,元組合并,字典合并
18. "12 "*3==" ".join(["12","12","12"]) 的輸出是True。F
19. 語(yǔ)句print("輸出結(jié)果是{:8s}".format("this"))的輸出是:輸出結(jié)果是?□□□□this?!醣硎究崭瘛?span style="color:#ff0000;">F
????????同第二章第七題,s表示是字符串,四個(gè)□□□□在this右邊
20.語(yǔ)句print("輸出結(jié)果是{:8d}".format(1234))的輸出是:輸出結(jié)果是 1234□□□□。 □表示空格。F
????????d表示是整數(shù),數(shù)字默認(rèn)右對(duì)齊
21.語(yǔ)句print("輸出結(jié)果是{:08.2f}".format(14.345))的輸出是:輸出結(jié)果是00014.34。F 00014.35
????????f表示是浮點(diǎn)數(shù)0 表示填充空白處的字符是0。8 表示總字符寬度是8,包括小數(shù)點(diǎn)和小數(shù)部分。 .2f 表示保留兩位小數(shù)。
22.[1,2,[3]]+[4,5]的結(jié)果是[1,2,3,4,5]。F
????????[1, 2, [3], 4, 5] 序列加法p59 連接2個(gè)序列并保持原有順序不變
23. [4,5]*3的結(jié)果是[[4,5],[4,5],[4,5]]。F
????????[4, 5, 4, 5, 4, 5] 列表乘法的操作為重復(fù)列表元素
24.下面程序的輸出是字符a。F
????????c="A"
????????print(c.lower)# lower()函數(shù)寫(xiě)錯(cuò)了
????????牢記各函數(shù)
三、單選題
1. max((3, 5, 1, 7, 4))的結(jié)果是D.7
2.以下哪句打印出smith\exam1\test.txt?
B.print("smith\\exam1\\test.txt") 轉(zhuǎn)義字符
3. list("abcd")的結(jié)果是? A.['a', 'b', 'c', 'd']
4.如果list1 = [1, 2, 3, 4, 5, 4, 3, 2, 1],那么以下那個(gè)是list1[:-1]?C.[1, 2, 3, 4, 5, 4, 3, 2]
5.要把5加到列表lst的末尾,用的是B.lst.append(5)
四、填空題
1. '23'*3的結(jié)果是232323
2. len('3//11//2018'.split('/'))的結(jié)果是5
????????['3', '', '11', '', '2018']
3. lst=[3,4,5,6,5,4,3],執(zhí)行l(wèi)st.remove(3)后,lst[0]的值是:
????????lst.remove(value)刪除值為value的第一個(gè)元素,只刪除首次出現(xiàn)的值
4. list(range(2,12,2))[:-2].pop()的結(jié)果是:
????????lst.pop(index)返回并刪除下標(biāo)為index的元素,默認(rèn)是最后一個(gè)元素
??? 1.? list(range(2, 12, 2))創(chuàng)建了一個(gè)列表[2, 4, 6, 8, 10]。這是一個(gè)從 2 開(kāi)始、以步長(zhǎng)為2遞增到12的列表。
??? 2.? [:-2] 從這個(gè)列表中排除了最后兩個(gè)元素,因此現(xiàn)在列表變?yōu)?[2, 4, 6]。
??? 3.? pop() 方法彈出并返回列表的最后一個(gè)元素,即 6。
????????因此,list(range(2, 12, 2))[:-2].pop() 的結(jié)果是 6。
5.要想得到[0,100]范圍內(nèi)的隨機(jī)數(shù),random.randint(0,n)里的n應(yīng)該是:100
????????random庫(kù) 書(shū)77 random.randint(a,b)返回一個(gè)介于[a,b]的隨機(jī)整數(shù)
????????random.uniform(a,b)返回一個(gè)介于[a,b]的浮點(diǎn)數(shù)
6. print("{1}+{0}={2}".format(2,3,2+3))的輸出是3+2=5
7.? ? a=34
????????b=23
????????print("{first}-{second}={0}".format(34-23,first=a,second=b))
上面程序輸出是34-23=11
8. print("{:>08s}".format(bin(31)[2:]))的輸出是00011111
????????print(bin(31))
????????print(bin(31)[2:])
????????0b11111
????????11111
9. print("programming".find("r",2))的輸出是4
????????在字符串中找到子串所在位置,不存在返回-1,str.find(str,beg=0,end=len(string))
10. print("programming".find("x"))的輸出是-1
11. print("a123".isdigit())的輸出是False
????????isdigit() 判斷單個(gè)字符是否為數(shù)字;判斷字符串中是否僅含有數(shù)字
12. print("aABC".isalpha())的輸出是 True
????????isalpha()?可以判斷「字符串」是否只包含「字母」;字符串的所有字符都是字母返
????????True否則返回False
13. print("□□□xyz□□".strip(),"□□□xyz□□".rstrip(),
"□□□xyz□□".lstrip())的輸出是xyz□□□□xyz□xyz□□
????????內(nèi)置函數(shù)strip,rstrip,lstrip的使用
????????‘xyz??? xyz xyz? ’
14. a=[1,2,3,4]
??? ?b=a
???? print(id(a)==id(b))
???? c=a.copy()
???? print(id(a)==id(c))
?????????d=a[:]
?????????print(id(a)==id(d))
????????上面程序的輸出依次分別是True False False
?? ??? b = a:這里將列表 b 指向了和列表 a 相同的內(nèi)存地址,因此 id(a)==id(b) 會(huì)返回 True,因?yàn)樗鼈冎赶蛲粋€(gè)對(duì)象。
??? ??? c = a.copy():使用 copy() 方法創(chuàng)建了列表 c 的副本,它包含了和列表 a 相同的元素,但在內(nèi)存中卻是不同的對(duì)象。因此 id(a)==id(c) 會(huì)返回 False,因?yàn)樗鼈冎赶虿煌膶?duì)象。
??? ??? d = a[:]:通過(guò)切片操作創(chuàng)建了列表 d 的副本,和 a 的元素相同但在內(nèi)存中是不同的對(duì)象。所以 id(a)==id(d) 會(huì)返回 False,因?yàn)樗鼈冎赶虿煌膶?duì)象。
15.列表加元組可以表示二維表。
下面程序用三種不同方式打印表格內(nèi)容,請(qǐng)?zhí)羁胀瓿膳c第一種方式輸出一樣的后面兩種方式,不要加無(wú)用空格。
students=[(3180102988,"褚好"),
?(3170102465,"王凱亮"),
?(3160104下面程序輸出值是1。6,"李永"),
?(3171104169,"陳鑫"),
?(318400429,"徐杭誠(chéng)")]
for row in students: #按行存取
?print(row[0],row[1])
print()
????????在這個(gè)代碼片段中,通過(guò) for row in students: 這行代碼,每次循環(huán)迭代都會(huì)將 students 列表中的一個(gè)元組賦值給變量 row。這里的 row 實(shí)際上代表了列表中的每個(gè)元組。然后,通過(guò) row[0] 和 row[1],可以分別訪問(wèn)每個(gè)元組中的學(xué)號(hào)和姓名。
for id,name in students: #按行拆包存取
??? print(?????? id,name??????? )
print()
????????直接將元組或列表中的項(xiàng)分別直接賦值給不同的變量
for index in range(len(students)): #按索引存取
??? print(????? students[index][0],students[index][1]???????? )
print()
16. print(sum((1,3,5,7,9))/len((1,3,5,7,9)))的輸出是5.0
17.下面程序的輸出是2
t=1
????????t,a=2,t+1 #就是解包賦值操作
print(a)
五、編程題
7-1 大于身高的平均值
a_height = list(map(int,input().split()))
avg = sum(a_height) / len(a_height)
for i in a_height:
if i > avg:
print("{} ".format(i),end='')
7-2 輸出字母在字符串中位置索引
strip_l = list(input())
a,b = input().split() #本質(zhì)上也是拆包
c = len(strip_l)
# 序列倒序
for i in strip_l[::-1]:
c = c - 1
if c < 0:
break
# i == 's' or i == 'p' 錯(cuò)一半
if i == a or i == b:
print("{0} {1}".format(c,i))
7-3 求整數(shù)的位數(shù)及各位數(shù)字之和
# num = list(input())
N_num = list(map(int,list(input())))
Count = len(N_num)
Result = sum(N_num)
print(Count,Result)
7-4 字符替換
a = input()
n =''
for i in a:
num = ord(i)
if 65 <= num <= 90:
# 加號(hào)有很多功能,可以實(shí)現(xiàn)字符串拼接
# 注意155的含義
n += chr(155-num)
else:
n += i
print(n)
7-5 刪除字符
a = input()
c = input()
a = a.strip()
c = c.strip()
new = ''
for i in a:
if i != c.upper and i != c.lower():
new += i
else:
new += ''
print("result: {}".format(new))
7-6 輸出10個(gè)不重復(fù)的英文字母
a = input()
a = a.replace(' ','')#把字符中的空格換成空
n = ''
for i in a:
if i.isalpha(): #判斷是否為字母
if i.lower() not in n.lower(): #換成小寫(xiě)判斷無(wú)重復(fù)
n += i
if len(n) < 10:
print("not found")
else:
print(n[:10])
7-7 逆序的三位數(shù)
a = input()
b = a[::-1]
b = int(b) #007轉(zhuǎn)換為整型7
print(b)
7-8 判斷兩個(gè)字符串是否為變位詞
a = list(input())
b = list(input())
# a = sorted(a)
# b = sorted(b)
a.sort()
b.sort()
if a == b:
print('yes')
else:
print('no')
7-9 輸入字符串,排序后輸出最大字符及該字符在原字符串中的索引
a = list(input())
b = sorted(a)
m = 0
for i in range(0,len(a)):
if a[i] == b[-1]:
m = i
print("{} {}".format(b[-1],m))
7-10 計(jì)算有n個(gè)字符串中最長(zhǎng)的字符串長(zhǎng)度
n = int(input())
sum = []
for i in range(0,n):
s = input()
s = s.strip()
length = len(s)
sum.append(length) #沒(méi)有返回值
sum.sort()
print("length={}".format(sum[-1]))
7-11 位1的個(gè)數(shù)
n = bin(int(input()))
count = 0
for i in n:
if i == '1':
count += 1
print(count)
7-12 整數(shù)的二進(jìn)制相加
x = int(input())
y = int(input())
#利用格式化輸出
print("{:0>8b}".format(x))
print("{:0>8b}".format(y))
print('--------')
print("{:0>8b}".format(x+y))
7-13 漢明距離
x, y = map(int, input().split())
# 將整數(shù)轉(zhuǎn)換為二進(jìn)制字符串,并去除開(kāi)頭的'0b'
binary_x = bin(x)[2:]
binary_y = bin(y)[2:]
# 計(jì)算兩個(gè)二進(jìn)制數(shù)的長(zhǎng)度
len_x = len(binary_x)
len_y = len(binary_y)
# 將兩個(gè)二進(jìn)制數(shù)左邊補(bǔ)0補(bǔ)齊至相同的長(zhǎng)度
if len_x < len_y:
binary_x = '0' * (len_y - len_x) + binary_x
else:
binary_y = '0' * (len_x - len_y) + binary_y
# print(list(bit_x != bit_y for bit_x, bit_y in zip(binary_x, binary_y)))
# 統(tǒng)計(jì)不同位的個(gè)數(shù) 又是解包 得到 bool值的迭代器
count = sum(bit_x != bit_y for bit_x, bit_y in zip(binary_x, binary_y))
print(count)
7-14 判斷回文字符串
s = input()
s1 = ''.join([i for i in s if i.isalnum()])
s1 = s1.lower()
if s1 == s1[::-1]:
print('yes')
else:
print('no')
7-15 輸入一行字符串,并將它轉(zhuǎn)換成10進(jìn)制數(shù)輸出
s = input()
s1 = ''.join([i for i in s if '1'<=i<='9' or 'a'<=i.lower()<='f'])
print(s1)
print("{}".format(int(s1,16)))
7-16 統(tǒng)計(jì)滿足特定條件的字符數(shù)文章來(lái)源:http://www.zghlxwxcb.cn/news/detail-851709.html
a = input()
b = input()
sum = 0
for i in a:
if i in b:
sum += 1
print(sum)
7-17 查驗(yàn)身份證文章來(lái)源地址http://www.zghlxwxcb.cn/news/detail-851709.html
n = int(input())
ques = []
weights = [7,9,10,5,8,4,2,1,6,3,7,9,10,5,8,4,2]
test = [1, 0, 'X', 9, 8, 7, 6, 5, 4, 3, 2]
for i in range(n):
id = input()
# 檢查前17位是不是數(shù)字?。?!id[:-1] 不包括最后一個(gè)數(shù)
if not id[:-1].isdigit():
ques.append(id)
continue
#判斷全是數(shù)字但是校驗(yàn)碼錯(cuò)誤的id,對(duì)切片理解錯(cuò)了,哭死,加權(quán)也是加的前17位
id_numbers = list(map(int,id[:-1]))
# 元組解包賦值再使用sum函數(shù)求值操作
weighted_sum = sum(id_num * weighte for id_num, weighte in zip(id_numbers, weights))
z = weighted_sum % 11
if str(test[z]) != id[-1]:
ques.append(id)
if ques == []:
print('All passed')
else:
for i in ques:
print(i)
到了這里,關(guān)于【全解析 | PTA】浙大版《Python 程序設(shè)計(jì)》題目集-第三章的文章就介紹完了。如果您還想了解更多內(nèi)容,請(qǐng)?jiān)谟疑辖撬阉鱐OY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!