Python基礎(chǔ)
lesson_1——Python介紹
print('-----lesson_1 快速入門-----')
知識(shí)匯總:
1-Python介紹
2-語(yǔ)言的執(zhí)行方式:
1-編譯執(zhí)行:c / c++ / java(javac編譯器)
1- 編譯+鏈接
2-一旦有語(yǔ)法錯(cuò)誤坡倔,不能運(yùn)行---筆譯
3-exe---執(zhí)行文件
2-解釋型:
1-口譯---邊執(zhí)行邊翻譯
3-python官網(wǎng):https://www.python.org/
4-從print開始:
1-hello.py去運(yùn)行 cmd -----python hello.py
2-在解釋器里面運(yùn)行
1-進(jìn)入解釋器 >>>
2-輸入 print('hello')
3-pycharm運(yùn)行
4-<u>嚴(yán)格區(qū)分大小寫</u>
5-第一條語(yǔ)句前面不能有空格 咏连,但可以空行
6- print在python3一定要有小括號(hào)()
lesson_2——對(duì)象+變量
print('---lesson_2對(duì)象+變量---')
知識(shí)匯總:
1-Python 語(yǔ)言里 一切數(shù)據(jù)都是對(duì)象
2-整數(shù):
1-python 2 :int ---- long(長(zhǎng)整數(shù))
2-python 3 :只有int 沒(méi)有l(wèi)ong
3-怎么查看類型---type(100)--有返回值--該類型---<class 'int'>
3-浮點(diǎn)數(shù)--小數(shù):type(3.0)---<class 'float'>---沒(méi)有double
4-數(shù)字的運(yùn)算:
1-加法 +
2-減法 -
3-乘法 *
4-除法 /
1-在python3 9/4 == 2.25 肯定帶小數(shù)點(diǎn) 等價(jià)python2- 9//4 == 2
2-在python2 9/4 == 2 等價(jià)python3------ 9.0/4 == 2.25
5-取余 %
6-求次方----2**4
5-字符串:
1-定義:<class 'str'>
1- ' a' " a" ''' ''' ——單引號(hào)拥刻、雙引號(hào)币砂、三引號(hào)
6-字面量--直接量-- 1 3.14 'a'
7-變量:
1-優(yōu)點(diǎn):
1-代碼比較簡(jiǎn)潔
2-修改方便
2-字符串之間的連接符: +
3-變量:一個(gè)名字---一個(gè)可以改變的
1-組成:字母+數(shù)字+下劃線
2-一般以字母(大寫孔祸,小寫均可)開頭---本身沒(méi)有語(yǔ)法錯(cuò)誤
3-數(shù)字不能開頭<摇7盍觥!
4-區(qū)分大小寫
5-英文單詞--建議
6-不能與關(guān)鍵字相同(關(guān)鍵字是Python語(yǔ)言里面的特殊字符串)
import keyword
print(keyword.kwlist)
7-不要與內(nèi)置函數(shù)相同---print
4-沒(méi)有任何變量引用的對(duì)象壹士,會(huì)被Python解釋器清除
5-查看對(duì)象的地址--id() print('a的值:',a,'a的地址', id(a))
8-退出python解釋器:
1-ctrl+ z--*
2-exit()
3-quit()
9-常見(jiàn)的幾種變量的賦值
1- a= 1
2- a += 1 ------- a = a + 1
3- a *= 2 ------- a = a * 2
4- a++ ++a a-- --a python語(yǔ)法里面沒(méi)有這些
10-ctrl + / --- 注釋/取消注釋
11- print(round(1/3,6))--精確小數(shù)位數(shù)
print(type(100.0)) #type()----查看類型---<class float'>
print(round(2/3,3)) #指定精度--四舍五入
print(2**4)
print('hello '+' python')
print('hello'+3) #TypeError: must be str, not int
print(3+'hello') #TypeError: unsupported operand type(s) for +: 'int' and 'str'
welcome = '歡迎來(lái)到自動(dòng)化班學(xué)習(xí)--python'
print('小A' + welcome)
print('小B' + welcome)
print('小C' + welcome)
print('小D' + welcome)
3a = 100 #數(shù)字不能開頭
_data = 100 #普遍變量----不建議下劃線
name = 'tom' #首選字母開頭
getName = ''
get_name = ''#
a = 1
b1 = ''
print('');print();print();print() #不建議
import keyword
print(keyword.kwlist)
name = 'tom'
name = 'jack'
print(name)
lesson_3——字符串
print('---lesson3_字符串---')
知識(shí)點(diǎn)匯總:
1-什么是字符串
2-字符串的定義:內(nèi)容元素不可改變
1- 單引號(hào) - '' -----type(name) <class 'str'>
2- 雙引號(hào) - "" -----"tom"
注意:不能混著 SyntaxError: EOL while scanning string literal
3- 三引號(hào) ''' ''' """ """
使用區(qū)別:
1- 如果字符串本身有' 那么就用雙引號(hào) "
2- 如果字符串本身有" 那么就用單引號(hào) '
3- 可以使用轉(zhuǎn)義 \
4- 三引號(hào):
1-字符串定義
2-注釋
3-多行 '3.14'
3-拼接:
1-多個(gè)字符串進(jìn)行連接:連接符 +
2-多個(gè)相同字符串連接:字符串*n
4-sequence(序列)
1-特性:
1-編號(hào)-序號(hào)-下標(biāo)--------唯一的
2-元素
3-空字符串 str1 = ''
2-字符串-序列類型
1-下標(biāo) :
1-正下標(biāo)---從左邊 0 開始 到 長(zhǎng)度-1
name = 'tom'---name[3]--- IndexError: string index out of range
2-負(fù)下標(biāo)---從右邊 -1開始
3-len()---計(jì)算序列的長(zhǎng)度---有返回值--就是計(jì)算的對(duì)象的長(zhǎng)度
4-切片: str1[start:end:step]
特性:1-下標(biāo) 磷雇; 2-左含右不含
1-取中間段
1-string1[start:end], 從start 開始,到end結(jié)束,但不包括end
2-str1[獲取內(nèi)容的首字符下標(biāo):該下標(biāo)+長(zhǎng)度] ---*
2-取尾部:
1-string1[start:], 從start 開始,到字符串結(jié)束
3-取頭部:
string1[:end], 從第一個(gè)字符 開始,到end位置結(jié)束躏救,但不包括end
4-什么時(shí)候用正下標(biāo)或者負(fù)下標(biāo)?
1-看被切對(duì)象
2-如果左右都變化--切片不好操作---后續(xù)講解----split
5-被切對(duì)象螟蒸,切完之后會(huì)不會(huì)改變盒使?---不會(huì)改變,只是切出來(lái)的對(duì)象七嫌,作為一個(gè)新對(duì)象少办!
1- 切中間某一段:str1[3:3+4]
2- 切前一段:str1[:7] --留前,寫尾
3- 切后一段:str1[7:] --留尾诵原,寫前
str1[第一個(gè)切點(diǎn)下標(biāo):第2個(gè)切點(diǎn)下標(biāo):步長(zhǎng)] #步長(zhǎng)默認(rèn)是1
注釋/取消注釋: ctrl + /
info = 'name is ' tom'
print(info)
print(len(info)) #求長(zhǎng)度
print('hello\n'*3)
print('hello','tom',sep='')
print(round(100/3,6)) #33.333333
info = 'name is tom' #字符串就是序列類型
print(len(info))
print(info[len(info)-1]) #獲取最后一個(gè)元素
負(fù)下標(biāo)---從右邊開始算--- -1 開始
print(info[0-len(info)]) #最前面一個(gè)元素
print(info[0],info[-1]) #推薦
1- 獲取中間一段 info[第1刀下標(biāo):第2刀下標(biāo)]---不會(huì)對(duì)原有字符串產(chǎn)生影響
print(info[5:5+2]) #左含右不含
print(info)
2- 獲取前半段--- 寫后面一個(gè)下標(biāo)
print(info[:4])
3- 獲取后半段-- 寫前面的一個(gè)下標(biāo)
print(info[4:])
str1 = '11:12:11> 001 enter chatroom, level 2'
print(str1[10:10+3])
print(info[::-1]) #字符串的倒序--【start:end:step】
print(info[0:4:2]) #nm
print(info.index('a')) #獲取下標(biāo)
lesson_4--——列表+元組
print('---lesson4_列表+元組---')
知識(shí)點(diǎn)匯總:
1-列表---List
1-特性:
1-列表也是一種Sequence 類型
2-下標(biāo)
3-能切片
4-可以存儲(chǔ)任何類型的數(shù)據(jù)英妓,每個(gè)元素是任意類型
5-內(nèi)容可以改變:增刪改查
1-改變?cè)刂?alist[0] = 9
2-個(gè)數(shù) alist.append(5)---增加后面---追加
3-增加元素--alist.append--尾部 -- insert()--任意位置
4-刪除元素 ----del alist[0]、del alist[0:2]绍赛、alist.pop(下標(biāo))蔓纠、alist.remove(alist[1])
2-列表的定義:
1- []---英文的中括號(hào)
2-type([])---- <class 'list'>
3- 例子: alist = [1,3.14,'abc',[100,200]]、一個(gè)元素 alist = [1]
3-列表的使用
1-獲取列表元素 -- 列表名[下標(biāo)]
2-每一個(gè)元素用 , 隔開
3-切片-切出來(lái)的對(duì)象跟被切對(duì)象類型一樣
2-元組:
1-元組跟我們大家熟悉的數(shù)組是一樣的嗎吗蚌?腿倚??
1-數(shù)組:同一類型
2-元組:任意類型
特性:
1-元組也是一種Sequence 類型
2-下標(biāo)
3-能切片
4-可以存儲(chǔ)任何類型的數(shù)據(jù)蚯妇,每個(gè)元素是任意類型
5-內(nèi)容不可以改變7罅恰!箩言!
2-元組的定義:
1- 空元組 ()---type(())----<class 'tuple'>
2-一個(gè)元素的元組 tu1 = (1,)
3-元組的使用:
1- 下標(biāo)獲取值
2- 切片
3- 不能改變本身的內(nèi)容硬贯,否則
TypeError: 'tuple' object does not support item assignment
總結(jié):
1-字符串 和 元組不能改變值和數(shù)量,否則:
TypeError: 'str' object does not support item assignment
2-存儲(chǔ)角度:
1- 元組---任意類型
2- 列表---任意類型
3-元組和列表可以通過(guò)函數(shù)轉(zhuǎn)換:
1- 元組轉(zhuǎn)列表 alist = lsit(元組)
2- 列表轉(zhuǎn)元組 tu1 = tuple(列表)
4-列表和元組定義一個(gè)元素的時(shí)候區(qū)別
1- 列表 [1]
2- 元組 (1,)
5-使用場(chǎng)景:
1-列表---存儲(chǔ)的對(duì)象內(nèi)容是可以改變的 如 排序
2-元組---存儲(chǔ)的對(duì)象不想讓其他人去改變----- 配置參數(shù)
需求:
1- 保存全班學(xué)生的信息 - list tuple 都可以
2- 可以修改每一個(gè)學(xué)生信息 list
3- 可以增加/刪除-學(xué)生的信息 list
stu_info = [
[名字陨收,年齡饭豹,性別],
[名字,年齡,性別],
[名字墨状,年齡卫漫,性別]
]
alist = [10,3.14,'hello',[1,3,5]] #列表的定義
print(type(alist)) #<class 'list'>
print(len(alist))
print(alist[-1][-1]) #1- 查找元素
print(5 in alist[-1])
print(alist[0:0+1]) #列表切片出來(lái)是列表
print(alist[-1][0:0+2]) #[1, 3]
alist[0] = 20 #2- 修改值
alist.append(200) #3- 增加元素的操作---尾部增加
alist.insert(0,200) #4- 增加元素--任意位置
需求: 合并一個(gè)列表 [1,2,3,4,5]
alist = [1,2,3]
alist.append([4,5])
alist.extend(['hello',5]) #合并列表,永久
print(alist+[4,5]) #臨時(shí)
5- 刪除
del alist[0],alist[2] #IndexError: list assignment index out of range
del alist[0],alist[1] #不建議這樣寫
del alist[0:2] #[3]
res = alist.pop(0) #pop()返回一個(gè)被刪除的值
print(res)
alist.remove(alist[1]) #直接刪除值---效率比前面2種低
print(alist)
tu1 = (10,3.14,'hello',[1,3,5],(100,200)) #一個(gè)元素的時(shí)候肾砂,一定加一個(gè)逗號(hào)
print(type(tu1)) #<class 'tuple'>
print(tu1[0:1])
1-元組不支持修改元素的值--TypeError: 'tuple' object does not support item assignment
tu1[0] = 20
2-元組不能改變?cè)氐膫€(gè)數(shù)
alist = [1,2,3,4]
print(tuple(alist)) #列表轉(zhuǎn)元組--(1, 2, 3, 4)
tu2 = (10,20,30,40)
print(list(tu2)) #元組轉(zhuǎn)換成列表 [10, 20, 30, 40]
b = [1,2,3]
b.insert(1,[2]) #指定下標(biāo)位置插入元素
print(b)
print(alist .append(200)) #尾端插入元素
print(alist)
python垃圾回收機(jī)制
https://www.cnblogs.com/pinganzi/p/6646742.html
lesson_5——布爾表達(dá)式
print('---lesson5_布爾表達(dá)式---')
知識(shí)點(diǎn)匯總:
1-布爾類型:
特性:只有2種情況-- 真 / 假
1- True False
2- type(True)----- <class 'bool'>
2-布爾表達(dá)式:
1- 它的結(jié)果是bool
2- 關(guān)系運(yùn)算 3>1 關(guān)系的等價(jià) == 一個(gè)等號(hào)是賦值 不等價(jià) !=
3- 字符串的比較:
1- 是比較長(zhǎng)度嗎列赎?---- 不成立
2- 比較的是字符串對(duì)應(yīng)的ASCII值 A--65 a--97
4- 邏輯運(yùn)算
3- in not in 布爾結(jié)果
1- in 在里面
2- not in 不在里面
3- str tuple list
4- (1,3) in (1,3,5)---False
4-條件組合
1-且:條件1 and 條件2
1- 其中一個(gè)為False---整個(gè)表達(dá)式= False---一假全假,全真為真
2- 如果條件1 == True ,條件2镐确,一定會(huì)執(zhí)行(判斷)
3- 如果條件1 == False ,條件2包吝,一定不會(huì)執(zhí)行(判斷)
2-或:條件1 or 條件2
1- 其中一個(gè)為True---整個(gè)表達(dá)式=True--0- 一真全真,全假為假
2- 如果條件1 == True ,條件2源葫,一定不會(huì)執(zhí)行(判斷)
3- 如果條件1 == False ,條件2诗越,一定會(huì)執(zhí)行(判斷)
3- 不-- not
1- 取反 True--- False
4- 優(yōu)先級(jí)
1- 沒(méi)有任何括號(hào)的情況下 not > and > or
2- 建議多打括號(hào) (3(2(1)))---從里到外
3- 復(fù)雜的邏輯關(guān)系---建議注釋
isSelect = True
print(type(isSelect)) #<class 'bool'>
a = 257
b = 257
print(a == b) # 值相等 地址一樣嗎? -5 256 ---值相等 & 地址--也相等
print(a is b) # 值 + 地址都一樣
print(id(a),id(b))
print('abcd' > 'ab')
1- 字符串里: 1- 前面是后面的一個(gè)元素 2-也可以是連續(xù)一段
info = 'abcde'
print('ace' not in info)
2- 列表---1- 前面是后面的一個(gè)元素
alist = [1,3,5,7,[1,3]]
print([1,3] in alist)
def func():
print('我執(zhí)行了息堂!')
return True
func() #調(diào)用函數(shù)
if 3 == 1 or func(): # 全真為真----真
print('條件滿足嚷狞!---爬山')
print((not 3==1) and (4>2)) # 優(yōu)先級(jí): not and or
nameList = ['tom','jack','tim']
if 'jack' in nameList:
print('找到了')
if 'jack' not in nameList:
print('不調(diào)研!')
print(3==3 or 3<1 and 4>1)
print(3==3 or False)
lesson_6——條件判斷
print('---lesson6_條件判斷---')
知識(shí)點(diǎn)匯總
1-流程控制:
1-順序結(jié)構(gòu)--一步步執(zhí)行
2-選擇結(jié)構(gòu)--在某一步選擇性執(zhí)行
3-循環(huán)結(jié)構(gòu)--在一定條件下荣堰,一直執(zhí)行某段代碼(事情)
2-條件判斷
1- if --如果
1- if 條件==True: 執(zhí)行if里面的語(yǔ)句
2- if xxx: .... else: 如果--否則
1- 只有2種情況床未,肯定會(huì)執(zhí)行其中一個(gè)
2- 對(duì)立面的情況下使用
3- 多種分支 if.... elif..... else
1- 最后的else 選配
2- 只要滿足其中一個(gè)分支,就退出if的語(yǔ)句結(jié)構(gòu)
4-if的嵌套
1- 要執(zhí)行內(nèi)部的if 一定要外部的if 滿足才可以
2- 相當(dāng)于and
5-switch語(yǔ)句---沒(méi)有這個(gè)語(yǔ)法
6-多條件可以分行寫
7-注釋/取消注釋 ctrl + /
8-擴(kuò)展振坚;
1- if如果后面跟是 非0的數(shù)值薇搁、非空字符串 、非空元組渡八、非空列表啃洋,該if 的條件結(jié)果就為True
9-input()--函數(shù)--接收字符--返回的是字符串!
需求:判斷用戶輸入的手機(jī)號(hào)是否有效屎鳍,輸出對(duì)應(yīng)的運(yùn)營(yíng)商宏娄!
思路:
1- if(tel == 11):位數(shù)
if(是否純數(shù)字):1234567989a
if(號(hào)段==187) or (==139) or():前3位 in list:
移動(dòng)
elif(號(hào)段==132) or (==176) or():
聯(lián)通
elif(號(hào)段==199) or (==198) or():
電信
else:
提示:無(wú)此號(hào)段
else:
提示:有非法字符
else:
提示:位數(shù)有誤!
tel = input('輸入手機(jī)號(hào):') #控制臺(tái)輸入--返回是一個(gè)字符串
print(tel)
1- 單 if 語(yǔ)句
1- 如果是 : 后面一定要有語(yǔ)句---pass----空語(yǔ)句
2- 場(chǎng)景: 當(dāng)只需要對(duì)條件滿足的時(shí)候處理哥艇,不滿足不做任何處理
2- if -- else: 如果--否則
1- 一定會(huì)執(zhí)行其中一個(gè)
場(chǎng)景: 需要對(duì)條件不滿足的情況也進(jìn)行處理
3- if 多分支-- > 2種以上情況的選擇
4- else --根據(jù)自己需求來(lái)
1- if 單語(yǔ)句------場(chǎng)景:只需要對(duì)滿足條件的處理------不滿足的不需要處理
score = 80
if score >= 60:
print('及格了')
# pass#空語(yǔ)句---頂個(gè)位置
print('run--over!')
2- if else :場(chǎng)景: 滿足需要處理绝编,不滿足也需要處理
score = 80
if score >= 60:
print('及格了')
# pass#空語(yǔ)句---頂個(gè)位置
else:
print('再接再厲')
3- if else :場(chǎng)景: 滿足需要處理,不滿足也需要處理
tab---往后縮進(jìn) shift+tab----往前縮進(jìn)
score = 85
if score >= 90:
print('A等級(jí)')
elif score >= 80:
print('B等級(jí)')
elif score >= 70:
print('C等級(jí)')
elif score >= 60:
print('D等級(jí)')
else:#選配
print('再接再厲')
print('run--over!')
----------不建議如下寫法
score = 85
if score >= 90:
print('A等級(jí)')
if score >= 80 and score < 90:
print('B等級(jí)')
if score >= 70 and score < 80:
print('C等級(jí)')
if score >= 60 and score < 70:
print('D等級(jí)')
if score < 60:#選配
print('再接再厲')
print('run--over!')
擴(kuò)展---if 嵌套結(jié)構(gòu)---一個(gè)場(chǎng)景需要分階段(層次)做出不同處理
score = 85
if score >= 60:
if score >= 90:
print('A等級(jí)')
else:
if score >= 80:
print('B等級(jí)貌踏!')
else:
pass
else:
print('不及格十饥!')
print('run--over!')
score = input('請(qǐng)輸入分?jǐn)?shù):') #1- 只要敲回車才結(jié)束! 2- 接收是字符串
print(type(score)) #字符串
print(int(score)+20)
sex = input('請(qǐng)輸入性別:')
if int(score) >= 90 \ #尾部加’\’換行寫
and sex == 'M':
print('A---男同學(xué)')
if 如果這個(gè)條件要是 True
: True 祖乳、非零數(shù)值逗堵、非空字符串、非空元組眷昆、非空列表
if ' ':
print('條件滿足蜒秤!')
lesson_7——函數(shù)
print('----lessson 7-函數(shù)----')
知識(shí)點(diǎn)匯總:
1-函數(shù)的概念:
1-就是一段代碼
2-一段操作流程
優(yōu)點(diǎn):
1- 代碼量少-簡(jiǎn)潔
2- 維護(hù)起來(lái)方便---在函數(shù)的定義進(jìn)行修改
2-函數(shù)的定義:
1-def 函數(shù)名():
函數(shù)內(nèi)容
2- 函數(shù)的定義是不會(huì)執(zhí)行函數(shù)內(nèi)容的代碼的汁咏!
3-案例:
def func():
print('step1')
print('step2')
4- type(func) ----<class 'function'>
3-函數(shù)的調(diào)用
1- func()
2- 調(diào)用的時(shí)候才去執(zhí)行
3- 函數(shù)的定義一定要在函數(shù)的調(diào)用前面
4- 參數(shù)
1- 形參:
1-在函數(shù)定義的參數(shù) def func(a,b): a , b 都是形參
2-在pycharm 形參如果沒(méi)有被使用是灰色的,使用了的是黑色
3-def func(a,b): 一般只要參數(shù)名的參數(shù)---必填形參作媚,沒(méi)有限制類型
2- 實(shí)參
1- 在函數(shù)調(diào)用的時(shí)候?qū)嶋H傳入的參數(shù) func(1,2) 1, 2都是實(shí)參
3-函數(shù)的調(diào)用的時(shí)候不能使用如下寫法:func(a=1,2)
5- 返回值
1- 函數(shù)調(diào)用完成后攘滩,會(huì)有返回值
2- 在函數(shù)里面有 return 值
3- 返回值類型:
1- None----沒(méi)有return
2- 任意類型
3- 函數(shù)的返回值類型--取決于return 后面的類型
4- 在return 后面的語(yǔ)句不會(huì)執(zhí)行--函數(shù)一旦執(zhí)行到return該函數(shù)已經(jīng)調(diào)用完成
6- 全局變量+局部變量
1- 全局變量:在一個(gè).py文件里面,一旦定義好一個(gè)變量纸泡,后面的所有代碼都可以使用
2- 局部變量:在函數(shù)內(nèi)部的
7- 類型轉(zhuǎn)換-內(nèi)置函數(shù)
1- int()---轉(zhuǎn)換成int
1- 被轉(zhuǎn)換的內(nèi)容一定是純數(shù)值
2- str()--轉(zhuǎn)換成字符串
3- float()--轉(zhuǎn)換成浮點(diǎn)數(shù)
注意事項(xiàng):
a = 3.14---float類型
print(int(a))----舍棄小數(shù)部分取整---3
a ='3.14'---str類型
print(int(a))----報(bào)錯(cuò)漂问,不能是小數(shù)的數(shù)值內(nèi)容
8- input()---返回值是str
函數(shù):在次序上,先定義再調(diào)用-----函數(shù)調(diào)用前女揭,一定是定義了
def func(): #函數(shù)定義---不會(huì)執(zhí)行函數(shù)里面的代碼
print('step1')
print('step2')
print('step3')
func()#函數(shù)的調(diào)用蚤假!----執(zhí)行函數(shù)的代碼
print('run--over!')
def func(a,b):
print(a,b)
func((),[]) #函數(shù)調(diào)用
def get_sum(a,b):
print(a+b)
get_sum('hello','world')
def func(a,b):
# print(a+b)
return a+b
res = func(1,2)+10
print(res)
print(func(1,2))
def get_res(a,b):
if a > b:
return 1
elif a < b:
return -1
else:
return 0
res = get_res(1,2)
if res != 0:
print('兩數(shù)不等于!')
def func():
return (1,2,3)
print(func())
a = [100,200]
b = str(a) #把xxx轉(zhuǎn)換成str
print(type(b))
a = '3.14'
b = int(a) #把里面的內(nèi)容轉(zhuǎn)成int: 要求:字符串里面的內(nèi)容:一定是整型的數(shù)值---不能是小數(shù)
print(type(b))
a = 3.999
b = int(a) #把里面的內(nèi)容轉(zhuǎn)成int: 只取整數(shù)部分
print(type(b))
print(b)
lesson_8——對(duì)象方法
print('----lesson8_對(duì)象方法----')
知識(shí)點(diǎn)匯總:
1- 對(duì)象的方法:
這個(gè)對(duì)象類型在標(biāo)準(zhǔn)庫(kù)里面就有的方法
2- 對(duì)象的方法調(diào)用
對(duì)象.方法
3- 字符串---str
1-count() 計(jì)算字符串中包含的多少個(gè)指定的子字符串
str1 = 'abcaaa' ----str1.count('a') - 結(jié)果 4
2-endswith() 檢查字符串是否以指定的字符串結(jié)尾 --返回值 bool
3-startswith() 檢查字符串是否以指定的字符串開頭 --返回值 bool
4-find() 返回指定的子字符串在字符串中出現(xiàn)的位置
1- 只返回查找第一個(gè)出現(xiàn)的位置
2- str1.find('a',3) 指定開始查找下標(biāo)位置
3- 如果要查找的內(nèi)容吧兔,不在該對(duì)象里面磷仰,那么該方法返回 -1
5-isalpha() 檢查字符串中是否都是字母 ---返回值 bool
6-isdigit() 檢查字符串中是否都是數(shù)字 ---返回值 bool
7-str.join() 將 sequence類型的參數(shù)的元素字符串合并(連接)到一個(gè)字符串,string 作為分隔符
alist = ['i','like', 'football']
print('*'.join(alist))
8-split(‘str’) 將字符串分割為幾個(gè)子字符串境蔼。參數(shù)為分隔符
str1 = 'abc,def,hijk'
print(str1.split(','))
1- 返回類型是list--列表
2- 那個(gè)切點(diǎn)還有嗎灶平? 切點(diǎn)會(huì)被切掉
9-lower() 將字符串里面如果有大寫字母的全部轉(zhuǎn)為小寫字母
10-upper() 將字符串里面如果有小寫字母的全部轉(zhuǎn)為大寫字母
11-replace(‘old’,’new’,n) 替換字符串里面指定的n個(gè)子字符串
str1 = 'abcaa'
print(str1.replace('a','x',2))
注意點(diǎn): n省略則替換全部
12-strip() 將字符串前置空格和后置空格刪除 不能去中間空格
13-lstrip將字符串前置空格刪除
14-rstrip將字符串后置空格刪除
4- 列表
1-append(),給列表添加一個(gè)元素 在列表尾部
2-insert()箍土,給列表指定位置插入一個(gè)元素
alist.insert(需要插入的位置的下標(biāo),插入的值)
3-列表刪除元素
1- del alist[下標(biāo)]
2- alist.pop(下標(biāo)) 該方法有返回值民逼,是被刪元素
3- alist.remove(元素) ----效率最低,無(wú)返回值
4- alist.clear()--清空列表
5- reverse()涮帘,將列表里面元素倒序排列
str1 = 'abcdefabbbb'
# print(str1.count('x'))
print(str1.find('a',2)) #返回是元素a的下標(biāo)---如果元素不存在----返回-1
if str1.find('x') != -1: #判斷是否存在
print('該元素存在')
print('\n'.join(['i','like','play','football']))
1-里面填入--切點(diǎn) ;2- 切點(diǎn)會(huì)消失 笑诅; 3- 返回是 list;
4- 如果切點(diǎn)不存在--不操作--變成列表
info = ' name is tom '
resList = info.split('x')
print(resList)
print(resList[1])
print(info.replace('tom','jack')) #默認(rèn)全部替換
alist = [1,2,3]
alist.insert(5,100) #插入下標(biāo)大于長(zhǎng)度调缨,則在末尾插入
print(alist)
print(alist[::-1]) #翻轉(zhuǎn),相當(dāng)于 alist.reverse()吆你,但alist.reverse()改變了alist
lesson_9——字符串格式化輸入輸出
print('---lesson9_字符串格式化輸出+輸入---')
知識(shí)點(diǎn)匯總;
1-字符串格式化輸出方法一: %
1-print('名字是 %s,年齡是%s' % (name ,age))
2- %s ---字符串-----相當(dāng)于執(zhí)行了str()
3- (name ,age) 只能是元組弦叶,不能是列表
4-多個(gè)數(shù)據(jù)的打印,一定是元組
5- %d--十進(jìn)制
6- %f--6位小數(shù)
7- %x—16進(jìn)制
8-指定長(zhǎng)度打印----數(shù)值和字符串一樣的
1- %5d 右對(duì)齊妇多,不足左邊補(bǔ)空格
2- %-5d 左對(duì)齊伤哺,不足右邊補(bǔ)空格
3- 補(bǔ)0 %05d
9- 十六進(jìn)制:%#x # 加一個(gè) 0x
10-小數(shù)--float
1- 默認(rèn)是6位
2- 指定保留小數(shù)位數(shù)- %.3f-----進(jìn)行了四舍五入
3- %6.3f ---- 6代表總長(zhǎng)度(包括 . )
4- %08.3f ---- 補(bǔ)0
2-字符串格式化輸出方法二: format()---固定的 {}
1- 順序填坑:
1- 可以有元素多,不能有元素少者祖!
print('****名字是 {},年齡是 {}'.format(name ,age))
2- 下標(biāo)填坑:
1- 不能下標(biāo)越界 IndexError: tuple index out of range
print('名字是 {1},年齡是 {0}'.format(name ,age))
3- 變量方法
1- print('名字是 {name},年齡是 {age}'.format(name='tom' ,age = 18))
4-指定長(zhǎng)度輸出:
1- {:長(zhǎng)度}
1- 數(shù)值型:右對(duì)齊立莉,左補(bǔ)齊
2- 字符串:左對(duì)齊,右補(bǔ)齊
2- > 右對(duì)齊
3- < 左對(duì)齊
4- ^ 中間對(duì)齊 --- print('我叫:{:0^10},年齡是:{:0<5}'.format(name,age))
5- 數(shù)值補(bǔ)0 七问,一般是右對(duì)齊 蜓耻,左補(bǔ)0 ,不改變值
6- 字符串本身帶花括號(hào) {{}}
3- python 3.6 以后 f''
print(f'名字是{name}械巡,年齡是{age}')
4- 轉(zhuǎn)義符 \
print('name is \n tom')
5- input()---控制臺(tái)的終端輸入
1- 有返回值---str
2- 如果對(duì)得到的值進(jìn)行算術(shù)---int()刹淌、float()
3- 用戶的輸入是以一個(gè)回車符結(jié)束---不敲回車就死等
name = 'tom'
age = 20
print('名字是: '+name+'年齡是: '+str(age))
info = '名字是: '+name+'年齡是: '+str(age) #字符串格式化
print(info)
print('名字是:%s , 年齡是:%6s ' % (name,age)) #%s---字符串#
print('%06s' % name)
print('%#x' % 108) # 108/16----商6 余數(shù) 12--c----0x6c
print('%#X' % 108)
print('%1.3f' % 3.1415926) # %f 保留3位小數(shù)饶氏,格式輸出默認(rèn)是6位---四舍五入
------------------format格式化----------------------
1-補(bǔ)齊符號(hào),對(duì)齊方式
info = '名字是:{:^6},年齡是:{:^6}'.format(name,age)
print(info)
2- 下標(biāo)填坑
info = '名字是:{0},年齡是:{4}'.format(name,100,1,3,4,5)
print(info)
3- 變量填坑
info = '名字是:{name},年齡是:{age},{{}}'.format(name = 'tom',age = 18)
print(info)
info = f'名字是:{name:>6},年齡是:{age:>6}' #python3.6之后有的
print(info)
lesson_10——循環(huán)
print('---lesson10_循環(huán)---')
知識(shí)點(diǎn)匯總;
1-循環(huán)概念
1-在一定條件下有勾,重復(fù)做某件事件(代碼)
2- while循環(huán)
1- while 條件表達(dá)式:
循環(huán)體
2- 當(dāng) 條件表達(dá)式 == True 疹启,才執(zhí)行循環(huán)內(nèi)容
3- 有循環(huán)遞增變量
sumData = 0
cnt = 1
while cnt < 101:
sumData += cnt
cnt += 1
print(sumData)
4- 死循環(huán) 一定是bug?---不一定
1- 有優(yōu)點(diǎn)
2- 一般功能的死循環(huán)都是結(jié)合一定條件下的 break
while True:
psw = input('請(qǐng)輸入密碼:')
print('你再循環(huán)!蔼卡,按 q 退出!')
if psw == 'q':
break
3- for 循環(huán)--遍歷的手法
1- for name in alist:
print(name)
2- 打印 1---10
range(1,11)---左含右不含
for one in range(1,11):
print(one)
4- break 跳出本層循環(huán)喊崖!
alist = ['Mike', 'Jack', 'Mary', 'Pat','Will','Lisa']
for one in range(0,2): # 2次 0 1
for name in alist:
print(name)
if name == 'Jack':
break
5- continue --結(jié)束本次循環(huán)
1- 當(dāng)continue的條件滿足的時(shí)候,它后面的語(yǔ)句要執(zhí)行嗎菲宴? -- 不要贷祈!
6- 注釋
1- 作用:
1- 備注
2- 不執(zhí)行
2- 方法:
1- # 單行
1- 在該行代碼前面,不執(zhí)行該行代碼
2- 在該行代碼后面--備注
2- 多行
1- 注釋/取消注釋 ctrl+ /
2- 三引號(hào)
3- 函數(shù)內(nèi)容注釋
def func():
'this is func doc'
print('函數(shù)喝峦!')
print(func.doc)
7-循環(huán):
1- while:循環(huán)次數(shù)不定势誊,循環(huán)靠條件結(jié)束
2- for:遍歷操作--指定次數(shù)循環(huán)
1+2+3+4+....100
def get_sum(start,end):
cnt = start
sumData = 0 #結(jié)果
while cnt <= end: #重復(fù)執(zhí)行里面的代碼
sumData += cnt
cnt += 1
return sumData
print(get_sum(1,10))
while True: #不考慮循環(huán)次數(shù)--循環(huán)結(jié)束靠條件觸發(fā)
password = input('請(qǐng)輸入密碼:')
if password == '123':
print('密碼正確!')
break #結(jié)束循環(huán)谣蠢!
nameList.append('lili')
while
def name_print(inList):
indx = 0 #下標(biāo)
while indx < len(inList):
print(inList[indx])
indx += 1
name_print(nameList)
for name in (1,3,5,7): #遍歷操作
print(name)
for one in range(0,10): #取次數(shù)--范圍值 左含右不含
print('hello')
for one in range(0,10,2): #取次數(shù)--范圍值 左含右不含 0 2 4 6 8
print(one)
nameList = ['Mike', 'Jack', 'Mary']
for name in nameList:
if name == 'Jack':
# break #結(jié)束本層循環(huán)
continue #結(jié)束本次循環(huán)粟耻,繼續(xù)下次循環(huán)
print(name)
for one in range(0,2): #循環(huán)2次 0 1_-外循環(huán)
for name in nameList: #內(nèi)層循環(huán)
if name == 'Jack':
break
print(name)
---------------------下面是我的xxx代碼------------
---------------------get_sum函數(shù)------------
def get_sum(start,end):
'''
:param start:
:param end:
:return:
'''
cnt = start
sumData = 0 #結(jié)果
while cnt <= end: #重復(fù)執(zhí)行里面的代碼
sumData += cnt
cnt += 1
return sumData,1,2,3,4
------------------------over--------------------
print(get_sum.doc)#函數(shù)的說(shuō)明
print(print.doc)
課堂作業(yè): 9*9------乘法表
lesson_11——文件讀寫
print('---lesson11_文件讀寫---')
知識(shí)點(diǎn)匯總
1-文件
1- Python2 File -- Python3 TextIOWrapper
2-文件的打開:
1- fo = open(file,mode)-----函數(shù)---有返回值--文件對(duì)象
2- 一定要有file文件路徑(路徑、文件名眉踱、文件格式) 否則
TypeError: Required argument 'file' (pos 1) not found
3- fo = open(fileDir)---只讀
4- 路徑的寫法
1- fileDir = 'G:/pyTest1.txt'
2- fileDir2 = 'G:\pyTest1.txt'
3- fileDir3 = r'G:\pyTest1.txt'--取消轉(zhuǎn)義
5- 路徑
1- 絕對(duì)路徑--根目錄開始的 G:/pyTest1.txt
2- 相對(duì)路徑 ./當(dāng)前位置 ../ 上一級(jí)
6- 讀模式
0- 如果該文件不存在會(huì)報(bào)錯(cuò)挤忙!
1- fo = open(fileDir,'r') === fo = open(fileDir)
2- fo.tell()---獲取文件指針位置,返回當(dāng)前指針下標(biāo)谈喳,默認(rèn)為0
3- fo.read(2)----讀2個(gè)字符
4- fo.read()--讀全部?jī)?nèi)容
5-文件中的換行是2個(gè)長(zhǎng)度 \n ‘a(chǎn)\nb’---字符串中是一個(gè)
6- fo.close()--關(guān)閉文件
7- 移動(dòng)文件指針位置: seek()
1- 0模式---絕對(duì)位置模式册烈,從0開始---配套 ‘r’ fo.seek(1,0)
2- 1模式---當(dāng)前位置開始移動(dòng) fo.seek(移動(dòng)的位數(shù),模式1)
移動(dòng)的位數(shù) 正數(shù):向后移 負(fù)數(shù):向前移
前提:python3 一定在'rb'模式下---二進(jìn)制模式
3- 2模式---從尾部位置開始---rb--- 讀二進(jìn)制(bin)
1- fo.seek(-1,2)
2- 移動(dòng)的位數(shù) 正數(shù):向后移 負(fù)數(shù):向前移
案例:
fileDir = 'G:/pyTest1.txt'
fo = open(fileDir,'rb')
print('讀前',fo.tell())
print(fo.read(2))
print('讀后',fo.tell())
fo.seek(2,2)
print('移動(dòng)后',fo.tell())
8- readline() 讀取一行
1- 該方法返回是 print(type(fo.readline()))-- <class 'str'>
2- 文件指針會(huì)做相應(yīng)的偏移
9- readlines() 讀取所有行
1- 該方法返回是 print(type(fo.readlines()))-- <class 'list'>
區(qū)別:
1- fo.read()----返回str
2- fo.readlines()---返回是list---每一行是里面一個(gè)元素!
2- fo.read().splitlines()---返回list婿禽,而且去掉換行符
7- 文件寫模式:
1- fo = open(fileDir,'w')
2- 如果該路徑下的文件存在---會(huì)清空赏僧!
3- 如果該路徑下的文件不存在---會(huì)新建!
4- 在pycharm里面扭倾,你執(zhí)行了fo.write('123')--可以直接寫進(jìn)去
5- fo.write('123')--返回值---寫的字符長(zhǎng)度
6- fo.flush() 刷新寫入文件,語(yǔ)法上無(wú)此操作不會(huì)寫入磁盤淀零,但pycharm優(yōu)化會(huì)寫入
7- fo.close() 關(guān)閉文件會(huì)強(qiáng)行寫入文件
8- 追加模式 a
1- 只是為了在文件末尾追加內(nèi)容而打開文件
9- With open 方式
1- with open(fileDir) as rFile:----rF = open(fileDir)
2- 可以省略fo.close()
3- 操作多個(gè)文件
3-windows 文件里面的換行--\r\n--2個(gè)byte linux文件換行--'\n'---1個(gè)byte
fileDir = r'G:\pyTest1.txt' #'G:\pyTest.txt'
file_object = open(fileDir,'r') #有返回值
print(file_object)
print(file_object.tell()) #獲取文件指針位置---默認(rèn)是0
讀操作
# print(type(file_object.read(2))) #--str類型--<class 'str'>
print(file_object.read()) #全部元素
print(file_object.tell())
file_object.close() #關(guān)閉文件---不能讀寫
seek---移動(dòng)文件指針
print(file_object.read(2))
print(file_object.tell())
file_object.seek(1,0) #0 模式--都是從絕對(duì)零點(diǎn)開始的--文件--r模式
file_object.seek(2,2) #2 模式--需要以‘rb’模式打開文件
print(file_object.tell())
print(file_object.readlines()) #讀所有行返回是--list,‘\n’也讀取出來(lái)
print(file_object.read().splitlines()) #去換行符用的---split('\n')
文件寫操作
1- 如果文件不存在--會(huì)新建 2- 文件存在----會(huì)清空打開
fileDir = r'G:\pyTest1.txt' #'G:\pyTest.txt'
file_object = open(fileDir,'w') #有返回值
file_object.write('123456\nABCDE\nabcde') #字符串---類型
print(file_object.read(2)) #寫模式是不能讀文件--io.UnsupportedOperation: not readable
file_object.flush() #刷新寫入---建議不要省略
file_object.close()
pycharm優(yōu)化---只要需要結(jié)束--會(huì)自動(dòng)寫入
with open(fileDir,'r') as rFile,open('路徑','w') as wFile:
好處: 1- 可以打開多個(gè)文件膛壹,2- 可以省略close()
rFile.read()
wFile.write('')
print('里面代碼塊---寫文件操作代碼驾中!')
lesson_12——算法
print('---lesson12_算法---')
知識(shí)點(diǎn)匯總:
1-嵌套循環(huán)
2-列表生成式:
1-aftertax=[one*0.9 for one in beforetax]
2-aftertax=[循環(huán)體 for語(yǔ)句]
3-alist.sort(默認(rèn)正序) alist.sort(reverse=True)
4-冒泡排序:
1-確認(rèn)要排序的對(duì)象:alist--升序 / 降序
2-思維分解:
1-每一次找一個(gè)最大值
1- 找7 -對(duì)比 len -1
1- [3,1,7,0]
2- [1,3,7,0]
3- [1,3,0,7]
2- 找3 -對(duì)比 len -2 2次
1- [1,3,0,7]
2- [1,0,3,7]
3- 找1 -對(duì)比 1次
1- [1,0,3,7]
2- [0,1,3,7]
alist = [3,1,7,0]
for i in range(0,len(alist)-1): # 0 1 2--左含右不含---找最大值的次數(shù)
for j in range(0 , len(alist)-i-1): #對(duì)比次數(shù)
if alist[j] > alist[j+1]:
alist[j],alist[j+1] = alist[j+1],alist[j]
print(alist)
5-思維擴(kuò)展
1- alist = [3,1,7,0]
2- 每一次找一個(gè)最小值,不使用---min()------假設(shè)法
3- data = [] ------ data.append(最小值)
** 每一次找到最小值要記得刪除模聋!
a ,b = 3,4
核心思路:
1- 每一次找一個(gè)較大值
2- 相鄰元素比較肩民!
1- 找3次較大值---剩下的一個(gè)不就是最小值
2- 過(guò)程:
1- 找第1個(gè)較大值---8---交換了3次
1- [8,2,6,0] ---- 8 和 2 比較 -- 8大- 交換位置--[2,8,6,0]
2- [2,8,6,0] ---- 8 和 6 比較 -- 8大- 交換位置--[2,6,8,0]
3- [2,6,8,0] ---- 8 和 0 比較 -- 8大- 交換位置--[2,6,0,8]
2- 找第2個(gè)較大值---6---交換了2次
1- [2,6,0,8] ---- 2 和 6 比較 -- 6大- 交換位置--[2,6,0,8]
2- [2,6,0,8] ---- 6 和 0 比較 -- 6大- 交換位置--[2,0,6,8]
3- 找第3個(gè)較大值---2---交換了1次
1- [2,0,6,8] ---- 2 和 0 比較 -- 2大- 交換位置--[0,2,6,8]
嵌套循環(huán)的運(yùn)行邏輯:
1- 先執(zhí)行外層循環(huán)1次---
2- 全部執(zhí)行完內(nèi)循環(huán)所有--第1次
3- 再執(zhí)行外循環(huán) 第2 次
4- 全部執(zhí)行完內(nèi)循環(huán)所有--第2 次
5- 再執(zhí)行外循環(huán) 第3 次
6- 全部執(zhí)行完內(nèi)循環(huán)所有--第3 次
boys = ['Mike','Jack','Tom']
girls = ['Lisa','Linda','Mary']
for girl in girls: #3次
for boy in boys: #3次
print(girl,boy)
99乘法表 9行9列
for i in range(1,10): # 1--9 行
for j in range(1,i+1): #列
print('{}x{}={}'.format(j,i,i*j),end='\t') #在同一行里面的列不需要換行
print() #換行
beforetax=[10000,15000,8000,4000,5000]
for one in beforetax:
aftertax.append(one*0.9)
aftertax=[int(one*0.9) for one in beforetax if one > 8000] #列表生成式
print(aftertax)
def foo():
print ('in foo()')
bar()
def bar():
print ('in bar()')
foo()
def t2(para):
para = 3
b= 'a'
t2(b)
info = 'A girl come in, the name is Jack, level 955'
def getName(srcStr):
name = srcStr.split(',')[1].split(' ')[-1].strip()
return name
return srcStr.split('the name is')[1].split(',')[0].strip()
print(getName(info))
lesson_13_14——作業(yè)講解
print('---編程題1---')
需求分析:
1- 程序開始的時(shí)候提示用戶輸入學(xué)生年齡信息 格式如下:
Jack Green , 21 ; Mike Mos, 9;
2- 用戶輸入的規(guī)則:
1-學(xué)生信息之間用分號(hào)隔開(分號(hào)前后可能有不定數(shù)量的空格),
2-每個(gè)學(xué)生信息里的姓名和年齡之間用逗號(hào)隔開(逗號(hào)前后可能有不定數(shù)量的空格)
3- 按格式打忧瞬邸:
學(xué)生的姓名要求左對(duì)齊此改,寬度為20,年齡信息右對(duì)齊侄柔,寬度為2位共啃,不足前面補(bǔ)零
Jack Green : 21;
思路分解:
1- 獲取每一個(gè)學(xué)生的名字占调、年齡
1- 接收數(shù)據(jù)
info = input() #--字符串
2- 提取數(shù)據(jù)---每一個(gè)學(xué)生的 名字、年齡
1- tempList = info.split(';') #---列表-['Jack Green , 21 ','Mike Mos, 9']
2- 每一個(gè)學(xué)生的信息就是列表的里面每一個(gè)元素 Jack Green , 21
3- for 循環(huán)去遍歷
for one in tempList:
4- 再進(jìn)行切割 alist=one.split(',')
5- 名字 = alist[0].strip()
6- 年齡 = alist[1].strip()
3- 驗(yàn)證數(shù)據(jù)
print(name,age)
2- 按照要求格式化輸出
'{:<20}移剪,{:0>2}究珊;'.format(name,age)
'''
1- 獲取學(xué)生的信息--Jack Green , 21 ; Mike Mos, 9;
info = input('請(qǐng)輸入學(xué)生的信息:')
2- 把每一個(gè)學(xué)生的信息分開-----每一個(gè)學(xué)生的信息之間是以 ; 隔開
stuList = info.split(';') #返回是list---里面每一個(gè)元素就是一個(gè)學(xué)生的信息
print(stuList)
3- 遍歷列表
for one in stuList:
if one == '': # 讀取空信息則不需要處理---結(jié)束本次
continue
4- 非有效的信息則跳過(guò)
if ',' not in one: #----one.count(',') == 1:
print('缺少---- , ')
continue
獲取每一行的名字、年齡
tempList = one.split(',') #------保證這個(gè)切點(diǎn)存在
name = tempList[0].strip()
age = tempList[1].strip()
5-驗(yàn)證數(shù)據(jù)
print(name,age)
6-格式化輸出
print('{:<20}:{:0>2};'.format(name,age))
print('---編程題2---')
需求分析:
1- log---一個(gè)多行字符串---第一列:文件類型 第二列:大小
2- 統(tǒng)計(jì)相同文件的大小
思路分解:- 目標(biāo)導(dǎo)向
1- 獲取每一行的信息里面的 文件類型纵苛、文件大小
1- 理解多行---每一行有 \n
2- 獲取每一行信息 lineList = log.split('\n')-----返回列表
3- 對(duì)列表每一行的元素進(jìn)行遍歷
for line in lineList:
print(line)------每一行信息
4- 對(duì)每一行進(jìn)行獲取類型--大小
temp = line.split('\t')
fileType = temp[0].split('.')[1]
fileSize = temp[1].strip()
5- 驗(yàn)證數(shù)據(jù)
print(fileType,fileSize)
2- 統(tǒng)計(jì)相同類型文件
1- 判斷是否同類型:累加文件大小
resList = [] # [[類型1剿涮,大小1],[類型2,大小2],[類型3攻人,大小3]]
1- 拆分多行字符串--讓每一行變成獨(dú)立的一個(gè)字符串
lineList = log.split('\n') #----list-----第一列和第二列之間是制表符 \t
print(lineList)
2- 去獲取每一行的信息----for
for line in lineList:
if line == '': #不執(zhí)行空行的操作
continue
3- 說(shuō)明都是有效行信息
4- 對(duì)每一行進(jìn)行獲取類型取试、大小
tempList = line.split('\t') #---list
fileType = tempList[0].split('.')[1]
fileSize = int(tempList[1].strip())
print(fileType,fileSize)
5-統(tǒng)計(jì)----累加文件大小---int
inFlag = False #初始化---一開始認(rèn)為不存在
6- 先去匹配,這個(gè)結(jié)果列表 resList 有沒(méi)有存在該類型
[[類型1怀吻,大小1],[類型2瞬浓,大小2],[類型3,大小3]]
for one in resList:
if fileType == one[0]: #匹配上
one[1] += fileSize
inFlag = True #表明已經(jīng)累加完成---存在
break
7-for --做匹配類型---執(zhí)行for完成后--匹配結(jié)束
如果沒(méi)有匹配上類型:
if inFlag == False:
是不是需要 resList 新增該類型
resList.append([fileType,fileSize]) #[['jpeg' ,169472],['json' ,1036]]
print(resList)
print('---編程題3---')
需求分析:
請(qǐng)定義一個(gè)函數(shù) mySort蓬坡,參數(shù)為一個(gè)列表猿棉,參數(shù)列表中的元素都是整數(shù).
mySort 函數(shù)需要將參數(shù)列表中的元素按從小到大排序,最終返回一個(gè)新的list屑咳。
思路分解:
1. 創(chuàng)建一個(gè)新的列表newList
2. 先找出所有元素中最小的萨赁,append在newList里面
3. 再找出剩余的所有元素中最小的,append在newList里面
4. 依次類推兆龙,直到所有的元素都放到newList里面
alist = [8,3,0,9,1]
def mySort(inList):
newList = []
while len(inList) > 0: #循環(huán)次數(shù)
minData = min(inList) #找最小值
inList.remove(minData) #刪掉最小值
newList.append(minData) #最小值增加到新列表里面去
return newList
print(mySort(alist))
alist.sort()
def mySort(inList):
newList = []
while len(inList) > 0:
#假設(shè)法--第一個(gè)元素最小
minData = inList[0]
# minIndx = 0
# idx = 0 #總列表的下標(biāo)
#驗(yàn)證假設(shè)
for one in inList:
if minData > one: #假設(shè)的最小值不是最小--更新最小值
minData = one #-更新最小值
# minIndx = idx
# idx += 1 #下標(biāo)更新
newList.append(minData)
inList.remove(minData)
# del inList[minIndx]
return newList
print(mySort([1,8,9,0,2]))
print('---編程題4---')
需求分析:
1- 格式如下----一個(gè)file1.txt文件里面內(nèi)容
name: Jack ; salary: 12000
name :Mike ; salary: 12300
2- 格式規(guī)范
每個(gè)員工一行杖爽,記錄了員工的姓名和薪資,
每行記錄原始文件中并不對(duì)齊紫皇,中間有或多或少的空格
3- 計(jì)算出所有員工的稅后工資(薪資的90%)和扣稅明細(xì)掂林,
1- 存入新的文件 file2.txt中
2- tax表示扣稅金額和income表示實(shí)際收入,注意扣稅金額和實(shí)際收入要取整數(shù)
3- 輸出格式
name: Jack ; salary: 12000 ; tax: 1200 ; income: 10800
思路分解:
rfileDir = 'G:/pyTest1.txt'
wFileDir = 'G:/pyTest2.txt'
xinxi = ''
with open(rfileDir) as rFile,open(wFileDir,'w') as wFile:
1- 讀取文件---名字坝橡、工資
info_list = rFile.read().splitlines() #list---
for line in info_list:
if ';' in line: #有分號(hào)才處理
temp = line.split(';') #[ 'name: Jack ',' salary: 12000' ]
if ':' in temp[0] and ':' in temp[1]:
name = temp[0].split(':')[1].strip()
salary = temp[1].split(':')[1].strip()
if salary.isdigit():
salary = int(salary)
2 - 寫入文件 - --按一定格式寫
outStr = 'name:{:<6};salary:{:<6};tax:{:<6};income:{:<6};'.format(name,salary,int(salary0.1),int(salary0.9))
else:
outStr = 'this line salary is not digit'
else:
outStr = 'this line has not :'
else:
outStr = 'this line has not ;'
wFile.write(outStr + '\n')
lesson_15——字典
print('---lesson_15-字典---')
'''
1-字典的定義:
1-dict1 = {} # --空字典
2-type({}) # -----<class 'dict'>
3-字典名 = {鍵名:值,鍵名2:值2}
2-字典的優(yōu)勢(shì):
1-描述清楚
2-查找方便
3-擴(kuò)展性好
3-字典的特性:
1-它沒(méi)有下標(biāo)---不是序列類型!
2-一種映射--map
3-字典是mutable 的---可以改變
4-字典的常用操作----dict1 = {'name': 'Jack', 'age': 40}
1-獲取值:dict1['name']
2-改變值:'name'已經(jīng)存在精置,dict1['name'] = 'tom'
3-新增:這個(gè)鍵名不存在:dict1['weight'] = 160
1-python 3 ----從尾部增加
2-python 2 ----無(wú)序的
4-如果需要獲取的值對(duì)應(yīng)的鍵不存在计寇,那么-- KeyError: 'weight'
5-字典內(nèi)部元素不存在順序的概念
6-字典內(nèi)部不會(huì)存在相同鍵名
7-相同鍵名時(shí)候,后面的值會(huì)覆蓋前面的值---唯一的
8-鍵脂倦、值的類型:
1-鍵的類型:
1-數(shù)值
2-字符串
3-元組
4-列表---*不能作為鍵--TypeError: unhashable type: 'list'
5-字典---*不能作為鍵
6-鍵一定是哈希類型--不能改變的番宁!
2-值的類型:任意類型
9-鍵值對(duì)一定要成對(duì)出現(xiàn)嗎?--鍵值對(duì)
10- 'name' in dict1 --- bool
5-字典的技巧:
1-刪除字典元素:
1-del 字典名[鍵]
2- pop---有返回值
3-沒(méi)有remove()方法
4- dict1.clear() 與 dict1 = {} 不等價(jià)赖阻,地址不一樣
6-字典的遍歷:
1-for one in students: # ---one 依次取-key 鍵
2-students.items()---鍵值對(duì)
1- [(鍵1蝶押,值1),(鍵2火欧,值2)]
3- for name , info in students.items():
7-len()--鍵值長(zhǎng)度
8-d.clear()---只改變?cè)摰刂返膬?nèi)容
9-d = {}----重新指向
10-得到所有的key返回在類List中 students.keys() ['jack', 'tom']
11-得到所有的value返回在類List中 students.values()
12-增加元素---d.update({4:'4',5:'5'})
'''
字典的定義要求:
1- 鍵:可以的類型:字符串棋电、int 茎截、float、元組赶盔、
不可以是:列表企锌、字典 ---TypeError: unhashable type: 'list'---不可以改變的類型
2- 值:任意類型
'''
注意:
1- 鍵名是不是唯一的?---唯一的 后者覆蓋前者
2- 字典能不能改變?cè)氐闹担?-可以的--dict1[鍵名] = 值--這個(gè)鍵是存在的--修改值
3- 怎么在字典里增加元素于未?---可以的--dict1[鍵名] = 值--這個(gè)鍵不存在的--新增鍵值對(duì)
4- 怎么獲取字典元素值:--print(dict1['name'])
5- 這個(gè)鍵不存在撕攒,獲取這個(gè)鍵的值會(huì)怎么樣?--KeyError: 'age'
6- 我們?cè)趺丛谧值涞闹付ㄎ恢迷黾釉兀?-做不到
1- 沒(méi)有必要---字典是無(wú)序的-----不通過(guò)下標(biāo)獲取值
2- python3語(yǔ)法----增加鍵值對(duì)在--尾部
python2語(yǔ)法----增加鍵值對(duì)在--隨機(jī)
7- 刪除鍵值對(duì):
1- del dict1['name']
2- dict1.pop('name')
3- 沒(méi)有remove()方法
8- 字典是無(wú)序的--沒(méi)有下標(biāo):嫫帧6镀骸!
'''
del dict1['name']
dict1.pop('name')
print(dict1[0])
dict1['age'] = 20
print(dict1['age'])
print(dict1)
students = {
'Mike': {
'age':25,
'height':180,
'weight':80,
'nickname':'Mi'
},
'tom': {
'age':18,
'height':180,
'weight':80,
'nickname':'mm'
}
}
print(students)
import pprint #完美打印
pprint.pprint(students)
print(students['tom'])
print('age' in students) #判斷鍵是否在字典里
for one in students: #字典的遍歷其實(shí)就是對(duì)鍵的遍歷
print(students[one])
print(students.items())
鍵值對(duì)---[(鍵闷叉,值),(鍵擦俐,值)]--類列表
不能直接使用下標(biāo)--TypeError: 'dict_items' object does not support indexing
通過(guò)for遍歷
for one in students.items():
print(one)
print(list(students.items())[1]) #轉(zhuǎn)換成列表--再下標(biāo)取值---(鍵,值)--鍵值對(duì)
for name ,info in [(1,2),(3,4)]: #students.items()---鍵值對(duì)
print(name,info)
print(students.keys()) #所有鍵
print(students.values()) #所有值
print(students.items()) #所有鍵值對(duì)
d = {1:'1',2:'2'}
d.update({4:'4',5:'5'})
print(d)
passWord = {'admin':'123321','user1':'123456'}
userName = ''
psw = ''
if (userName,psw) in passWord.items():
print('該組賬號(hào)密碼存在片习!')
lesson_16——函數(shù)
print('---lesson_16 函數(shù)---')
'''
1-變量的作用域:
0-全局變量捌肴,可以在函數(shù)內(nèi)部被引用!
1-局部變量:函數(shù)內(nèi)部--只能在函數(shù)里面使用藕咏,在函數(shù)外部不能使用
2-全局變量:函數(shù)外
3-在函數(shù)內(nèi)部修改全局變量:global x
2-缺省參數(shù):
1-在函數(shù)定義的時(shí)候状知,給了初始值 def func(a,b,c=0)
2-c這個(gè)參數(shù),在函數(shù)調(diào)用的時(shí)候可以不傳值孽查,就是默認(rèn)值饥悴;如果傳,那就是傳的值
3-定義參數(shù)的時(shí)候盲再,可缺省不能放在必填參數(shù)前面
SyntaxError: non-default argument follows default argument
4- 案例:
def func(score,sex='M'):
if score > 60:
print(sex+'--及格西设!')
else:
print(sex+'--不及格')
func(80,'W')
3-可變數(shù)量參數(shù):(必填,可缺省答朋,可變數(shù)量)----寫法正確--print
1-數(shù)量可變4俊:可以n個(gè) 也可以0個(gè)
2- def calc(*numbers):
3-type(numbers)
4-如果傳值的是元組/列表--用*展開!
5-封裝成一個(gè)元組形式
6-建議定義順序: 必填梦碗,可缺省禽绪,可變數(shù)量
4-關(guān)鍵字可變數(shù)量:--dict
1-關(guān)鍵字
2-可變數(shù)量
3-**d
4-是個(gè)字典類型
5-傳值:鍵值對(duì)
6-傳入字典: **字典---展開 {1:100,2:200} 1=100 2=200 一定是str
7- **展開的話,key一定是string----TypeError: func() keywords must be strings
總結(jié):必填參數(shù)洪规、缺省參數(shù)印屁、可變參數(shù)和關(guān)鍵字參數(shù)
'''
'''
1- 必填一定在可缺省的前面--語(yǔ)法規(guī)定
2- 缺省參數(shù):
1- 不給實(shí)參---就默認(rèn)初始值
2- 傳實(shí)參----實(shí)際傳入的參數(shù)
3- 必填參數(shù)在可缺省的前面!U独雄人!
def print(self, *args, sep=' ', end='\n', file=None)
file, mode='r'
3- 可變數(shù)量參數(shù):
1- 數(shù)量可變--數(shù)量不定!D罡稀础钠!--可以是N個(gè)
2- * 的作用
1- 在形參里面---包裝一個(gè)元組
2- 在實(shí)參里面---展開作用
4- 關(guān)鍵字可變數(shù)量:
1- **d
2- func(1,2,3,4,5,6,"abc",**dict1)---dict1的key都是str
'''
'''
1- 必填一定要在可缺省前面:SyntaxError: non-default argument follows default argument
2- 當(dāng)def getSum(a,inList,b=100,*c) 我們需要將一個(gè)字典進(jìn)行傳入恰力,那么這個(gè)字典的keys
一定是str,否則 TypeError: getSum() keywords must be strings
'''
全局變量:在一個(gè).py(模塊)里面定義一個(gè)變量---從這一行開始,后面都可以使用這個(gè)變量
x = 2
def func():
global x #聲明一下
x = 9
#局部變量:在函數(shù)內(nèi)部的變量---它只能在函數(shù)內(nèi)部使用
print ("this x is in the func----1:-->",x)
func()
print ("--------------------------")
print ("this x is out of func:-------2>",x)
'''
1- 必填參數(shù):def func(a,b,c): #函數(shù)定義的時(shí)候只是變量名--必填形參
2- 可缺省參數(shù):def func(a,b,c=100)
1- 概念:
1- 函數(shù)調(diào)用的時(shí)候傳入的一個(gè)c的值---以實(shí)際傳入的為準(zhǔn)
2- 函數(shù)調(diào)用的時(shí)候不傳入的一個(gè)c的值---以默認(rèn)(定義的時(shí)候)的為準(zhǔn)
2- 作用:
1- 方便省事
2- 這個(gè)默認(rèn)值一般考慮到調(diào)用者大部分時(shí)候的---使用的場(chǎng)景(值)
3- 位置:
可缺省參數(shù)----在必填參數(shù)之后
3- 可變數(shù)量參數(shù):
1- 引入:雖然可缺省的參數(shù)可以代碼帶來(lái)省事效果--但是有個(gè)數(shù)的限制
2- 解決當(dāng)前困境:
成功案例:print(沒(méi)有個(gè)數(shù)限制)
3- 定義:
1- def func(a,*args,c=3):
2- 封裝成一個(gè)元組形式
3- 數(shù)量可以是 0 個(gè)
4- * 封裝元組的效果
4- 定義格式:
建議:定義函數(shù)參數(shù)的時(shí)候:必填珍坊、可變數(shù)量牺勾、缺省參數(shù)
5- 函數(shù)調(diào)用--如果需要傳入一個(gè)元組類型數(shù)據(jù):
- 元組 --展開的效果
4- 關(guān)鍵字可變數(shù)量參數(shù):
1- 概念:
1- def func(a,b,c=3,*kwargs):
2- ** 封裝一個(gè)---字典(鍵-值)
3- 傳入形式: 變量 = 值
2- 作用:
如同字典的效果:方便查找
3-函數(shù)調(diào)用時(shí)候我們需要把一個(gè)完整字典傳進(jìn)去
**字典名:鍵名一定是字符串
匯總:定義字典的鍵名一般都用字符串
'''
def func(a,b,c=3,*kwargs): #函數(shù)定義的時(shí)候只是變量名--必填形參
print(a,b,c,kwargs)
dict1 = {'name':'tom',10:200} # ** 把鍵名作為變量名,值還是值 鍵 = 值
func(1,2,3,c= 4,name = '')
def func(a, b, c=0, *args, **kw):
print(a,b,c,args,kw)
func(1,2,5,3)
def addSum(start=1,end=100,step=1): #默認(rèn)是1 ---必填參數(shù)一定在缺省參數(shù)前面
i = start
sumData = 0
while i <= end:
sumData += i
i += step
return sumData
print(addSum(10,200))
print('hello',end='***')
print('hello','world',sep='---')
lesson_17——模塊+包
print('-----lesson—17+18_模塊+包----')
'''
1-模塊的概念:---試卷
一個(gè).py文件就稱之為一個(gè)模塊(Module)
2-包的概念:---試卷夾
這些組織存放模塊文件的目錄阵漏,我們稱之為包(Package)
3-模塊與包的優(yōu)勢(shì):
1-方便別人調(diào)用
2-避免同名變量/函數(shù)
3-每個(gè)模塊中的變量名作用域只在本模塊中
4-模塊的使用:
1-同一個(gè)包內(nèi)的調(diào)用:
1- import 模塊名--- 相當(dāng)于執(zhí)行了一遍導(dǎo)入的模塊
2-使用變量/函數(shù):模塊名 . 函數(shù)/變量
3-如果我們模塊名很長(zhǎng)---as 取別名
from 包.模塊名 import 函數(shù) as 別名
1-優(yōu)勢(shì):可以減少字符長(zhǎng)度
2-避免導(dǎo)入對(duì)象的沖突,避免同時(shí)導(dǎo)入多個(gè)模塊里面有同名函數(shù),出現(xiàn)覆蓋情況
4-from 模塊名 import 函數(shù)/變量
from mathFunction import sumFunNew
sumFunNew(1,2)
導(dǎo)入全部:from mathFunction import * === import mathFunction
優(yōu)勢(shì):可以節(jié)省字符長(zhǎng)度描述
劣勢(shì):導(dǎo)一個(gè)用一個(gè)驻民,如果還有需求,增加下
區(qū)別:
1- import xx---全部導(dǎo)入
2- from 模塊 import 函數(shù)/變量 ,指定內(nèi)容導(dǎo)入履怯,如果后期有增加的話回还,再增加imnport后面的內(nèi)容
2-不同包的調(diào)用:
1- import testP.pTest
testP.pTest.func()
3-init.py模塊:
1-初始化模塊
2-只要你調(diào)用這個(gè)包,那么該包的init.py叹洲,就會(huì)被執(zhí)行柠硕!
5-標(biāo)準(zhǔn)庫(kù)的使用:
1-不需要程序員去 import---直接使用變量和函數(shù)---print / open() / len()
2-import time
print(time.strftime("%Y_%m_%d %H:%M:%S"))
3- 標(biāo)準(zhǔn)庫(kù)
1- 內(nèi)置類型& 內(nèi)置函數(shù)--直接使用,不需要import
2- 內(nèi)置模塊--要使用import
案例:
from datetime import date
now = date.today()
print(now)
6-模塊搜索規(guī)則:
1-import sys----sys.path
2- sys.path---第一個(gè)是空地址----當(dāng)前目錄
7-增加路徑:
1-import sys---臨時(shí)的
sys.path.append('g:/file')
2-cmd--set PYTHONPATH=g:/file
8- pip install命令行安裝第三方庫(kù)pip install selenium -i https://pypi.douban.com/simple/
9- pip list 查看安裝的第三方庫(kù)
'''
import mathFunction # 執(zhí)行了這個(gè)整個(gè)模塊mathFunction---
mathFunction.sumFun(1,2)
import newP.sonP.sonPT as sP
sP.son()
from mathFunction import sumFun,version
sumFun(1,2)
print(version)
from mathFunction import sumFun
from newP.newPTest import sumFun as SF
SF(1,2)
sumFun(1,2)
'''
import time
print(time.strftime("%Y_%m_%d %H:%M:%S"))
import sys
sys.path.append("H:\") #臨時(shí)
print(sys.path)
print('當(dāng)前模塊名是:',name) # name 模塊的名字
if name == 'main': # 如果在當(dāng)前模塊運(yùn)行的話
print('我是調(diào)試代碼--自己?jiǎn)为?dú)運(yùn)行可以使用--其他調(diào)用者用不了运提!')
lesson_18——Pycharm使用技巧
('2017-03-13 11:50:09', 271, 131),
1-思路分析:
1- 獲取每一行有效數(shù)據(jù):時(shí)間蝗柔、課程id、學(xué)生id
1- 分析文件類型--txt
2- 打開文件---open('路徑') with open('路徑') as fo:
3- 獲取每一行信息
linesList = fo.read().splitlines() # 去換行符-----返回list類型-
每一個(gè)元素是一行內(nèi)容---字符串
4- 對(duì)每一行進(jìn)行遍歷---對(duì)每一行進(jìn)行提取數(shù)據(jù)
for line in linesList:
line--------"('2017-03-13 11:50:09', 271, 131),"
對(duì)這個(gè)每一行數(shù)據(jù)進(jìn)行一個(gè)簡(jiǎn)單的處理:替換()
5- 已經(jīng)是每一行相對(duì)比較簡(jiǎn)潔的數(shù)據(jù) --"2017-03-13 11:50:09, 271, 131,"
6- 對(duì)每一行進(jìn)行split(',') --返回是list 4個(gè)元素--前3個(gè)有效民泵,
7- 進(jìn)行去空格處理下-strip()--- 以下三個(gè)元素--字符串
checkTime 2017-03-13 11:50:09
lessonId 271---int()
ueserId 131---int()
2- 按格式統(tǒng)計(jì)輸出
1- 先組織格式:
1- 每一行的課程id 時(shí)間 組合成--字典
{'lessonid': 271,'checkintime':'2017-03-13 11:50:09'}
2- infoDict = {'lessonid': lessonId,'checkintime':checkTime}
2- 統(tǒng)計(jì):同一個(gè)學(xué)生id
1- if userId not in resDict:
新增該學(xué)生id---鍵值對(duì)----
2- else
append
3- 返回
'''
def func():
print('step1')
print('step2')
print('step3')
print('step4')
fileDir = r'G:\0005_1.txt'
def putInfoToDict(fileName):
resDict = {} #保存結(jié)果的字典
1- 打開文件
with open(fileName) as fo:
2- -讀所有行
linesList = fo.read().splitlines()
for line in linesList:
line = line.replace('\t','').replace('(','')\
.replace(')','').replace("'",'').replace(';',',')
tempList = line.split(',')
checkTime = tempList[0].strip()
lessonId = int(tempList[1].strip())
userId = int(tempList[2].strip())
組織格式
infoDict = {'lessonid':lessonId,'checkintime':checkTime}
統(tǒng)計(jì)--匯總
func()
if userId not in resDict: #增加 學(xué)生id :[] 鍵值對(duì)
resDict[userId] = [] #增加鍵值對(duì)的
resDict---{ 131:[{第一次也要進(jìn)去}]}
resDict[userId].append(infoDict)
return resDict
res = putInfoToDict(fileDir)
import pprint
pprint.pprint(res)
import logging
log_file = "G:/basic20190429.log"
logging.basicConfig(filename=log_file, level=logging.DEBUG)
logging.debug("this is a debugmsg!")
logging.info("this is a infomsg!")
logging.warn("this is a warn msg!")
logging.error("this is a error msg!")
logging.critical("this is a critical msg!")