一友扰、復(fù)習(xí)
0.列表(list)
[元素1, 元素2, 元素3···] [元素]
可變彤叉、有序
元素可以是任何數(shù)據(jù)類型,可以重復(fù)
元素的增刪改查
相關(guān)運算和方法
1.元組(tuple)
(元素1, 元素2, 元素3···) 元素1, 元素2··· [元素]
不可變村怪、有序
元素可以是任何數(shù)據(jù)類型秽浇,可以重復(fù)
獲取元素的值
相關(guān)運算
2.字典(dict)
{key1: value, key2: value2```} {}
可變、無序
元素是鍵值對甚负,鍵不可變且唯一柬焕,值可以是任何數(shù)據(jù)類型,可以重復(fù)
元素的增刪改查
相關(guān)運算和方法
3.集合(set)
{元素1, 元素2, 元素3···} set()
可變梭域,無序
元素不可變且唯一
元素的增刪查斑举;數(shù)學(xué)集合運算
相關(guān)運算
二、了解函數(shù)
打飛機游戲:
飛機的功能:左移病涨、右移 上移富玷、下移、發(fā)射子彈既穆、爆炸···
print('左移')
print('右移')
print('上移')
print('下移')
print('發(fā)射子彈')
print('爆炸')
飛行過程:左移赎懦、右移、左移幻工、左移
沒有使用函數(shù)時励两,遇到的問題:
1.同樣的代碼要寫很多事。
2.一旦功能發(fā)生改變囊颅,需要修改多處代碼
解決方法:使用函數(shù):
def zuo_yi():
print('左移')
print('看后視鏡')
print('向左打方向盤')
print('踩油門')
print('回正方向盤')
def you_yi():
print('左移')
print('看后視鏡')
print('向右打方向盤')
print('踩油門')
print('回正方向盤')
三当悔、函數(shù)
1.什么是函數(shù):
函數(shù)就是對實現(xiàn)某一功能的代碼段的封裝。
2.函數(shù)的分類:
系統(tǒng)函數(shù):系統(tǒng)已經(jīng)給我們定義好的函數(shù)踢代,我們可以直接調(diào)用函數(shù)先鱼,使用函數(shù)的功能。
input(), print(), id(), id(), type(), chr(), bin(), max()...
自定義函數(shù):需要我們自己去定義的函數(shù)奸鬓。
3.自定義函數(shù)的規(guī)范:
a.語法:
def 函數(shù)名(參數(shù)列表):
函數(shù)體
b.說明:
def -----python中聲明函數(shù)的關(guān)鍵字焙畔。
函數(shù)名 -----標(biāo)識符,不能是關(guān)鍵字串远。
PEP8命名規(guī)范宏多;見名知意(看到函數(shù)名就能大概知道函數(shù)的功能)。
() -----固定格式澡罚。
參數(shù)列表 -----參數(shù)1伸但,參數(shù)2,參數(shù)3···留搔;這里的參數(shù)叫形參更胖;
定義的時候,形參就是變量;
功能是將函數(shù)外面的數(shù)據(jù)傳遞到函數(shù)里面却妨。
: -----固定格式饵逐。
函數(shù)體 -----一個完整的函數(shù)體包含:
函數(shù)說明文檔、實現(xiàn)函數(shù)功能的代碼段彪标、函數(shù)返回值倍权。
c.初學(xué)者聲明的函數(shù)的步驟:
第一步:確定函數(shù)的功能;
第二步:根據(jù)功能給函數(shù)命名捞烟;
第三步:確定參數(shù)(形參薄声,確定需不需要參數(shù),要幾個)题画;
看實現(xiàn)的功能需不需要從外表傳值進來默辨,要傳幾個。
第四步:實現(xiàn)函數(shù)的功能苍息。
第五步:確定函數(shù)返回值
注意:函數(shù)在聲明的時候是不會執(zhí)行函數(shù)體的廓奕,只有在調(diào)用的時候才會執(zhí)行。
4.函數(shù)的調(diào)用 -----使用機器
a.語法:
函數(shù)名(實參列表)
b.說明:
函數(shù)名 -----這個函數(shù)名必須是已經(jīng)聲明過的函數(shù)档叔。
() -----固定寫法桌粉。
實參列表 -----用實參用來給形參賦值(用實參給形參賦值的過程加傳參)
實參和形參要一一對應(yīng)(數(shù)量、位置)衙四。
c.函數(shù)的調(diào)用過程(重點铃肯。。传蹈。押逼。。):
第一步:調(diào)用時惦界,回到函數(shù)聲明的位置挑格。
第二步:用實參給形參賦值(傳參)。
第三步:執(zhí)行函數(shù)體沾歪。
第四步:執(zhí)行完函數(shù)體后漂彤,確定并返回值,然后返回返回值灾搏。
第五步:回到函數(shù)調(diào)用的位置挫望,接著執(zhí)行后面的代碼。
例如:寫一個函數(shù)狂窑,功能為求兩個數(shù)的和媳板。
def new_sum(num1, num2):
"""
求兩數(shù)之和。 -----函數(shù)功能說明
:param num1:求和的第一個數(shù) -----對參數(shù) num1 進行說明
:param num2:求和的第二個數(shù) -----對參數(shù) num2 進行說明
:return: 無 -----對返回值進行說明
-----說明不換行時 Ctrl + 鼠標(biāo)指針 就都能看到所有提示
"""
print('===========================')
print(num1, '與', num2, '的兩數(shù)之和為:', num1 + num2)
x = 1
y = 2
new_sum(x, y) # 調(diào)用函數(shù)
new_sum(10, 20)
運行結(jié)果:
===========================
1 與 2 的兩數(shù)之和為: 3
===========================
10 與 20 的兩數(shù)之和為: 30
練習(xí):
1.聲明一個函數(shù)泉哈,打印指定的 n1
def jc(num1):
"""求 指定數(shù) 的階乘蛉幸。"""
i = 1
num2 = 1
while i <= num1:
num2 *= i
i += 1
print('%d 這個數(shù)的階乘為:' % num1, num2)
n = int(input('請輸入一個數(shù):'))
jc(n)
jc(5)
運行結(jié)果:
請輸入一個數(shù):2
2 這個數(shù)的階乘為: 2
5 這個數(shù)的階乘為: 120
注意:一個函數(shù)可以使用多次
2.聲明一個函數(shù)破讨,打印指定列表中指定元素對應(yīng)的下標(biāo)
def xb(list1, item):
"""打印指定列表中指定元素對應(yīng)的下標(biāo)"""
i = 0
while i < len(list1):
if list1[i] == item:
print(item, '這個元素對應(yīng)的下標(biāo)為:', i)
elif i == len(list1):
print('指定列表內(nèi)沒有該元素')
i += 1
list1 = ['a', 'b', 'c', 100]
xb(list1, 100)
xb([1, 2, 3, 'adc'], 3)
運行結(jié)果:
100 這個元素對應(yīng)的下標(biāo)為: 3
3 這個元素對應(yīng)的下標(biāo)為: 2
3.聲明一個函數(shù),功能為猜數(shù)字游戲:
隨機產(chǎn)生一個 0 ~ 100 的數(shù)字奕纫,用戶不斷的輸入數(shù)字提陶,直到輸入的數(shù)字和產(chǎn)生的數(shù)字一樣,游戲就結(jié)束若锁。
當(dāng)猜錯了搁骑,會給出大了或小了的提示斧吐。
產(chǎn)生隨機數(shù):
import random # 導(dǎo)入 random 模塊又固。
random.randint(0, 100) # 產(chǎn)生一個 0 ~ 100 的隨機整數(shù)。
解:
def csyx():
"""猜數(shù)游戲"""
print('已經(jīng)進入猜數(shù)游戲煤率。')
print('產(chǎn)生隨機數(shù)中...')
import random # 導(dǎo)入 random 模塊仰冠。
num2 = random.randint(0, 100) # 產(chǎn)生一個 0 ~ 100 的隨機整數(shù)。
print('產(chǎn)生完成蝶糯。')
num1 = int(input('請輸入一個整數(shù)( 0 ~ 100 ):'))
cs = 1
while num1 != num2:
cs += 1
if num1 < num2:
print('猜錯了洋只,稍微小了點。')
num1 = int(input('請再次輸入:'))
elif num1 > num2:
print('猜錯了昼捍,稍微大了點识虚。')
num1 = int(input('請再次輸入:'))
print('恭喜你,猜對了妒茬。\n一共猜了 %d 次担锤。\n獎勵一個么么噠~~~\n游戲結(jié)束。' % cs)
csyx()
運行結(jié)果:
已經(jīng)進入猜數(shù)游戲乍钻。
產(chǎn)生隨機數(shù)中...
產(chǎn)生完成肛循。
請輸入一個整數(shù)( 0 ~ 100 ):50
猜錯了,稍微小了點银择。
請再次輸入:70
猜錯了多糠,稍微大了點。
請再次輸入:60
猜錯了浩考,稍微小了點夹孔。
請再次輸入:65
猜錯了,稍微小了點析孽。
請再次輸入:68
猜錯了析蝴,稍微小了點。
請再次輸入:69
恭喜你绿淋,猜對了闷畸。
一共猜了 6 次。
獎勵一個么么噠~~~
游戲結(jié)束吞滞。
四佑菩、參數(shù)
1.位置參數(shù)和關(guān)鍵字參數(shù)(根據(jù)實參的傳遞方式對參數(shù)進行的分類)
a.位置參數(shù):
實參的位置和形參保持一致盾沫,按形參聲明是先后順序一一賦值
b.關(guān)鍵字參數(shù):
調(diào)用函數(shù)的時候,以 形參 = 實參 的方式來傳參殿漠,這個時候?qū)崊⒌捻樞驘o所謂
例如
def func1(a, b, c):
print(a, b, c)
# 通過位置參數(shù)給形參賦值
func1(10, 100, 1000)
# 通過關(guān)鍵字參數(shù)給形參賦值
func1(b=1000, c=100, a=10)
# 通過位置參數(shù)和關(guān)鍵字參數(shù)結(jié)合傳參(注意:關(guān)鍵字參數(shù)必須在位置參數(shù)的后面)
func1(10, 100, c=1000)
運行結(jié)果:
10 100 1000
10 1000 100
10 100 1000
2.參數(shù)默認(rèn)值
聲明函數(shù)的時候赴精,可以給參數(shù)賦默認(rèn)值。
如果一個形參有默認(rèn)值了绞幌,那么調(diào)用函數(shù)的時候蕾哟,這個參數(shù)就可以不用傳參。
如果有的形參有默認(rèn)值莲蜘,有的形參沒有默認(rèn)值谭确,那么有默認(rèn)值的參數(shù),要放在沒有默認(rèn)值的形參的后面票渠。
例如
# 參數(shù) b逐哈、c 有默認(rèn)值,在調(diào)用函數(shù)的時候 b问顷、c 就可以不用傳參昂秃。
def func2(a, b=None, c=0):
print(a, b, c)
func2(10)
運行結(jié)果:
10 None 0
3.參數(shù)的類型說明(這里面的類型說明沒有提示功能,沒有約束功能)
a.給參數(shù)設(shè)置默認(rèn)值杜窄,默認(rèn)值的類型肠骆,就是參數(shù)的類型
b.在形參后面加 : 類型名 ,來說明參數(shù)類型塞耕。這種方式調(diào)用的時候必須傳參蚀腿。
c.函數(shù)聲明的時候在 () 后面加 ->類型名 ,來說明函數(shù)返回值的類型
類型說明后的好處:
a.對實參的類型進行指導(dǎo)荷科。
b.實現(xiàn)函數(shù)功能的時候唯咬,有類型相關(guān)的語法提示。
例如:
def func3(a, list1: list, b=None)->int:
list1.append() # 說明類型后畏浆,就會有提示胆胰。
print(a, b, list1)
4.不定長參數(shù)(參數(shù)個數(shù)不確定)
a.在參數(shù)名前面加 * ,可以用來同時獲取多個實參的值刻获。
實質(zhì)是將帶 * 的參數(shù)編程元組蜀涨,將多個實參的值作為元組的元素。
b.在參數(shù)名前面加 ** 蝎毡,
會將這個參數(shù)變成一個字典厚柳,來獲取關(guān)鍵字參數(shù)的值,其它關(guān)鍵字作為 key 沐兵,實參作為 value 别垮。
注意:
a.如果函數(shù)中既有不定長參數(shù)又有普通參數(shù),不定長參數(shù)要放在普通參數(shù)之前扎谎。
b.使用不定長參數(shù)時碳想, ** 定義的長參數(shù)要放在 * 定義的長參數(shù)之后烧董。
例如:
def func4(*nums):
print(nums)
func4(1)
func4(1, 2)
func4(1, 2, 3)
# 加 * 的用法,不定長參數(shù)要放在不帶 * 的參數(shù)之前胧奔。
def func5(name, *nums):
print(name, nums)
func4(1)
func4(1, 2)
func4(1, 2, 3)
def func6(**nums):
print(nums)
func6(a=10)
func6(a=10, b=20)
# 既有 * 定義的長參數(shù)逊移,又有 ** 定義的長參數(shù),在使用的時候更靈活龙填。
def func7(*name, **nums):
print(name, nums)
func7(1, 2, 3)
func7(a=10, b=20)
func7(1, 2, 3, a=10, b=20, c=30)
運行結(jié)果:
(1,)
(1, 2)
(1, 2, 3)
(1,)
(1, 2)
(1, 2, 3)
{'a': 10}
{'a': 10, 'b': 20}
(1, 2, 3) {}
() {'a': 10, 'b': 20}
(1, 2, 3) {'a': 10, 'b': 20, 'c': 30}
練習(xí):寫一個函數(shù)胳泉,計算多個數(shù)的和(要求可以使用位置參數(shù)也可以使用關(guān)鍵字參數(shù))
def dgsdh(*tuple1, **dict1):
"""算多個數(shù)的和。"""
i = 0
k = 0
sum1 = 0
while i < len(tuple1):
sum1 += int(tuple1[i])
i += 1
for j in dict1:
x = dict1[j]
sum1 += x
k += 1
num1 = i + k
print('一共有 %d 個數(shù)字岩遗,' % num1, '和為:', sum1)
dgsdh(1, 2, 3, a=4, b=5)
運行結(jié)果:
一共有 5 個數(shù)字扇商, 和為: 15
五、返回值
1.什么是返回值 -----就是將函數(shù)里面的數(shù)據(jù)傳遞到外面
a.返回值就是函數(shù)體中喘先,調(diào)用表達式的值钳吟,就是 return 關(guān)鍵字后面表達式的值廷粒。
b.python中每個函數(shù)都有返回值窘拯,默認(rèn)是None。
函數(shù)調(diào)用表達式 -----調(diào)用函數(shù)的語句坝茎。
return -----關(guān)鍵字涤姊,只能寫在函數(shù)體中。功能:1.確定函數(shù)的返回值嗤放;2.結(jié)束函數(shù)思喊。
執(zhí)行函數(shù)的時候,如果遇到 return 次酌,函數(shù)就直接結(jié)束恨课,
并且將 return 后面的值作為函數(shù)的返回值。
函數(shù)的調(diào)用過程:
1).回到函數(shù)聲明的位置
2).傳參 -----保證每個參數(shù)都有返回值
3).執(zhí)行函數(shù)體
4).執(zhí)行完函數(shù)確定返回值 -----如果執(zhí)行過程中岳服,沒有遇到 return 剂公,函數(shù)的返回值就為 None;
若遇到 return 吊宋,函數(shù)的返回值就為 return 后面的東西纲辽。
5).回到函數(shù)調(diào)用的位置(這個時候锈候,函數(shù)調(diào)用表達式的值轧邪,就是函數(shù)的返回值)
例如
def func1():
print('*****')
return True
print('=====')
result = func1() # func1()就是函數(shù)調(diào)用表達式
print(result)
運行結(jié)果:
*****
2.多個返回值
return 值1, 值2, 值3··· -----相當(dāng)于返回一個元組。
例如:
def func2():
return 1, 2, 3
x, y, z = func2()
print(x, y, z)
運行結(jié)果:
1 2 3
3.怎么確定函數(shù)是否需要返回值
如果函數(shù)的功能要拿到新的數(shù)據(jù)琳水,就將這個數(shù)據(jù)用 return 返回这吻。