這兩天后臺(tái)收到一些讀者朋友的消息兄裂,問我有沒有字符串的實(shí)戰(zhàn)項(xiàng)目句旱,我仔細(xì)思考了一下,覺得對(duì)于入門的朋友來說晰奖,不僅需要熟悉字符串的實(shí)戰(zhàn)項(xiàng)目谈撒,還應(yīng)該掌握Python的其他兩種數(shù)據(jù)類型——列表和字典。今天我就給大家介紹兩個(gè)關(guān)于Python基本數(shù)據(jù)類型的實(shí)戰(zhàn)項(xiàng)目匾南。
1.字符串趣味實(shí)戰(zhàn)
題目:替換1-20內(nèi)的數(shù)字啃匿,3的倍數(shù)和5的倍數(shù)用不同的數(shù)字代替。列出1到20的數(shù)字,若是3的倍數(shù)就用apple代替溯乒,若是5的倍數(shù)就用orange代替夹厌,若既是3的倍數(shù)又是5的倍數(shù)就用appleorange代替。
代碼思路:
第一種普通解法裆悄,循環(huán)1-20矛纹,然后用多個(gè)if/else進(jìn)行判斷:
def replace_num(i):
ifi%3 ==0andi%5 ==0:
return"banana"
ifi%3 ==0:
return'apple'
ifi%5 ==0:
return'orange'
else:
returni
fori in range(1,20):
print(replace_num(i))
第二種牛逼解法:巧妙的利用列表切片
'apple'[i%3*len('apple')::]+'orange'[i%5*len('orange')::]ori
先說一下這道題的這種解法,猶如天外有天光稼,令人拍案叫絕或南!
慢動(dòng)作分解1:
print ('apple'[1::])
>>'pple'表示從第2個(gè)位置開始切片
慢動(dòng)作分解2:
既然明白了上面的,來一個(gè)稍微復(fù)雜一點(diǎn)的
>>print ('apple'[1*5::])
為空
為啥因?yàn)?*5是5艾君,也就是要從第6個(gè)字符開始采够,apple一共就5個(gè)字符,所以輸出為空
慢動(dòng)作分解3:
foriinrange(1,10):
print ('apple'[i%3::])
>>
pple
ple
apple
pple
ple
apple
pple
ple
apple
會(huì)發(fā)現(xiàn)只有3的倍數(shù)的地方會(huì)出現(xiàn)完整的apple冰垄,其他地方都是殘缺蹬癌,但是我們?cè)趺窗逊?的倍數(shù)的地方變成空呢,簡(jiǎn)單乘以一個(gè)偏移量虹茶,這招對(duì)3的倍數(shù)沒有任何影響逝薪,但是對(duì)于其他的非3的倍數(shù)有很大的影響。
慢動(dòng)作分解4:
foriinrange(1,10):
print ('apple'[i%3*len('apple')::])
>>
apple
apple
apple
這個(gè)時(shí)候雖然把非3的過濾掉了写烤,但是我們要輸出數(shù)字啊翼闽,怎么辦呢拾徙?這里又用了一個(gè)非常巧妙的or for i in range(1,20):print(‘a(chǎn)pple’[i%3*len(‘a(chǎn)pple’)::]ori)
這道題的技巧性非常高洲炊,而且很巧妙,希望零基礎(chǔ)的同學(xué)仔細(xì)看明白每一步尼啡!
2.?列表暂衡、字典——綜合實(shí)戰(zhàn)應(yīng)用
題目:尋找班級(jí)名字最長的人
現(xiàn)有一字符串人名:
names=(' Kunpen Ji, Li XIAO, Caron Li, Donl SHI, Ji ZHAO,Fia YUAN Y, Weue
DING, Xiu XU, Haiying WANG, Hai LIN,Jey JIANG, Joson WANG E, Aiyang ZHANG,Hay
MENG, Jak ZHANG E, Chang Zhang, Coro ZHANG'
)
需要實(shí)現(xiàn)下面3個(gè)要求:
(1):排序,按照名字A-Z排序
(2):找出里面姓“ZHANG”的人數(shù)
(3):找出名字里面最長的人
代碼思路:
分析問題1:
首先我們要做的是對(duì)字符串進(jìn)行分割去掉‘崖瞭,’狂巢,然后就變成了一個(gè)長的列表,最后對(duì)列表進(jìn)行排序(注意名字前后有多余空格去掉)书聚,第一個(gè)問題就解決了唧领。
defsort_names(names):
return(sorted([name.strip()fornameinnames.split(',')]))
分析問題2:
我們需要找出姓“ZHANG”,因?yàn)槊掷锩嬗杏⑽拿趾椭形拿执菩械暮竺孢€跟E/Y斩个,所以我們先定義一個(gè)函數(shù),從分割后的新名字列表取出每一個(gè)名字驯杜,然后解析受啥、翻轉(zhuǎn),用推導(dǎo)列表形成一個(gè)新的名字列表,然后再用字符串里的.startswitch(‘ZHANG’)取出符合的名字滚局。
defget_chinese_names(names):
chinese_names=[]
fornameinsort_names(names):
iflen(name)>=2:
first_name=name.split()[0].capitalize()
last_name=name.split()[1].capitalize()
chinese_names.append(last_name+' '+first_name)
else:
chinese_names.append(name)
list_temp = []
foriinchinese_names:
ifi.startswith('Zhang'):
list_temp.append(i)
print("姓'ZHANG'的有%s個(gè)居暖,分別是:%s"% (len(list_temp), list_temp))
returnchinese_names
分析問題3:
找出名字里面字符串最長的人,我們先定義一個(gè)函數(shù)藤肢,然后從從問題1形成的新列表中取出每一個(gè)名字太闺,然后用max方法,用推導(dǎo)列表取出符合的名字嘁圈。
deflongest_name(names):
long_names = []
fornameinsort_names(names):
iflen(name) == max(len(name)fornameinsort_names(names)):
long_names.append(name)
print("名字最長的有%s個(gè)跟束,分別是:%s"% (len(long_names), long_names))
returnlong_names
完整代碼:
names = ('Kunpen Ji, Li XIAO, Caron Li,'
'Dongjian SHI, Ji ZHAO, Fia YUAN Y,'
'Wenxue DING, Xiu XU, Haiying WANG, Hai LIN,'
'Jey JIANG, Joson WANG E,'
'Aiyang ZHANG, Haiying MENG,'
'Jack ZHANG E, Chang Zhang, Coron ZHANG')
defsort_names(names):
names_list = sorted([name.strip()fornameinnames.split(',')])
returnnames_list
defget_chinese_names(names):
chinese_names=[]
fornameinsort_names(names):
iflen(name)>=2:
first_name=name.split()[0].capitalize()
last_name=name.split()[1].capitalize()
chinese_names.append(last_name+' '+first_name)
else:
chinese_names.append(name)
list_temp = []
foriinchinese_names:
ifi.startswith('Zhang'):
list_temp.append(i)
print("姓'ZHANG'的有%s個(gè),分別是:%s"% (len(list_temp), list_temp))
returnchinese_names
deflongest_name(names):
long_names = []
fornameinsort_names(names):
iflen(name) == max(len(name)fornameinsort_names(names)):
long_names.append(name)
print("名字最長的有%s個(gè)丑孩,分別是:%s"% (len(long_names), long_names))
returnlong_names
print(sort_names(names))
get_chinese_names(names)
longest_name(names)
今天給大家介紹的這兩個(gè)實(shí)戰(zhàn)項(xiàng)目冀宴,都非常經(jīng)典,希望Python入門的朋友能好好看看温学。最近也剛好有點(diǎn)時(shí)間略贮,準(zhǔn)備寫一寫Python入門的一些實(shí)戰(zhàn)項(xiàng)目,大家覺得怎么樣呢仗岖?