Python基礎(不斷更新)
1.基本語法
(1)加法的兩端只能是數字或者字符串。
如 print( ‘kkk‘ + 12 + ‘kkk‘ ) 是錯誤的,可修改為 print( ‘kkk‘ + str(12) + ‘kkk‘ ) 。類似 str() 的函數還有 int(),float()。
print(str(0)) #輸出字符串的0 print(int(‘33‘)) print(int(3.26)) #輸出3 print(float(3.402)) print(float(23)) #輸出23.0
print(int(input()))
(2)在用於條件時,0、0.0、和 ‘ ‘ (空字符串) 被當作False
name = ‘‘ while not name: #只有輸入有效的名字才跳出循環 name = input() print(‘your name:‘ + name)
name = 0 while not name: name = int(input()) print(‘最終結果:‘ + str(name)) #輸入非0整數結束
2.數學操作符
- 指數:**。如 2 ** 3 = 8。
- 整除://。如 6 // 4 = 1。
- 除法:/。如 6 / 4 = 1.5。
- * 操作符表示乘法,但是當 * 和字符串連用時,表示將字符串復制的操作。如
print(‘Jack‘ * 2) #輸出JackJack。同時註意 只能同整數配套使用
- 其他操作同 C 語言一致。
3.布爾操作符
and,not,or 代替了 C 語言的 && 和 ||
4.控制流
(1)if-else: 關鍵是通過控制代碼塊的縮進距離,Python沒有花括號,如
name = ‘Jack‘ age = 2 if(name == ‘Jack‘): print(‘Hello,Jack‘) if(age > 10): print(‘>10‘)else: print(‘<10‘) else: print(‘Who are you?‘)
(2)while 循環
age = 5 while age < 9: age += 1 #不支持 age++ print(‘age: ‘ + str(age)) if(age == 7): break print(‘end‘)
sum = 0 while True: if sum == 3: print(‘錯誤次數超過三次!‘) break else: name = input() if name != ‘11‘: sum += 1 print(‘用戶名錯誤,重新輸入用戶名:‘) continue else: print(‘用戶名正確,輸入密碼:‘) pwd = input() if pwd != ‘11‘: print(‘密碼錯誤,重新輸入用戶名:‘) sum += 1 continue
(3)for 循環。range(開始,停止【不包括它】,步長)
i = 0 for i in range(0,10,2): print(i) #0,2,4,6,8
5.字符串
(1)字符串相等否,可直接用 == 或者 != 判斷
a = ‘q‘ s = ‘qq‘ if a != s: print("yes") else: print("no")
(2)字符串的截取。同 C 語言的差別就是標號的不一致,如下圖(https://www.runoob.com/python3/python3-data-type.html)
如上圖所示,即 ‘abcdef’ 的下表是 0~5 或者 -6~-1。同時規則也常用:前閉後開。
str = ‘abcdef‘ print(str[0] + str[2]) #ac print(str[-6] + str[-1]) #af print(str[0:]) #abcdef print(str[-3:]) #def print(str[0:3]) #abc print(str[3:2]) #無結果 不能逆序 print(str[1:-1]) #bcde print(str[-6:2]) #ab
print(str[:2]) #ab
print(str[:]) #abcdef
(3)同樣可使用 in 和 not in 操作符
str = ‘12345ddd6789‘ print(‘ddd‘ in str) #True print(‘012‘ not in str) #True
(4)數組是可變的,如append、insert、del等,但是字符串是 “不可變” ,如 str[0] = ‘d‘ ,改變的方式是通過切邊方式,如
str = ‘123456789‘ str2 = str[0:2] + ‘add‘ + str[6:8] print(str2) #12add78
6.函數
(1)函數定義 def + 函數名(傳參),如
def hello(name): #傳遞的參數 print(‘你輸入了:‘ + name) i = 0 for i in range(0,3,1): hello(input())
import random #導入函數
def getNumber(j):
if j == 1:
print(‘隨機數:‘ + str(j))
return ‘A‘
elif j == 2:
print(‘隨機數:‘ + str(j))
return ‘B‘
else:
print(‘隨機數:‘ + str(j))
return ‘C‘
i = 0
for i in range(0,3,1):
r = random.randint(1,3) #random.randint函數是產生 1<=*<=3 的整數
print(getNumber(r))
(2)print() 函數。print() 函數返回值為None。
temp = print(‘測試返回值‘) if temp == None: print(‘yes‘,str(temp))
print() 函數輸出形式:
print(‘1‘,‘2‘,‘3‘) #空格自動分割 print(‘1‘, end=‘‘) print(‘2‘) # print 函數自動會加入換行符,end = ‘‘ 就制止 print(‘1‘,‘2‘,‘3‘,sep=‘..‘) #輸出通過 ‘..’ 分割
(3)global 語句。同 C 語言中一致,Python 中也分局部和全局變量,如果想通過局部函數修改全局變量,可以通過 global 函數。
def k1(): global t t = ‘已經修改1‘ def k2(): t = ‘已經修改2‘ t = ‘原始‘ print(t) #原始 k2() print(t) #原始 k1() rint(t)p #已經修改1
Python 中一個變量只能是局部或者全局變量,如
def k(): print(egg) #調用 K() 函數時,egg此句是全局變量,但在下一句中 egg 被重新聲明被認為是局部變量。報錯 egg = ‘123‘ egg = ‘444‘ k()
(4)try...except.. 函數。
def k(divide): try: return 32 / divide except: return ‘報錯‘ print(k(3)) print(k(2)) print(k(0))
7.數組
(1)用 len() 取得列表長度。直接通過下表修改值
a = [12, ‘dd‘, 2]
print(len(a))
a[0] = ‘ppp‘
print(a)
(2)數組的連接、復制、刪除
a = [12, ‘dd‘, 2]
b = [‘14‘]
d = b
c = b + a
e = b * 3
print(d,c,e,sep=‘.....‘) #[‘14‘].....[‘14‘, 12, ‘dd‘, 2].....[‘14‘, ‘14‘, ‘14‘]
del a[0] #刪除操作
print(a) #[‘dd‘, 2]
(3)數組循環
catName = [] while True: print(‘請輸入第‘ + str(len(catName) + 1) + ‘只貓名字‘) name = input() if name == ‘‘: #直接敲回車 break catName += [name] print(‘共‘+ str(len(catName)) + ‘只貓‘) for name in catName: #沒有使用range print(‘ ‘ + name)
catName = [‘fdas‘,‘fd‘,‘ioo‘,‘wew‘,‘dfs‘] for i in range(0,len(catName),2): #常用 range(len(catName)) 遍歷整個數組 print(‘ ‘ + catName[i]) #fdas ioo dfs
(4)某個值是否在數組中用,in 和 not in 判斷
import random catName = [‘1‘,‘2‘,‘3‘,‘4‘,‘5‘] i = 0 for i in range(0,4,1): t = random.randint(1,10) if(str(t) in catName): print(str(t),‘在‘) if(str(t) not in catName): print(str(t),‘不在‘)
(5)多重賦值
name = [‘1‘,‘2‘] t,a = name print(t,a) #輸出 1 2
(6)index() 方法,append(),insert(),remove(),sort()。
name = [‘1‘,‘2‘,‘1‘,‘999‘] print(name.index(‘1‘)) #返回在數組中第一個出現的下標 0 name.append(‘4‘) #在列表中添加新值 print(name) #[‘1‘, ‘2‘, ‘1‘, ‘999‘, ‘4‘] name.insert(1,‘999‘) #在下標 1 處添加新值 print(name) #[‘1‘, ‘999‘, ‘2‘, ‘1‘, ‘999‘, ‘4‘] name.remove(‘999‘) #刪除在數組中第一次出現的999,若不存在999則報錯 print(name) #[‘1‘, ‘2‘, ‘1‘, ‘999‘, ‘4‘] del name[0] print(name) #[‘2‘, ‘1‘, ‘999‘, ‘4‘] name.sort(reverse=True) #排序操作ASCII碼進行排序,可直接name.sort() print(name) #[‘999‘, ‘4‘, ‘2‘, ‘1‘]
8.元組
(1)元組和數組十分類似,主要區別有兩點如下:
- 元組輸入時使用 () 而非 [ ]
a = (1,2,3) print(a) #輸出 (1,2,3)
print(a[2]) #3
- 元組中的值不能修改,和字符串類似。所以 Python 可以以更優化的方式對待元組。同時,元組中如果之後一個值,通過加逗號來標識其是元組。(否則Python認為你只是普通括號)
a = (1,) #不加逗號,下句出錯.當元組長度只為1時使用 print(a[0])
(2)用 list 和 tuple 函數來轉換類型。常用於返回元組或者列表形式。
str = ‘1234‘ print(list(str)) #[‘1‘, ‘2‘, ‘3‘, ‘4‘] print(tuple(str)) #(‘1‘, ‘2‘, ‘3‘, ‘4‘) str2 = (‘12‘,‘dd‘) print(list(str2)) #[‘12‘, ‘dd‘]
9. 引用
(1)Python 中關於引用的知識點同 C 語言中十分類似,C 語言中如:int a = 3,實際上 a 形參是通過地址找到存儲 3 整個數字的 “格子
而數組 a[1,2,3] 則直接。這和 Python 幾乎一致。所以在 Python 中,普通類型的復制如 b = a 復制值,而數組之間復制,復制的是引用(即地址)。同樣,如果在傳遞給函數時,傳遞的參數是數組,則會改變原數組,傳遞的是一般數據類型,則不會修改原值,如:
def test(str): str += ‘g‘ def test2(name): del name[0] str = ‘ddd‘ test(str) print(str) #ddd 未修改 name = [1,2,3] test2(name) print(name) #[2, 3] #[2, 3] 修改
(2)在處理列表時,傳入的是引用,如果只想傳入值,即修改了數組而不影響原有函數,通過 copy() 實現。如果要復制的列表中還包含列表,使用 deepcopy() 。
import copy name = [1,2,3,[1,2,3]] a = name b = copy.copy(name) c = copy.deepcopy(name) a.append(‘aaa‘)wu‘xiao‘ print(name) #[1, 2, 3, [1, 2, 3], ‘aaa‘] b.append(‘bbb‘) print(name) #[1, 2, 3, [1, 2, 3], ‘aaa‘] 說明對列表有效 b[3].append(‘444‘) print(name) #[1, 2, 3, [1, 2, 3, ‘444‘], ‘aaa‘] 說明對列表中的列表有效 c.append(‘555‘) print(name) #[1, 2, 3, [1, 2, 3, ‘444‘], ‘aaa‘] 說明無效
10. 字典
(1)字典即 Map ,由鍵值對組成。字典不同於列表,字典中表項是不排序的,如(字典不能排序)
t = [1,2,3] e = [2,1,3] print(t == e) #False g = {‘k‘:‘j‘, ‘kk‘:‘jj‘} h = {‘kk‘:‘jj‘, ‘k‘:‘j‘} print(g == h) #True
print(‘k‘ in g) #True 判斷 key 是否存在
(2)keys() 方法,values() 方法,items() 方法。
g = {‘k‘:‘j‘, ‘kk‘:‘jj‘} for v in g.keys(): #key print(v) for t in g.values(): #value print(t) for b in g.items(): #key-value print(b) #輸出元組
print(list(b)) #輸出列表
for v,t in g.items(): #多重賦值
print(‘Key:‘,v,"Value",t)
(3)get() 方法。如果通過 key 值取值,存在 key 不存在的風險,get() 函數可以設置一個默認返回值,避免錯誤。
g = {‘name‘:‘Tom‘, ‘age‘:‘12‘} print(‘Welcom‘, g.get(‘name‘, ‘Jack‘), ‘he lives in‘, g.get(‘home‘,‘shanghai‘))
(4)setdefault() 方法。該方法可以設置默認 key 對應的 value。如果該 key 已經存在,則無效,如:
g = {‘r‘:‘rr‘,‘b‘:‘bb‘} g.setdefault(‘k‘, ‘kk‘) print(g) #{‘r‘: ‘rr‘, ‘b‘: ‘bb‘, ‘k‘: ‘kk‘} 修改有效 g.setdefault(‘k‘,‘mm‘) print(g) #{‘r‘: ‘rr‘, ‘b‘: ‘bb‘, ‘k‘: ‘kk‘} 修改無效
有一個較實用的場景,統計字符:
msg = ‘fadfasfasdfadsfs‘ count = {} for v in msg: count.setdefault(v, 0) #很關鍵 設置為0,而不是1 count[v] += 1 print(count)
Python基礎(不斷更新)