Python程序設(shè)計(jì)基礎(chǔ)(第2版)課件 第5章 字符串與序列_第1頁(yè)
Python程序設(shè)計(jì)基礎(chǔ)(第2版)課件 第5章 字符串與序列_第2頁(yè)
Python程序設(shè)計(jì)基礎(chǔ)(第2版)課件 第5章 字符串與序列_第3頁(yè)
Python程序設(shè)計(jì)基礎(chǔ)(第2版)課件 第5章 字符串與序列_第4頁(yè)
Python程序設(shè)計(jì)基礎(chǔ)(第2版)課件 第5章 字符串與序列_第5頁(yè)
已閱讀5頁(yè),還剩222頁(yè)未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

版權(quán)說(shuō)明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)

文檔簡(jiǎn)介

第5章字符串與序列序列通用操作字符串元組列表算法與問(wèn)題求解5.15.25.35.45.5學(xué)習(xí)引導(dǎo)…了解…理解…掌握…運(yùn)用5字符串與序列序列(Sequence)是一系列數(shù)據(jù)項(xiàng)的有序集合。序列中的每個(gè)數(shù)據(jù)項(xiàng)都有一個(gè)索引,索引從0開(kāi)始。主要用于存儲(chǔ)和操作多個(gè)數(shù)據(jù)元素。序列類型共同特性:有序性:序列中的數(shù)據(jù)項(xiàng)按插入順序排列。索引訪問(wèn):序列中的每個(gè)元素都有一個(gè)唯一的索引,可以通過(guò)索引訪問(wèn)特定元素。支持切片:序列可以通過(guò)切片操作來(lái)訪問(wèn)子序列。支持迭代:可以使用循環(huán)遍歷序列中的元素。5字符串與序列數(shù)據(jù)類型函數(shù)示例描述是否可變字符串str()'Hello'、"1234"、'''這是一個(gè)函數(shù)'''、"""唐詩(shī)三百首"""存儲(chǔ)一系列字符不可變Rangerange()range(10)range(3,100,3)表示一系列連續(xù)的整數(shù)不可變?cè)Mtuple()()、(2,)、(1,'abc',(2,3),['武漢','吉林'])與列表類似,但元組不可變不可變列表list()[]、[3]、[5,'武漢',('a',3),['Tom',18]]存儲(chǔ)任意類型的元素,可以包含不同類型的數(shù)據(jù)可變5.1

序列通用操作5.1序列通用操作序列數(shù)據(jù)類型共性元素間存在先后順序支持序列的拼接、重復(fù)、索引、切片、測(cè)試長(zhǎng)度、最大值、最小值和存在性測(cè)試等操作。5.1序列通用操作操作符描述s[i]索引,返回序列s的第i項(xiàng),項(xiàng)序號(hào)為整數(shù)s[start:end[:step]]切片,返回序列s從start到end(不包括end)的步長(zhǎng)為step的字符生成新的序列。step缺省時(shí),步長(zhǎng)為1,返回序號(hào)從start到end的子序列。s+t拼接兩個(gè)序列s和t,僅適用于列表和字符串s*n或n*sn為整數(shù),將序列s與自身拼接

n次生成新序列,range不支持此操作len(s)返回序列s的長(zhǎng)度,序列包含元素的個(gè)數(shù)或字符串包含字符的個(gè)數(shù)min(s,*[,key,default])返回序列s的最小值,key關(guān)鍵字缺省時(shí)按元素值比較max(s,*[,key,default])返回序列s的最大值,key關(guān)鍵字缺省時(shí)按元素值比較s.count(x)x在s中出現(xiàn)的總次數(shù)s.index(x[,i[,j]])元素或字符x在序列s中首次出現(xiàn)項(xiàng)的索引號(hào),i值存在時(shí)表示從索引號(hào)i處開(kāi)始查找x,j存在時(shí)表示查找范圍在i和j之間。xins如果基本序列s中的某項(xiàng)等于

x

,則結(jié)果為True,否則結(jié)果False如果字符串s中的任一子序列與x相等,則結(jié)果為True,否則結(jié)果Falsexnotins如果基本序列s中的某項(xiàng)等于

x

,則結(jié)果為False,否則結(jié)果True如果字符串s中的任一子序列與x相等,則結(jié)果為False,否則結(jié)果True5.1.1索引字符串:每個(gè)字符擁有一個(gè)序號(hào)元組、列表或range對(duì)象:每個(gè)元素?fù)碛幸粋€(gè)序號(hào)序列數(shù)據(jù)內(nèi)部有序存儲(chǔ),可以使用“序號(hào)”取得相應(yīng)的數(shù)據(jù)項(xiàng)。索引:通過(guò)序列數(shù)據(jù)的序號(hào)返回其對(duì)應(yīng)的值的操作,索引會(huì)創(chuàng)建一個(gè)新對(duì)象。兩種序號(hào)體系可以同時(shí)使用正向索引:序號(hào)正向從0開(kāi)始,終止值為序列長(zhǎng)度減1(len(s)-1)逆向索引:序號(hào)從-1開(kāi)始,終止值為負(fù)的序列長(zhǎng)度(-len(s))5.1.1索引字符串與列表的序號(hào)字符串而言,英文、中文、空格和各種符號(hào)都各占一個(gè)字符位。5.1.1索引索引是指通過(guò)序列數(shù)據(jù)的序號(hào)返回其對(duì)應(yīng)的字符或元素的操作。可以按正向序號(hào)進(jìn)行索引或按逆向序號(hào)進(jìn)行索引,通過(guò)序號(hào)獲取對(duì)應(yīng)的元素。索引的語(yǔ)法:序列名[序號(hào)]#字符串序列s=

'HelloWorld!'print(s[4])

#按序號(hào)正向索引,返回序號(hào)為4

的字符'o'print(s[-1])

#按逆向序號(hào)索引,返回最后一個(gè)字符

'!'5.1.1索引01234567891011HelloWorld!-12-11-10-9-8-7-6-5-4-3-2-1s5.1.1索引0123456789李明848095887665859855-10-9-8-7-6-5-4-3-2-1#序列類型—列表scores

=

['李明',

84,

80,

95,

88,

76,

65,

85,

98,

55]print(scores[0])

#按序號(hào)正向索引,返回序號(hào)為0的元素'李明'print(scores[4])

#按序號(hào)正向索引,返回序號(hào)為4的元素88print(scores[-1])

#按逆向序號(hào)索引,返回倒數(shù)第1個(gè)元素55print(scores[-3])

#按逆向序號(hào)索引,返回倒數(shù)第3個(gè)元素85scores5.1.1索引01234567890123456789-10-9-8-7-6-5-4-3-2-1#序列類型—ranger

=

range(10)

#獲得0,1,2,3,4,5,6,7,8,9的序列對(duì)象print(r[3])

#按序號(hào)正向索引,返回序號(hào)為3的元素

3print(r[-3])

#按逆向序號(hào)索引,返回倒數(shù)第3個(gè)元素

7r5.1.1索引當(dāng)使用的索引值超出列表現(xiàn)有數(shù)據(jù)的索引時(shí),Python將會(huì)產(chǎn)生“索引超出范圍”的異常。0123456789李明848095887665859855-10-9-8-7-6-5-4-3-2-1scores

=

['李明',

84,

80,

95,

88,

76,

65,

85,

98,

55]

#序號(hào)范圍為:0-9print(scores[10])#輸出:IndexError:listindexoutofrangescores5.1.1索引索引序號(hào)必須為整數(shù),不可為浮點(diǎn)數(shù)。試圖用浮點(diǎn)數(shù)做索引序號(hào),Python將會(huì)產(chǎn)生TypeError。當(dāng)索引值是通過(guò)計(jì)算得到時(shí),務(wù)必使其值為整型類型或先用int()函數(shù)對(duì)其進(jìn)行取整操作,再用做索引序號(hào)。scores

=

['李明',

84,

80,

95,

88,

76,

65,

85,

98,

55]

#序號(hào)范圍為:0-9print(scores[10.0//5])#10.0//5=2.0,為浮點(diǎn)數(shù)#TypeError:listindicesmustbeintegersorslices,notfloatprint(scores[int(10.0//5)])

#int(10.0//5)=2,返回805.1.1索引當(dāng)索引結(jié)果仍是序列類型數(shù)據(jù)時(shí),可以繼續(xù)索引,獲取元素中的數(shù)據(jù)。cv

=

['李明',

35,

('博士','副教授'),

[96,

92,

85]]#包含字符串、數(shù)字、元組和列表等多種類型數(shù)據(jù)的列表print(cv[0])

#序號(hào)為0的元素為字符串:'李明'print(cv[0][0])

#序號(hào)為0的元素中'李明'序號(hào)為0的元素為:'李'print(cv[2])

#序號(hào)為2的元素為元組('博士','副教授’)print(cv[3])

#序號(hào)為3的元素為列表[96,92,85]print(cv[2][0])

#序號(hào)為2的元素('博士','副教授')中序號(hào)為0的元素為:博士print(cv[3][1])

#序號(hào)為3的元素[96,92,85]中序號(hào)為1的元素為:920123'李明'35('博士','副教授')[96,92,85]'博士''副教授'96928501012cv5.1索引方法實(shí)現(xiàn)百分制轉(zhuǎn)五分制實(shí)例說(shuō)明:輸入一個(gè)整數(shù),當(dāng)輸入不在[0,100]

區(qū)間時(shí)輸出提示“Dataerror!”當(dāng)輸入滿足要求的前提下,用多分支結(jié)構(gòu)實(shí)現(xiàn)百分制轉(zhuǎn)五分制。轉(zhuǎn)換規(guī)則:根據(jù)分?jǐn)?shù)所在區(qū)間[0,60)、[60,70)、[70,80)、[80,90)、[90,100],分別輸出字符“E”“D”“C”“B”“A”。實(shí)例5.1索引方法實(shí)現(xiàn)百分制轉(zhuǎn)五分制思路:百分制分?jǐn)?shù)整除10,可得到其十位上的整數(shù)“i”,字符串中以“i”值作為索引的字符正好對(duì)應(yīng)該分?jǐn)?shù)段的五分制成績(jī)。將落在各區(qū)間的數(shù)分別對(duì)10做整除,得到0-10共11個(gè)數(shù)字,對(duì)應(yīng)字符串“EEEEEEDCBAA”中每個(gè)字符的序號(hào)。如85//10的結(jié)果為8,輸出字符串中序號(hào)為8的字符“B”。注意:當(dāng)成績(jī)中有浮點(diǎn)數(shù)時(shí),索引號(hào)需要先取整再使用。實(shí)例5.1索引方法實(shí)現(xiàn)百分制轉(zhuǎn)五分制def

convert_to_five_point_scale(score):

"""將百分制分?jǐn)?shù)轉(zhuǎn)為五分制分?jǐn)?shù),score:百分制分?jǐn)?shù)(0-100),返回五分制分?jǐn)?shù)(A-E)"""

degree

=

'EEEEEEDCBAA’

#序號(hào)0,1,2,3,4,5,6,7,8,9,10

if

score

>

100

or

score

<

0:

#排除不合法數(shù)據(jù)

return

'Dataerror!'

else:

i

=

int(score

//

10)

#用int()實(shí)現(xiàn)取整使索引號(hào)為整數(shù)

return

degree[i]

#degree[i]索引返回其中序號(hào)為I的字符

score

=

float(input('請(qǐng)輸入一個(gè)百分制成績(jī):'))

#輸入為非負(fù)數(shù)five_point_score

=

convert_to_five_point_scale(score)

#調(diào)用函數(shù)print(f'{score}分轉(zhuǎn)為五分制為{five_point_score}’)

#輸出為ABCDE或Dataerror!實(shí)例5.1索引方法實(shí)現(xiàn)百分制轉(zhuǎn)五分制score

=

float(input())degree

=

'EEEEEEDCBAA'print('Dataerror!')

if

(score

>

100

or

score

<

0)

else

print(degree[int(score

//

10)])實(shí)例利用條件表達(dá)式實(shí)現(xiàn):注意:浮點(diǎn)數(shù)整除10的結(jié)果是值為整數(shù)的浮點(diǎn)數(shù),如8.0。這里的score接受的是浮點(diǎn)數(shù)的輸入,需要用int()函數(shù)取整,確保索引號(hào)為整數(shù)。字符串序列及列表、元組和range等序列類型數(shù)據(jù)都支持切片操作。切片的過(guò)程是從第一個(gè)要返回的元素開(kāi)始,到第一個(gè)不想返回的元素結(jié)束按照給定的索引和步長(zhǎng),截取序列中的對(duì)象組成的新的片段對(duì)象切片的方法是:5.1.2切片seq[start:end:step]5.1.2切片seq[start:end:step]seq:序列類型數(shù)據(jù)對(duì)象名start:切片開(kāi)始的位置元素序號(hào)是第一個(gè)要返回的元素的索引號(hào);正向索引位置默認(rèn)為0;逆向索引位置默認(rèn)為負(fù)的序列長(zhǎng)度,即-len(seq);start省略時(shí)從第一個(gè)元素開(kāi)始切片。end:切片結(jié)束位置元素序號(hào)正向索引最后一個(gè)位置為序列長(zhǎng)度減1,即len(seq)-1;逆向索引結(jié)束位置序號(hào)默認(rèn)為-1;end省略時(shí)切片包括最后一個(gè)元素。step:取值的步長(zhǎng)默認(rèn)為1,不能為0start<end時(shí)步長(zhǎng)為正值;start>end時(shí)步長(zhǎng)為負(fù)值。5.1.2切片——字符串序列類型01234567891011HelloWorld!-12-11-10-9-8-7-6-5-4-3-2-1s

=

'HelloWorld!'print(s[6:8])

#根據(jù)序號(hào)[6:8]切片,輸出不包括結(jié)束序號(hào)的字符'Wo'print(s[:5])

#從起點(diǎn)到序號(hào)為5的位置切片,不包括5,'Hello'print(s[6:])

#從序號(hào)6向后到字符串結(jié)束切片,輸出'World!'print(s[-3:-1])

#負(fù)向索引,不包含右邊界元素,輸出'ld'print(s[6:-1])

#混用正負(fù)索引,輸出'World'print(s[::])

#從字符串開(kāi)始到結(jié)束進(jìn)行切片,輸出'HelloWorld!'print(s[::-1])

#按步長(zhǎng)為-1進(jìn)行切片,輸出'!dlroWolleH'print(s[::2])

#步長(zhǎng)為2,輸出序號(hào)為偶數(shù)的元素,輸出'HloWrd's5.1.2切片——列表類型012345678910李明84809588967665859855-11-10-9-8-7-6-5-4-3-2-1scores

=

['李明',

84,

80,

95,

88,

96,

76,

65,

85,

98,

55]print(scores[5:])

#從5到序列結(jié)束的元素,輸出[96,76,65,85,98,55]print(scores[1:-1])

#混用索引[84,80,95,88,96,76,65,85,98]print(scores[1::2])

#步長(zhǎng)為2,隔一個(gè),輸出[84,95,96,65,98]print(max(scores[1:]))

#切片返回除序號(hào)0的列表,max返回其最大值print(sum(scores[1:]))

#利用sum()函數(shù)對(duì)切片獲取的序列求和,輸出822#len()獲得切片后的列表元素個(gè)數(shù)print(sum(scores[1:])

/

len(scores[1:]))

#輸出切片后的序列元素的平均值82.25.1.2切片——range類型r

=

range(10)

#獲得0,1,2,3,4,5,6,7,8,9的序列print(r[3:6])

#對(duì)range(10)切片,返回新對(duì)象range(3,6)print(sum(r[1::2]))

#輸出序號(hào)為奇數(shù)的元素的和25print(sum(r[0::2])

/

len(r[0::2]))

#輸出序號(hào)為偶數(shù)的元素的平均值4.001234567890123456789-10-9-8-7-6-5-4-3-2-1r5.1.2切片——包含多種類型數(shù)據(jù)的列表cv

=

['李明',

35,

('博士','副教授'),

[96,

92,

85]]print(cv[2:4])

#切片得到新列表[('博士','副教授'),[96,92,85]]0123'李明'35('博士','副教授')[96,92,85]-4-3-2-1cv5.2回文字符串實(shí)例說(shuō)明:一個(gè)字符串,如果各字符逆序排列與原字符串相同,則稱為回文,如“12321”、“上海自來(lái)水來(lái)自海上”用戶輸入一個(gè)字符串,判斷是否為回文,如果是輸出True,否則輸出False。實(shí)例123215.2回文字符串思路:從前到后將字符串的每一個(gè)字符與從后向前每一個(gè)字符一一比較,如果都一一相同,則是回文。利用切片方法(s[start:end:step])。令步長(zhǎng)step值為-1,從最后一個(gè)字符開(kāi)始,到字符串開(kāi)始字符結(jié)束進(jìn)行切片,即構(gòu)造切片s[-1::-1]或s[::-1],可以獲得逆序的字符串。比較逆序的字符串與原字符串是否相同,相同則是回文。實(shí)例s

=

input()

#輸入一個(gè)字符串if

s

==

s[-1::-1]:

#s[-1::-1]將字符串反轉(zhuǎn),判斷反轉(zhuǎn)后是否與原字符串相等

print(True)

#如果相等,是回文,輸出Trueelse:

print(False)

#如果不相等,不是回文,輸出False5.2回文字符串實(shí)例print(True)

if

(s

:=

input())

==

s[::-1]

else

print(False)1.分支語(yǔ)句實(shí)現(xiàn)2.條件表達(dá)式結(jié)合賦值運(yùn)算符實(shí)現(xiàn)s

=

input()

#輸入一個(gè)字符串def

palindromic(s):

"""判定字符串否為回文字符串,s:輸入字符串,返回布爾值"""

return

s

==

s[::-1]

#比較運(yùn)算結(jié)果為布爾值print(palindromic(s))

#調(diào)用函數(shù)并輸出結(jié)果5.2回文字符串實(shí)例3.函數(shù)實(shí)現(xiàn)直接返回比較運(yùn)算表達(dá)式,避免使用分支語(yǔ)句。5.1.3序列拼接與重復(fù)字符串、元組與列表等序列類型都支持拼接與重復(fù)的操作。range序列類型不支持序列拼接或重復(fù),嘗試拼接或重復(fù)range對(duì)象時(shí),會(huì)觸發(fā)異常。序列拼接:"+",將兩個(gè)相同類型的序列拼接為一個(gè)。序列重復(fù):s*

n,s中的元素重復(fù)n次,產(chǎn)生一個(gè)新序列。當(dāng)n小于或等于0時(shí)會(huì)被當(dāng)作0來(lái)處理,此時(shí)序列重復(fù)0次的操作將產(chǎn)生一個(gè)空序列。year

=

2025s

=

'年'print('='

*

10)

#字符串重復(fù)10次print(str(year)

+

s)

#字符串拼接,整數(shù)參與拼接要先轉(zhuǎn)為字符串print('='

*

10)

#字符串重復(fù)10次輸出:==========2025年==========序列拼接與重復(fù)ls

=

[[]]

#創(chuàng)建一個(gè)包含一個(gè)空列表的列表ls_new

=

ls*

3

#重復(fù)只包含一個(gè)空列表元素的列表3次print(ls_new)

#重復(fù)引用空列表元素3次產(chǎn)生一個(gè)新列表[[],[],[]]ls[0].append(3)

#向列表中序號(hào)為0的元素中增加一個(gè)元素3print(ls_new)

#輸出:[[3],[3],[3]],列表ls中的元素是重復(fù)引用5.1.3

序列重復(fù)操作只是多次引用原序列中的元素,原序列中的項(xiàng)并不會(huì)被拷貝原序列中元素的改變將會(huì)導(dǎo)致重復(fù)序列中的元素改變。5.3輸出身份證信息實(shí)例說(shuō)明:中國(guó)的居民身份證號(hào)是一個(gè)18個(gè)字符的字符串,其各位上的字符代表的意義如下:第1、2位數(shù)字表示所在省份的代碼第3、4位數(shù)字表示所在地區(qū)的代碼第5、6位數(shù)字表示所在市縣的代碼第7~14位數(shù)字表示出生年、月、日第15、16位數(shù)字表示身份證注冊(cè)地的派出所的代碼第17位數(shù)字表示性別,奇數(shù)表示男性,偶數(shù)表示女性第18位數(shù)字是校檢碼,用來(lái)檢驗(yàn)身份證號(hào)的正確性,校檢碼可以是0-9中的一個(gè)數(shù)字,也可能是字母X。實(shí)例5.3輸出身份證信息實(shí)例說(shuō)明:輸入一個(gè)身份證號(hào),編程判斷其長(zhǎng)度是否正確;輸出其出生年月日。思路:身份證中提取生日,涉及判斷、字符串長(zhǎng)度、切片、拼接等知識(shí)點(diǎn)可以使用len()函數(shù)測(cè)字符串的長(zhǎng)度并判斷長(zhǎng)度是否為18用字符串切片的方法獲取身份證號(hào)碼中代表出生年月日的子串,并用"+"拼接實(shí)例5.3輸出身份證信息def

get_date_of_birth(id_num):

"""接收一個(gè)身份證號(hào)碼,返回出生日期,若輸入位數(shù)不是18,則輸出錯(cuò)誤提示信息"""

if

len(id_num)

==

18:

#測(cè)試輸入的字符串長(zhǎng)度是否為18

year

=

id_num[6:10]

#id_num序號(hào)6、7、8、9字符串,年份

month

=

id_num[10:12]

#id_num序號(hào)為10、11的字符串,月份

day

=

id_num[12:14]

#id_num序號(hào)為12、13的字符串,日期

birthdate

=

'出生于'+year+'年'+month+'月'+day+'日'

#字符串拼接

#birthdate=f'出生于{year}年{month}月{day}日'

#f-string方法

return

birthdate

else:

#輸入的字符串長(zhǎng)度不是18時(shí),輸出錯(cuò)誤提示信息

return

'輸入的身份證號(hào)位數(shù)錯(cuò)'

id_number

=

input()

#輸入一個(gè)表示身份證號(hào)的字符串print(get_date_of_birth(id_number))

#調(diào)用函數(shù),輸出出生日期或出錯(cuò)信息實(shí)例5.4約瑟夫環(huán)問(wèn)題實(shí)例說(shuō)明:有20個(gè)人圍坐在一張圓桌周圍從第1個(gè)人開(kāi)始報(bào)數(shù),數(shù)到3的人出列下一個(gè)人又從1開(kāi)始報(bào)數(shù),數(shù)到3的那個(gè)人又出列;依此規(guī)律重復(fù),直到圓桌周圍的人數(shù)少于3時(shí)結(jié)束,輸出剩下的人的序號(hào)。實(shí)例5.4約瑟夫環(huán)問(wèn)題問(wèn)題中要求每數(shù)到3的人出列,那么最后只剩2人時(shí)結(jié)束。20個(gè)人圍成一個(gè)圈用一個(gè)列表表示,每次將列表的第3個(gè)元素去除,同時(shí)將前2個(gè)元素拼接到列表的末尾,循環(huán)執(zhí)行,直至列表長(zhǎng)度小于3為止。變化過(guò)程:實(shí)例[

4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20]1,2,3,[

,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,1,2][

,9,10,11,12,13,14,15,16,17,18,19,20,1,2,4,5]4,57,

8…[13,20,2][13,20]5.4約瑟夫環(huán)問(wèn)題實(shí)例說(shuō)明:約瑟夫環(huán)問(wèn)題可以擴(kuò)展為:一圈共有n個(gè)人,從1開(kāi)始報(bào)數(shù),報(bào)到m的人出列,然后重新開(kāi)始報(bào)數(shù),剩余人數(shù)小于m時(shí)停止,輸出每次出列的人的序號(hào)。思路:split()函數(shù):把用空格分隔的輸入切分為包含2個(gè)值的列表map()函數(shù):將列表中的所有值映射為參數(shù)指定的類型,此處為整數(shù)。多變量賦值:將這兩個(gè)整數(shù)值分別賦值給n和m。實(shí)例5.4約瑟夫環(huán)問(wèn)題def

josephus(n,

m):

"""接受兩個(gè)參數(shù),n為總?cè)藬?shù),m為報(bào)數(shù)的數(shù)字,返回列表"""

ls

=

list(range(1,

n

+

1))

#構(gòu)造一個(gè)元素1到n的列表

while

len(ls)

>

m

-

1:

#列表長(zhǎng)度大于m-1時(shí),去掉第m個(gè)元素

ls

=

ls[m:]

+

ls[:m

-

1]

#前m-1個(gè)元素拼接到m以后的列表末尾

return

ls

#循環(huán)結(jié)束后,返回列表中剩下的元素

total,

num

=

map(int,

input().split())

#輸入切分為列表并映射為整數(shù)print(josephus(total,

num))

#[4,7,1,8,5,2,9,6,3,10]實(shí)例5.1.4成員測(cè)試"in"和"notin"運(yùn)算符用于測(cè)試某對(duì)象是否為字符串、列表或元組等序列或集合中的成員,返回布爾值(True或False)。in:存在返回True,否則返回Falsenotin:不存在返回True,否則返回False成員測(cè)試一般用于條件運(yùn)算,根據(jù)測(cè)試結(jié)果決定執(zhí)行后續(xù)程序中的某個(gè)分支。famous_book

=

['水滸傳','三國(guó)演義','西游記','紅樓夢(mèng)']book_name

=

input()

if

book_name

in

famous_book:

print(f'{book_name}是中國(guó)四大名著之一')else:

print(f'{book_name}不是中國(guó)四大名著之一')5.5溫度轉(zhuǎn)換實(shí)例說(shuō)明:溫度的表示有攝氏度和華氏度兩個(gè)體系。轉(zhuǎn)換公式如下:C=(F-32)/1.8,F(xiàn)=C*1.8+32,其中,C表示攝氏度、F表示華氏度請(qǐng)編寫程序,將用戶輸入的華氏度轉(zhuǎn)換為攝氏度,或?qū)z氏度轉(zhuǎn)換為華氏度,保留小數(shù)點(diǎn)后

2位小數(shù)。要求輸入輸出的攝氏度單位用大寫字母"C"或小寫字母"c",華氏度單位用大寫字母"F"或小寫字母"f"。用戶輸入帶單位的溫度數(shù)值,可以是整數(shù)或小數(shù),如12.34C指攝氏12.34度;87.65F指華氏87.65度。實(shí)例5.5溫度轉(zhuǎn)換def

convert_temperature(temperature):

"""將輸入的溫度值轉(zhuǎn)換為另一種溫標(biāo),temperature:輸入的溫度值,字符串形式,以溫度單位符號(hào)結(jié)尾,返回轉(zhuǎn)換后的溫度值或出錯(cuò)信息,字符串形式。"""

if

temperature[-1]

in

'Ff':

#符號(hào)是否在'Ff'中存在

C

=

(float(temperature[:-1])

-

32)

/

1.8

#用華氏轉(zhuǎn)攝氏公式計(jì)算

return

"{:.2f}C".format(C)

#返回轉(zhuǎn)換后溫度和單位

elif

temperature[-1]

in

'Cc':

#符號(hào)是否在'Cc'中存在

F

=

1.8

*

float(temperature[:-1])

+

32

#用攝氏轉(zhuǎn)華氏公式計(jì)算

return

"{:.2f}F".format(F)

#返回轉(zhuǎn)換后溫度和單位

else:

#末位不是"Cc"和"Ff"中的字符

return

'Dataerror!'

#返回錯(cuò)誤提示實(shí)例5.1.5最大值和最小值max(s)

與min(s)

返回序列元素的最大值和最小值。元素為數(shù)值類型時(shí)直接比較元素為字符串時(shí),比較字符串的unicode

編碼的值ls

=

[ord(x)

for

x

in

'2020年9月']

#用ord()得到每個(gè)字符的unicode值列表print(ls)

#[50,48,50,48,24180,57,26376]print(max('2020年9月'))

#輸出字符串中unicode值最大的字符,月print(min('2020年9月'))

#輸出字符串中unicode值最小的字符,05.1.5最大值和最小值max()和min()函數(shù)用key

關(guān)鍵字指定判定最大值和最小值的規(guī)則。ls

=

['a',

'baa',

'bcde',

'de']print(max(ls))

#比較各字符的unicode值,d最大,輸出deprint(min(ls))

#比較各字符的unicode值,a最小,輸出aprint(max(ls,

key=len))

#比較列表中各字符串長(zhǎng)度,bcde最大print(min(ls,

key=len))

#比較列表中各字符串長(zhǎng)度,a最小,輸出anum

=

['01',

'9',

'10',

'5']print(max(num))

#比較列表中各字符串長(zhǎng)度,'9'最大print(max(num,

key=int))

#按各元素轉(zhuǎn)整型后比較,'10'轉(zhuǎn)整型10,最大5.2字符串5.2字符串字符串是Python中最常用的數(shù)據(jù)類型,屬于不可變數(shù)據(jù)類型。數(shù)據(jù)來(lái)源:input()函數(shù)接收到的數(shù)據(jù)、讀取文本文件獲得的數(shù)據(jù)等主要應(yīng)用:文本分析處理、文件數(shù)據(jù)處理。界定符:成對(duì)引號(hào)。一對(duì)單引號(hào)('')、雙引號(hào)("")

或三引號(hào)(''''''或"""""")字符串長(zhǎng)度:包含字符的個(gè)數(shù)。當(dāng)包含0個(gè)字符時(shí),長(zhǎng)度為0,稱為空字符串。print(len(''))

#長(zhǎng)度0,空字符串print(len(''))

#長(zhǎng)度1,空格字符串,1個(gè)空格1個(gè)字符print(len('Hesaid,"Good".'))

#長(zhǎng)度16,空格和標(biāo)點(diǎn)符號(hào)各1個(gè)字符print(len("I'mhere"))

#長(zhǎng)度8,字符串含單引號(hào)時(shí)外面用雙引號(hào)print(len('程序設(shè)計(jì)'))

#長(zhǎng)度4,每個(gè)漢字1個(gè)字符5.2.1字符串的創(chuàng)建將一個(gè)或多個(gè)字符放在引號(hào)中single_str

=

'這是字符串,允許包含"雙引號(hào)"'#單引號(hào)字符串可包含雙引號(hào)double_str

=

"這是字符串,允許包含'單引號(hào)'"#雙引號(hào)字符串可包含單引號(hào)

poem

='''#三引號(hào)字符串可包含單引號(hào)和雙引號(hào),保留換行符驛外斷橋邊,寂寞開(kāi)無(wú)主。已是黃昏獨(dú)自愁,更著風(fēng)和雨。無(wú)意苦爭(zhēng)春,一任群芳妒。零落成泥碾作塵,只有香如故。'''三引號(hào)也用于Python的注釋和文檔字符串5.2.1字符串的創(chuàng)建應(yīng)用str()函數(shù),返回一個(gè)對(duì)象的字符串形式。str(object=b'',

encoding='utf-8',

errors='strict')str()函數(shù)包括三個(gè)默認(rèn)值參數(shù),參數(shù)為空則返回空字符串。encoding或errors至少給出其中之一時(shí),object對(duì)象應(yīng)該是一個(gè)字節(jié)類對(duì)象,此時(shí)將object對(duì)象用encoding指定的編碼讀取二進(jìn)制流的內(nèi)容encoding或errors均缺省時(shí),str(object)返回object對(duì)象的“非正式”或格式良好的字符串表示5.2.1字符串的創(chuàng)建print(str(1234)[1])

#整數(shù)轉(zhuǎn)字符串再索引,返回'2'print(str(1.234)[0:3])

#浮點(diǎn)數(shù)轉(zhuǎn)字符串再切片',返回1.2'print(str(1234)[1])

#整數(shù)轉(zhuǎn)字符串,返回'2'print(str([1,

2,

3])[1])

#列表轉(zhuǎn)字符串,返回'1',序號(hào)為0的元素為'['print(str((1,

2,

3))[1])

#元組轉(zhuǎn)字符串,返回'1',序號(hào)為0的元素為'('print(str({1,

2,

3})[1])

#集合轉(zhuǎn)字符串,返回'1',序號(hào)為0的元素為'{'print(str({'a':

1,

'b':

2}))

#"{'a':1,'b':2}"print(str({'a':

1,

'b':

2})[1:4])

#切片,序號(hào)1,2,3的字符:'a'

s

=

b'\xe4\xba\xba\xe7\x94\x9f\xe8\x8b\xa6\xe7\x9f\xad\xef\xbc\x8c

\xe6\x88\x91\xe7\x94\xa8Python!'print(str(s,

encoding='utf-8'))

#以u(píng)tf-8編碼讀取二進(jìn)制流的內(nèi)容“人生苦短,我用Python!”5.2.1字符串的創(chuàng)建讀文件生成字符串with和open()函數(shù)打開(kāi)一個(gè)文件并創(chuàng)建一個(gè)文件對(duì)象。循環(huán)遍歷輸出,每次循環(huán)把其中一行讀取為一個(gè)以換行符“\n”結(jié)尾的字符串。#以只讀模式打開(kāi)文件,創(chuàng)建文件對(duì)象filewith

open('明日歌.txt','r',encoding='utf-8')

as

file:

for

line

in

file:

#遍歷輸出文件對(duì)象中的每一行

print(line)

#每行為一個(gè)字符串,行末換行符解析為換行注:代碼中with…as為上下文管理器,將open()函數(shù)放在其中,可以在代碼結(jié)束縮進(jìn)后自動(dòng)關(guān)閉文件,避免顯式使用關(guān)閉文件的語(yǔ)句和關(guān)閉異常。5.2.2字符串中的常量Python內(nèi)置了一些字符串常量,封裝了一些常用字符集,如string.digits

代表'0123456789'使用字符串常量時(shí),需先importstring導(dǎo)入string庫(kù)。5.2.2字符串中的常量字符串常量字符集string.ascii_letters'abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ'string.ascii_lowercase'abcdefghijklmnopqrstuvwxyz'string.ascii_uppercase'ABCDEFGHIJKLMNOPQRSTUVWXYZ'string.digits'0123456789'string.hexdigits'0123456789abcdefABCDEF'string.octdigits'01234567'.string.punctuation'!"#$%&\'()*+,-./:;<=>?@[\\]^_`{|}~'string.printable'0123456789abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ!"#$%&\'()*+,-./:;<=>?@[\\]^_`{|}~\t\n\r\x0b\x0c'string.whitespace'\t\n\r\x0b\x0c'

5.6分類統(tǒng)計(jì)字符個(gè)數(shù)實(shí)例說(shuō)明:輸入一個(gè)字符串,以回車結(jié)束,統(tǒng)計(jì)字符串里英文字母、數(shù)字和其他字符的個(gè)數(shù)(回車符代表結(jié)束輸入,不計(jì)入統(tǒng)計(jì))。思路:遍歷輸入的字符串,依次判定每個(gè)字符的種類并做統(tǒng)計(jì)用字母和數(shù)字的字符串常量“string.ascii_letters”和“string.digits”做成員測(cè)試判定字符的類型。實(shí)例5.6分類統(tǒng)計(jì)字符個(gè)數(shù)實(shí)例import

string

def

count_characters(my_string):

"""my_string為輸入字符串,返回字母、數(shù)字和其他字符的數(shù)量"""

letter,

digit,

other

=

0,

0,

0

#用于計(jì)數(shù)的3個(gè)變量均設(shè)初值為0

for

c

in

my_string:

#遍歷,c依次取值為字符串中的字符

if

c

in

string.ascii_letters:

#若c在字母常量中存在,則c是字母

letter

+=

1

#字母計(jì)數(shù)加1個(gè)

elif

c

in

string.digits:

#若c在數(shù)字常量中存在,則c是數(shù)字

digit

+=

1

#數(shù)字計(jì)數(shù)加1個(gè)

else:

other

+=

1

#否則其他字符計(jì)數(shù)加1個(gè)

return

letter,

digit,

other

#返回字母、數(shù)字和其他字符的數(shù)量5.2.3字符串的表示Python支持中文,默認(rèn)使用UTF-8編碼。UTF-8編碼是可變長(zhǎng)度的編碼,用1到6個(gè)字節(jié)編碼Unicode字符。常用中文字符用UTF-8編碼占用3個(gè)字節(jié)(大約2萬(wàn)字),超大字符集中的更大多數(shù)漢字要占4個(gè)字節(jié),某些生僻字可能用六個(gè)字節(jié)表示。UTF-8編碼既解決ASCII編碼容量不夠的問(wèn)題,又避免了使用Unicode編碼浪費(fèi)空間問(wèn)題,并在最大限度上兼容了早期的ASCII編碼,使一些早期使用ASCII編碼的軟件在UTF-8編碼中可以繼續(xù)正常工作。5.2.3字符串的表示在UTF-8編碼環(huán)境下,任何一個(gè)數(shù)字、英文字母、漢字都被按一個(gè)字符進(jìn)行對(duì)待和處理。s1

=

'湖北省武漢市'

#6個(gè)中文字符,長(zhǎng)度為6s2

=

'hubei'

#5個(gè)英文字符,長(zhǎng)度為5print(len(s1),

len(s2))

#len()是測(cè)試長(zhǎng)度函數(shù),輸出6

55.2.4字符串的遍歷字符串的遍歷是指用循環(huán)的方法依次獲取字符串中的每個(gè)字符,字符串遍歷的方法如下:string為需要遍歷的字符串變量c依次被賦值為字符串中的字符循環(huán)次數(shù)為字符串中字符個(gè)數(shù)forcinstring:#變量c依次取值為字符串中的字符語(yǔ)句塊5.7字符串加密實(shí)例說(shuō)明:在一行中輸入一個(gè)包括大小寫字母和數(shù)字的字符串,編程將其中的大寫字母用該字母后第4個(gè)字母替換,其他字符原樣輸出,實(shí)現(xiàn)字符串加密。思路:建立原字符序列和替換字符序列遍歷字符串,如果滿足大寫字母的條件,則將替換序列中對(duì)應(yīng)位置的字母進(jìn)行替換。實(shí)例5.7字符串加密實(shí)例def

encrypt_string(plaincode):

"""plaincode:輸入的明文字符串,返回加密后的字符串"""

p

=

'ABCDEFGHIJKLMNOPQRSTUVWXYZ'

#原字符序列

s

=

'EFGHIJKLMNOPQRSTUVWXYZABCD'

#替換字符序列,s=p[4:]+p[:4]

ciphertext

=

''

#空字符串,存放加密字符串

for

c

in

plaincode:

#遍歷輸入的明文字符串

n

=

p.find(c)

#返回c在p中的位置序號(hào),找不到時(shí)返回-1

if

n

==

-1:

#值為-1表示c在p中不存在,不是大寫字母

ciphertext

+=

c

#將原字符拼接到ciphertext上

else:

#c為大寫字母,用序列s中對(duì)應(yīng)位置的字母替換

ciphertext

+=

s[n]

#替換的字符拼接到ciphertext

return

ciphertext

#返回加密后的字符串輸入:LIFEisSHORT,youNEEDPYTHON輸出:PMJIisWLSVX,youRIIHTCXLSR5.2.5文件的遍歷應(yīng)用open()函數(shù)可以打開(kāi)一個(gè)文件并創(chuàng)建一個(gè)文件對(duì)象:filename是讀取的帶路徑和擴(kuò)展名的文件名mode為讀取模式參數(shù),值為“r”表示只讀取文件內(nèi)容,不修改文件,mode參數(shù)可省略,默認(rèn)值為只讀。with…as為上下文管理器file為讀取文件后創(chuàng)建的文件對(duì)象with

open('filename',

mode='r',

encoding

=

'utf-8')

as

file:5.2.5文件的遍歷訪問(wèn)文件數(shù)據(jù)常用方法:用文件對(duì)象的readline()方法和read()方法讀取其中的數(shù)據(jù)。對(duì)文件對(duì)象進(jìn)行遍歷,逐行輸出其內(nèi)容。用遍歷文件對(duì)象的方法時(shí),文件的每一行被作為一個(gè)字符串處理。在每行的行末,有一個(gè)隱藏的換行符“\n”,它會(huì)被作為字符串的一部分。輸出時(shí),字符串中的“\n”會(huì)被解析為一次換行。for

line

in

file:#file為文件對(duì)象,循環(huán)次數(shù)為文件的行數(shù),

語(yǔ)句塊

變量line每次被賦值為文件的一行5.8遍歷輸出文件實(shí)例說(shuō)明:有一個(gè)文本文件“靜夜思.txt”,編碼為“utf-8”,文件內(nèi)容如下,編程讀取文件的內(nèi)容:靜夜思床前明月光,疑是地上霜。舉頭望明月,低頭思故鄉(xiāng)。實(shí)例5.8遍歷輸出文件實(shí)例with

open('靜夜思.txt',

'r',

encoding='utf-8')

as

poem:

for

line

in

poem:

#對(duì)文件對(duì)象poem進(jìn)行逐行遍歷

print(line)

#每次循環(huán)輸出文件中的一行內(nèi)容用print()函數(shù)對(duì)其進(jìn)行輸出時(shí),行末的換行符“\n”會(huì)被解析為一個(gè)換行,導(dǎo)致輸出的每一行數(shù)據(jù)后有一個(gè)空行存在??梢杂胷eplace()函數(shù)替換掉行末的換行符,或用rstrip()函數(shù)去掉行末的空白字符,使輸出時(shí)不出現(xiàn)多余的空行。這里涉及replace()和rstrip()方法,這是字符串的操作方法,在本章后面會(huì)有詳細(xì)講述。5.2.6字符串處理方法方法名描述str.upper()/str.lower()轉(zhuǎn)換字符串str中所有字母為大寫/小寫str.strip()用于移除字符串開(kāi)頭、結(jié)尾指定的字符(缺省時(shí)去掉空白字符,包括\t、\n、\r、\x0b、\x0c等)str.join(iterable)以字符串str作為分隔符,將可迭代對(duì)象iterable中字符串元素拼接為一個(gè)新的字符串。當(dāng)iterable中存在非字符串元素時(shí),觸發(fā)TypeError異常。str.split(sep=None,maxsplit=-1)根據(jù)分隔符sep將字符串str切分成列表,缺省時(shí)根據(jù)空格切分,可指定逗號(hào)或制表符等。Maxsplit值存在且非-1時(shí),最多切分maxsplit次。str.count(sub[,start[,end]])返回sub

在字符串str里面出現(xiàn)的次數(shù),如果start或者end指定則返回指定范圍內(nèi)sub出現(xiàn)的次數(shù)。5.2.6字符串處理方法方法名描述str.find(sub[,start[,end]])檢測(cè)sub

是否包含在字符串str

中,如果是返回開(kāi)始的索引值,否則返回-1。如果start和end指定范圍,則檢查是否包含在指定范圍內(nèi)。str.replace(old,new[,count])把字符串str中的old

替換成

new,如果count指定,則替換不超過(guò)count次,否則有多個(gè)old子串時(shí)全部替換為new。str.index(sub[,start[,end]])與find()方法一樣,返回子串存在的起始位置,如果sub不在字符串str中會(huì)觸發(fā)一個(gè)異常。for

<var>

in

<string>對(duì)字符串string進(jìn)行遍歷,依次將字符串string中的字符賦值給前面的變量var5.2.6字符串處理方法str.upper()和str.lower()分別用于將其前面的字符串轉(zhuǎn)換成大寫字母和小寫字母,如input().upper()可以將用戶輸入的字符串中的小寫字母都轉(zhuǎn)換成大寫字母。例如,網(wǎng)頁(yè)上經(jīng)??梢钥吹捷斎腧?yàn)證碼時(shí)是不區(qū)分大小寫的,其后臺(tái)的程序一般會(huì)將用戶的輸入和圖片中的字符都統(tǒng)一轉(zhuǎn)成大寫字母(或統(tǒng)一轉(zhuǎn)成小寫字母),再去一一比較是否一致。5.2.6字符串處理方法rstrip()和strip()函數(shù)rstrip()函數(shù)用于移除字符串結(jié)尾指定的字符strip()函數(shù)用于移除字符串開(kāi)頭和結(jié)尾指定的字符。當(dāng)參數(shù)缺省時(shí),默認(rèn)去掉字符串首尾的空白字符(不可見(jiàn)字符),包括"\t

(制表符)"、"\n

(換行符)"和"\r

(回車符)"等。s

=

'0089840'print(s)

#原字符串0089840s1

=

s.rstrip('0')

#移除結(jié)尾的0print(s1)

#008984s2

=

s.strip('0')

#去除字符串首尾0print(s2)

#89845.9隱私信息脫敏實(shí)例說(shuō)明:手機(jī)號(hào)屬于個(gè)人隱私信息,編程將用戶輸入的手機(jī)號(hào)的4-7位用“*”替換。輸入格式為:11位數(shù)字的手機(jī)號(hào)碼,如思路:可以使用字符串切片,取出保留的數(shù)字,再加上星號(hào),重新進(jìn)行拼接也可以使用replace()方法,將4-7位的字符串替換為星號(hào)實(shí)例5.9隱私信息脫敏實(shí)例def

mask_phone_number(phone_number):

"""將手機(jī)號(hào)的4-7位用“*”替換,phone_number:11位數(shù)字的手機(jī)號(hào)碼

返回替換后的手機(jī)號(hào)碼或出錯(cuò)信息

"""

if

len(phone_number)

!=

11

or

not

phone_number.isdigit():

return

"請(qǐng)輸入11位數(shù)字的手機(jī)號(hào)碼"

return

phone_number[:3]

+

"****"

+

phone_number[7:]

phone_number

=

input("請(qǐng)輸入11位數(shù)字的手機(jī)號(hào)碼:")masked_phone_number

=

mask_phone_number(phone_number)print(masked_phone_number)

字符串拼接5.9隱私信息脫敏實(shí)例info

=

input()

#輸nfoPvt1

=

info.replace(info[3:7],

'****')

#直接將字符串第3-6這4個(gè)字符進(jìn)行替換infoPvt2

=

info.replace(info[3:7],

'****',

1)

#僅替換1次print(infoPvt1)

#139********print(infoPvt2)

#139****4321

replace()方法若不指定替換次數(shù),當(dāng)字符串中有與需替換的字符串相同的子串時(shí),也會(huì)被替換掉,當(dāng)輸入時(shí),輸出將變成“139********”。若替換的子串與其他位置的子串相同,也會(huì)有問(wèn)題,例如輸入,會(huì)輸出“****32****1”。使用切片拼接方法最為穩(wěn)妥。5.10凱撒密碼實(shí)例說(shuō)明:在密碼學(xué)中,愷撒密碼是一種最簡(jiǎn)單且最廣為人知的加密技術(shù)。這是一種替換加密的技術(shù),明文中的所有字母都在字母表上向后(或向前)按照一個(gè)固定數(shù)目進(jìn)行偏移后被替換成密文。例如,當(dāng)偏移量是3的時(shí)候,所有的字母A將被替換成D,B變成E,以此類推。輸入一個(gè)字符串明文,再輸入一個(gè)正整數(shù),代表偏移量,用愷撒密碼對(duì)明文進(jìn)行加密后輸出。實(shí)例5.10凱撒密碼實(shí)例import

string

def

caesar_cipher(plaintext,

shift):

"""愷撒加密,plaintext:輸入的明文字符串,shift:偏移量,返回加密后的密文字符串"""

lower

=

string.ascii_lowercase

#小寫字母

upper

=

string.ascii_uppercase

#大寫字母

before

=

string.ascii_letters

#全部大小寫字母

after

=

lower[shift:]

+

lower[:shift]

+

upper[shift:]

+

upper[:shift]

table

=

str.maketrans(before,

after)

#創(chuàng)建映射表

return

plaintext.translate(table)

#返回加密后的密文字符串輸入明文:Membershiptestoperations輸入偏移量:3輸出密文:Phpehuvklswhvwrshudwlrqv5.11模擬登錄驗(yàn)證碼實(shí)例說(shuō)明:使用Python來(lái)模擬一個(gè)簡(jiǎn)單的驗(yàn)證碼系統(tǒng),驗(yàn)證碼顯示為隨機(jī)生成的字符序列,用戶需要正確輸入該驗(yàn)證碼才能通過(guò)驗(yàn)證。程序功能要求:生成一個(gè)隨機(jī)驗(yàn)證碼。顯示驗(yàn)證碼,要求用戶輸入。驗(yàn)證用戶的輸入是否正確。如果輸入錯(cuò)誤,允許用戶多次嘗試。實(shí)例5.11模擬登錄驗(yàn)證碼思路:使用random和string模塊來(lái)生成一個(gè)包含字母和數(shù)字的隨機(jī)驗(yàn)證碼。使用string.ascii_letters獲取所有大小寫字母,使用string.digits獲取數(shù)字0-9,并將兩個(gè)字符串拼接為一個(gè)字符串。使用random.choice()隨機(jī)選擇字符,生成指定長(zhǎng)度的驗(yàn)證碼。[random.choice(characters)foriinrange(length)]的作用是重復(fù)length次隨機(jī)選取字符,''.join()的作用是將參數(shù)序列中的字符元素拼接為一個(gè)字符串。實(shí)例5.11模擬登錄驗(yàn)證碼實(shí)例import

randomimport

string

def

generate_captcha(length=6):

"""生成字母和數(shù)字組成的隨機(jī)驗(yàn)證碼,length:驗(yàn)證碼的長(zhǎng)度默認(rèn)為6,返回生成的驗(yàn)證碼"""

#字符庫(kù):大寫字母、小寫字母和數(shù)字

characters

=

string.ascii_letters

+

string.digits

#隨機(jī)選擇length個(gè)字符并連接為一個(gè)字符串

captcha

=

''.join([random.choice(characters)

for

i

in

range(length)])

溫馨提示

  • 1. 本站所有資源如無(wú)特殊說(shuō)明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁(yè)內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒(méi)有圖紙預(yù)覽就沒(méi)有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫(kù)網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。

最新文檔

評(píng)論

0/150

提交評(píng)論