【python】每天一個(gè)小練習(xí)
文章目錄

注意規(guī)范
一、基礎(chǔ)操作題
二、面向?qū)ο驩OP
三、算法題
第一題
第二題
第三題
注意規(guī)范
(1)加上文件頭
#!/usr/bin/Python ## -*- coding: utf-8 -*-
1
2
#!/usr/bin/Python指定有什么解釋器運(yùn)行腳本及解釋器所在的位置
原因:腳本語言共同遵守的規(guī)則:當(dāng)?shù)谝恍袨?#!/path/to/script/interpreter時(shí),指定了用來執(zhí)行本腳本的解釋器。
例如:
#!/bin/sh shell腳本 #!/usr/bin/perl perl腳本 #!/usr/bin/python python腳本 #!/usr/bin/python2 python2腳本 #!/usr/bin/python3 python3腳本
1
2
3
4
5
#!/usr/bin/env會(huì)自動(dòng)搜索腳本解釋器的絕對(duì)路徑
(2)編碼規(guī)范:運(yùn)算符前后加1個(gè)空格(以對(duì)齊為目的可以用tab)、函數(shù)參數(shù)間的逗號(hào)后加1個(gè)空格、global聲明只能放在函數(shù)的開頭、設(shè)置一個(gè)tab鍵為4個(gè)空格
一、基礎(chǔ)操作題
1.獲取字符串“123456”最后2個(gè)字符
strf='123456' print(str[-2:])
1
2
2.一個(gè)編碼為GBK的字符串S,要將其轉(zhuǎn)為UTF-8的字符串
a="啊啊啊" #py3中默認(rèn)編碼是unicode bytes(a,"gdk") ans1=a.encode("utf-8") print(ans1)
1
2
3
4
3.Alist[1,2,3,1,2]對(duì)列表元素去重
list=[1,3,4,1,2] s1.set(list) print s1
1
2
3
list[-1]代表最后一個(gè)元素;list[a:-1]指向了倒數(shù)第二個(gè)
4.實(shí)現(xiàn)“1,2,3”變成[“1”,“2”,“3”]
str="1,2,3" ans=str.split(',') print(ans)
1
2
3
5.合并兩個(gè)字典a={“A”:1,“B”:2},b={“C”:3,“D”,4}
a={"A":1,"B":2} b={"C":3,"D":4} ans=dict(a.items()+b.items()) a.update(b)#用這種方法比較多 print(ans) print(a)
1
2
3
4
5
6
6.實(shí)現(xiàn)tuple和list的轉(zhuǎn)換
alist=[123,'abc'] atuple=tuple(alist)
1
2
7.把元組(“a”,“b”)和元組(1,2)變成{“a”:1,“b”:2}
a=("a","b") b=(1,2) d=dict(zip(a,b))#字典序
1
2
3
8.打亂一個(gè)列表的元素
import random x=[i for i in range(100)] print(x) x.random.shuffle() print(x)
1
2
3
4
5
9.給定2個(gè)list,A和B,找出相同元素和不同元素
a=[i for i in range(1,99,2)] b=[j for j in range(2,100,2)]#偶數(shù) x=[x in a if x in b] y=[y in (a+b) if y not in x]#非共有的數(shù)
1
2
3
4
注意列表解析的用法:
lst1 = [i*2 for i in range(1,11)] print(lst1) # 結(jié)果為[2, 4, 6, 8, 10, 12, 14, 16, 18, 20]
1
2
3
再如:創(chuàng)建一個(gè)全部為問號(hào)的二維數(shù)組(Length行Length列):
lst1 = [['?'] * Length for i in range(Length)]
1
10.a="hello"和b="你好"編碼成bytes類型
bytes('hello','utf-8') bytes('您好','gbk')
1
2
tuple=(1,2,'hi') print(len(tuple)) list=[100,23,45] print(list[0]) hello=['hi','hello'] world=['earth','field','universe'] hello.append('你好') print(hello) hello.extend(world) #插入列表 print(hello) hello.insert(0,'我的天啊') print(hello) hello.remove('你好') print(hello)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
11.注意打印的格式
print('The boss named %(name)s is %(age)d-year-old and %(height)g tall.' % boss)
1
12.各種隊(duì)列
隊(duì)列from queue import Queue(maxsize)
13.輸出所有的大寫字母和數(shù)字
https://www.cnblogs.com/pyse/p/9847812.html
14.input注意
在 Python3.x 中 raw_input() 和 input() 進(jìn)行了整合,去除了 raw_input( ),僅保留了input( )函數(shù),其接收任意任性輸入,將所有輸入默認(rèn)為字符串處理,并返回字符串類型。
15.三引號(hào)是可以換行寫代碼(有時(shí)候代碼過長(zhǎng),換行會(huì)便于理解和閱讀)
三引號(hào)字符串作為docstring
16.(1)全角用2個(gè)標(biāo)準(zhǔn)字符的位置,占2個(gè)字節(jié)
漢語是全角,注意全角的數(shù)字是半角的數(shù)字的位置的2倍。
(2)半角用1個(gè)標(biāo)準(zhǔn)字符的位置,占1個(gè)字節(jié)
英文字母、數(shù)字和字符都是半角
17.禁止空格和tab鍵混用,indent是縮進(jìn)的意思,會(huì)報(bào)錯(cuò)unindent does not match 啥的
18.避免使用from … import …
如A.py中定義 flag=1 B.py中用了 from A import *
1
2
3
4
5
如果在某個(gè)地方改了A.py的flag值——A.flag=0,這時(shí)打印A模塊和B模塊的a的值則不一樣(0,1)
19.變量只是引用對(duì)象的名稱,不會(huì)創(chuàng)建副本。
x=[1,2,3,4] y=x y[0]=0 print(x) #[0,2,3,4] print(y) #[0,2,3,4]
1
2
3
4
5
20.遍歷時(shí)刪除列表項(xiàng)
num_list=[1,2,3,4,5] for i in xrange(len(num_list)): if nym_list[i]==2: num_list.pop(i) else: print num_list[i] print num_list
1
2
3
4
5
6
7
會(huì)報(bào)錯(cuò):indexError:list index out of range,可以這么改(多一句):
num_list=[1,2,3,4,5] for i in xrange(len(num_list)): if i>- len(num_list): break if nym_list[i]==2: num_list.pop(i) else: print num_list[i] print num_list
1
2
3
4
5
6
7
8
9
或者更好的方法:
num_list=[1,2,2,4,5] num_list=[i for i in num_list if i!=2] num_list=[] for i in num_list: if i!=2: new_list.append(i)
1
2
3
4
5
6
7
8
21.函數(shù)默認(rèn)參數(shù)使用可變類型
def saver(x=[]): x.append(1) print(x) saver([2]) #[2,1] saver() #[1] saver() #[1,1] saver() #[1,1,1]
1
2
3
4
5
6
7
8
正確做法:
def saver(x=None): if x is None: x=[] x.append(1) print(x) saver([2]) #[2,1] saver() #[1] saver() #[1]
1
2
3
4
5
6
7
8
22.
不正確的使用類變量
方法順序解析MRO
class A(object): x=1 class B(A): pass class C(A): pass print A.x,B.x,C.x #1,1,1 B.x=2 print A.x,B.x,C.X #1,2,1 A.x=3 print A.x,B.x,C.x #3,2,3
1
2
3
4
5
6
7
8
9
23.將字符串?dāng)?shù)字轉(zhuǎn)為數(shù)字型,直接int(str)即可。
24.注意
printf是自動(dòng)帶換行的(很容易忘記這點(diǎn)),
另外input默認(rèn)輸入為字符串,如果要用成數(shù)字可以用int(str)等進(jìn)行轉(zhuǎn)換
。
如:輸入" 0 1 2 3 …Length-1"
ans = [i for i in range(0, Length)] for j in range(len(ans)+1): if j == 0: print(" ",end = " ") else: if j == Length: print("%d"%(j - 1)) else: print("%d"%(j - 1),end = " ")
1
2
3
4
5
6
7
8
9
官方文檔:format會(huì)代替%,所以多用format。
25.創(chuàng)建一個(gè)集合:
可以使用大括號(hào) { } 或者 set() 函數(shù)創(chuàng)建集合,
注意:創(chuàng)建一個(gè)空集合必須用 set() 而不是 { },因?yàn)?{ } 是用來創(chuàng)建一個(gè)空字典。
N1 = {1, 'A', 2, 3, 4, 4, 4} print(N1) # {1, 2, 3, 4, 'A'}
1
2
26.元組的索引,有一種是兩個(gè)雙引號(hào)的,最后數(shù)字代表步長(zhǎng):
sentence = '''andyguo happy''' sentence1 = '''aaaabbbb''' s1 = sentence[1:6:2] # 步長(zhǎng)為2,nyu s2 = sentence[:] # 所有元素 print(s1) print(s2)
1
2
3
4
5
6
27.find用于查找字符串的子串
find(substr, beg=0, end=len(string)):
在[beg, end]范圍內(nèi)查找substring,找到返回substr的起始下標(biāo),否則返回 -1。
string = 'Hello Python' print(string.find('h', 0, len(string))) # 輸出 9 print(string.find('thon') # 輸出 8 print(strin.find('thon', 9, len(string)) # 輸出 -1
1
2
3
4
28.可以通過setdefault()對(duì)空字典進(jìn)行賦值:
# 字典賦值:setdefault() d=dict() #產(chǎn)生空字典 D={} #產(chǎn)生空字典 d.setdefault('a',0) D.setdefault('b',[1,2,3,4,5]) print(d) print(D) # {'a': 0} # {'b': [1, 2, 3, 4, 5]}
1
2
3
4
5
6
7
8
9
二、面向?qū)ο驩OP
(1)類的成員函數(shù)參數(shù)第一個(gè)記得加上self,類中的成員變量記得前面加上self.
(2)如果父類有子類則記得有(object),如果沒有子類則括號(hào)都沒;
(3)主函數(shù)開頭記得有if __name__ == '__main__':
(4)盡量少使用全局變量,如果要用則簡(jiǎn)單是寫在同個(gè)項(xiàng)目的另一個(gè)文件(如文件名為globalvar)中,在主程序開頭記得import globalvar as gl,也可以不寫gl用其他名;
(5)除非從事底層開發(fā),否則很少使用繼承(子類重寫方法后有錯(cuò)不好查)
類的4種關(guān)系:繼承、實(shí)例化、組合、認(rèn)識(shí)
(6)
三、算法題
第一題
編寫一個(gè)類Cpeople(人的姓名str、年齡str、性別bool、工號(hào)int),依次從鍵盤或文件上輸入每個(gè)人的如上信息。遍歷輸出所有男性員工信息;按年齡為序輸出所有員工,同年齡則以工號(hào)升序?yàn)樾?/p>
存儲(chǔ)Cpeople類對(duì)象的數(shù)據(jù)結(jié)構(gòu)用list或dict
注意:輸出要列對(duì)齊
#!/usr/bin/python2 ## -*- coding: utf-8 -*- import functools import re class CPerson: def __init__(self,name,age,sex,number): self.name=name self.age=age self.sex=sex self.number=number def MyCmp(self,other): if self.age>other.age: return 1 elif self.age==other.age: if self.number 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 結(jié)果為: 請(qǐng)輸入人數(shù):2 請(qǐng)輸入個(gè)人信息:andy 11 男 666 男員工: 姓名:andy 年齡: 11 性別: 男 工號(hào): 666 請(qǐng)輸入個(gè)人信息:luo 22 男 007 男員工: 姓名:luo 年齡: 22 性別: 男 工號(hào): 007 ----------------- 所有的員工信息如下: 姓名:andy 11 男 666 姓名:luo 22 男 007 1 2 3 4 5 6 7 8 9 10 11 第二題 加密四位整數(shù),規(guī)則如下:每位數(shù)字加5,用和除以10的余數(shù)代替該位的數(shù)字,再將第一位和第四位交換,第二位和第三位交換 #!/usr/bin/python ## -*- coding: utf-8 -*- def encode(a): c = [] for i in range(4): c.append(int(a[i])) for j in range(4): c[j] = (c[j] + 5) % 10 c[0], c[3] = c[3], c[0] c[1], c[2] = c[2], c[1] #print(c) for k in range(4): print(c[k], end='') a = input("請(qǐng)輸入四位數(shù):") print("一開始的數(shù)字:",a) #print(type(a)) print("加密后的數(shù)字:") encode(a) 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 第三題 在鍵盤上,左手每隔2秒按下一個(gè)子母鍵盤(依次A-Z),右手每隔5秒按下一個(gè)數(shù)字鍵(0-9),模擬求按下第100個(gè)鍵是哪個(gè)手,哪個(gè)鍵。 #!/usr/bin/python ## -*- coding: utf-8 -*- BigZ=[chr(i) for i in range(65, 91)]#大寫字母A-Z Num=[int(i) for i in range(0,9)]#數(shù)字0-9 time=0 num1=0 num2=0 flag=0 while(1): global ans #每次遍歷為1s flag=flag+1 if(time%2==0): num1=num1+1 if(flag==100): ans='left' break if(time%5==0): num2=num2+1 if(flag==100): ans='right' break print(ans) if(ans=='left'): a=BigZ[num1%26] print(a) if(ans=='right'): a=Num[num2%10] print(a) 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 Python
版權(quán)聲明:本文內(nèi)容由網(wǎng)絡(luò)用戶投稿,版權(quán)歸原作者所有,本站不擁有其著作權(quán),亦不承擔(dān)相應(yīng)法律責(zé)任。如果您發(fā)現(xiàn)本站中有涉嫌抄襲或描述失實(shí)的內(nèi)容,請(qǐng)聯(lián)系我們jiasou666@gmail.com 處理,核實(shí)后本網(wǎng)站將在24小時(shí)內(nèi)刪除侵權(quán)內(nèi)容。
版權(quán)聲明:本文內(nèi)容由網(wǎng)絡(luò)用戶投稿,版權(quán)歸原作者所有,本站不擁有其著作權(quán),亦不承擔(dān)相應(yīng)法律責(zé)任。如果您發(fā)現(xiàn)本站中有涉嫌抄襲或描述失實(shí)的內(nèi)容,請(qǐng)聯(lián)系我們jiasou666@gmail.com 處理,核實(shí)后本網(wǎng)站將在24小時(shí)內(nèi)刪除侵權(quán)內(nèi)容。