本章知識(shí)點(diǎn) :> 列表
- 復(fù)習(xí)一下
p0總結(jié)在線看
p1總結(jié)在線看
p4總結(jié)在線看
北京地鐵1號(hào)線
復(fù)習(xí):函數(shù)定義
-
y = ax+b
這是數(shù)學(xué)里的一個(gè)直線函數(shù),現(xiàn)在用Python來(lái)實(shí)現(xiàn)這個(gè)函數(shù)(假設(shè)a=2理疙,b=1) - 這個(gè)算法的輸入是什么猬错?輸出是什么焕毫?
- 輸入:x
- 輸出: y
- 還記得用def定義函數(shù)嗎絮识?
def line(x):
????a = 2
????b = 1
????y = a * x + b
????return y
y1 = line(4)
print(y1)
y2 = line(5)
print(y2)
- 易錯(cuò)點(diǎn):a和b要定義在函數(shù)里
- 易錯(cuò)點(diǎn):函數(shù)一定要return y
試一下 在線Python
- 如果a 和 b定義在函數(shù)外面礁苗,又想再函數(shù)里使用弟灼,可以用
global
方法 - 思考:為什么函數(shù)內(nèi)的a b 和函數(shù)外的 a b默認(rèn)不同步级解?(如果函數(shù)內(nèi)變量名和函數(shù)外想通,會(huì)引起一個(gè)很大的問(wèn)題田绑,
- 比如我們調(diào)用了很多的系統(tǒng)函數(shù)和其他人的函數(shù)勤哗,非常容易起一個(gè)變量名字和他們函數(shù)內(nèi)的相同,那就天下大亂了Q谇)
- 所以:每個(gè)函數(shù)內(nèi)的變量是自成一體的芒划,如果要再函數(shù)內(nèi)用外面的變量,可以用
global
方法
a = 2
b = 1
def line(x):
????global a,b
????y = a * x + b
????return y
試一下 在線Python
列表
- 先復(fù)習(xí)一下之前我們掌握的變量類型哦
整數(shù)
浮點(diǎn)數(shù)
字符串
布爾型
(True
False
)None
(None表示什么也沒(méi)有) - 這些變量類型叫做基礎(chǔ)變量類型欧穴。
- 現(xiàn)在要說(shuō)的列表民逼,是組合變量類型。
-
組合
是什么意思呢涮帘?
- 如果一個(gè)變量是 一顆
樹(shù)木
那么 一個(gè)組合
就是一片森林 - 把
代碼塊
取一個(gè)名字拼苍,變成函數(shù)
- 把一組相關(guān)的
變量
合到一起,取一個(gè)名调缨,變成列表
- 比如:一年級(jí)一班有5個(gè)人疮鲫,分別是小明,小紅弦叶,小飛俊犯,小黃,小麗
xiaoming = '小明‘
xiaohong = '小紅‘
xiaofei = '小飛‘
xiaohuang = '小黃‘
xiaoli = '小麗‘
- 我們可以用
列表
一年級(jí)一班來(lái)組合表示
yinianyiban = ['小明‘,'小紅‘,'小飛‘,'小黃‘,'小麗‘]
print(yinianyiban)
試一下 在線Python
-
語(yǔ)法是這樣的:
- 易錯(cuò)點(diǎn):用
[ ]
表示列表
- 易錯(cuò)點(diǎn):在列表里也可以寫變量名
- 易錯(cuò)點(diǎn):在列表里的變量可以是不同類型
a = 1
list = [a, 2,3,4, "hello world"]
print(list)
試一下 在線Python
- 這樣說(shuō)還不夠通透伤哺,其實(shí)
列表
里還可以放列表
list = [['小明’, 20],['小紅', 21],['小飛', 20]]
- 在這個(gè)list里燕侠,分別存儲(chǔ)了3個(gè)list,內(nèi)層的list由 姓名和年齡組合
list = [
['小明’, 20],
['小紅', 21],
['小飛', 20]
]
- 這樣寫更清楚一點(diǎn)了
- 兩層的list其實(shí)表達(dá)的是
表格結(jié)構(gòu)
姓名 | 年齡 |
---|---|
小明 | 20 |
小紅 | 21 |
小飛 | 20 |
.. | .. |
- 你看看是不是表格結(jié)構(gòu)默责?
試一下 在線Python
列表訪問(wèn)
yinianyiban = ['小明‘,'小紅‘,'小飛‘,'小黃‘,'小麗‘]
- 看這個(gè)列表贬循,現(xiàn)在有一個(gè)問(wèn)題,就是怎么單獨(dú)取出 某一個(gè)
元素
(就是列表里的某個(gè)變量) - 解決這個(gè)問(wèn)題之前桃序,需要把列表的隱身部分畫出來(lái)
- 有沒(méi)有注意到杖虾,列表下方多了
0, 1, 2, 3, 4 ..
- 這些數(shù)字表示的是列表元素的
下標(biāo)
(其實(shí)意思就是位置) 注意:下標(biāo)從0
開(kāi)始 - 我們可以用
下標(biāo)
來(lái)訪問(wèn)元素 - 讀取 ‘小明'
xm = yinianyiban[0] #下標(biāo)是0 ,就用0訪問(wèn)
print(xm)
試一下 在線Python
- 讀取 ’小黃'
xh = yinianyiban[3] #下標(biāo)是3媒熊,就用3訪問(wèn)
print(xh)
試一下 在線Python
可以讀取奇适,也可以賦值哦~
現(xiàn)在把'小麗'改成 '小李'
yinianyiban[4] = '小李'
print(yinianyiban)
試一下 在線Python只要
簡(jiǎn)單重復(fù)
的把列表里的元素分別讀取和改變坟比,你就會(huì)理解這種方法思考:如果讀寫表格里的數(shù)據(jù)?
list = [
['小明’, 20],
['小紅', 21],
['小飛', 20]
]
xm = list[0][0]
print(xm)
xm_age = list[0][1]
print(xm_age)
試一下 在線Python請(qǐng)先在線寫一寫之后嚷往,再思考為什么用
[0][0]
來(lái)訪問(wèn)葛账。
列表函數(shù)
- 列表有一套自己的函數(shù)
- 我們只介紹3個(gè)
- 它們解決3個(gè)常見(jiàn)問(wèn)題
- 假設(shè)有個(gè)一個(gè)列表
yinianyiban = ['小明‘,'小紅‘,'小飛‘,'小黃‘,'小麗‘]
- 1 / 現(xiàn)在只知道有個(gè)人叫
'小紅'
, 如何根據(jù)‘小紅'
(元素的值),怎么計(jì)算它的下標(biāo)
值
xh = ’小紅‘
xb = yinianyiban.index(xh) #用index函數(shù)
試一下 在線Python - 易錯(cuò)點(diǎn):列表相關(guān)的函數(shù)調(diào)用方法是用 列表名.函數(shù) (用.來(lái)連接), 記住它
- 2 / 現(xiàn)在班里來(lái)了新同學(xué) ’小新' ,怎么加入列表
xx = '小新'
yinianyiban.append(xx)
- 用append函數(shù)
- 3 / 現(xiàn)在有個(gè)同學(xué) '小飛' 轉(zhuǎn)校了,怎么從列表刪除
del yinianyiban[2]
- 小飛的下標(biāo)是2皮仁,用
del 元素
的方法來(lái)刪除元素
4 / 請(qǐng)計(jì)算一下列表里元素總數(shù)
total = len(yinianyiban)
len函數(shù)(之前介紹過(guò))
別問(wèn)我這些功能為什么這么寫籍琳,把他們記住就好。
試一下 在線Python
for 循環(huán)
- 我們有一個(gè)列表贷祈,遍歷這個(gè)列表是一種常見(jiàn)的需求 (從第一個(gè)元素到最后一個(gè)元素挨個(gè)取出)
- 思考一下:用
while
循環(huán)如何做列表遍歷趋急?
輸入:列表
輸出:挨個(gè)打印列表元素
-
print(list[n])
打印第n個(gè)元素,我們很快找到了重復(fù)的動(dòng)作
image.png 變成代碼:
list = [1,2,3,4,5]
n = 0
total = len(list)
while n < total:
????print(list[n])
????n = n + 1
試一下 在線Python
- 現(xiàn)在势誊,我們要介紹新的辦法(更簡(jiǎn)單的遍歷一個(gè)列表)
- 直接上語(yǔ)法:
for i in list:
????print(i)
-
for
循環(huán)呜达,其實(shí)語(yǔ)法不用過(guò)多解釋,for xx in xx
表達(dá)的意思就是從列表里循環(huán)取出 for i in list:
- 注意這里的i粟耻,i是list里的元素查近,在循環(huán)過(guò)程中,i會(huì)依次等于 list[0],list[1],....
試一下 在線Python -
for
循環(huán)是更加簡(jiǎn)便的遍歷循環(huán)寫法挤忙。 - 還記得我說(shuō)的 只有 P0 P1 是編程基礎(chǔ)嗎霜威,其實(shí)后面的知識(shí)都是為了簡(jiǎn)化,簡(jiǎn)便册烈,方便~~
綜合運(yùn)用
有沒(méi)有注意到侥祭,我把地鐵1號(hào)線用一個(gè)紅框框起來(lái)
你猜的沒(méi)錯(cuò),看見(jiàn)這個(gè)紅框我們立即就能想到
列表
,這就是天生的列表結(jié)構(gòu)
扒牙濉!問(wèn)題:我們的1號(hào)線地鐵問(wèn)題谈宛,實(shí)現(xiàn)路人問(wèn)路次哈,并且通過(guò)打印
"右走1站"
"右走1站"
...
或者
"左走1站"
"左走1站"
...
來(lái)指路。(考慮特殊情況如果 用戶要去的就是 王府井
站吆录,那么請(qǐng)打印 "現(xiàn)在出站"
)
最新要求:用戶只要告知站名(如 ”西單“)就可以問(wèn)路窑滞,不需要告訴站號(hào)(如 11)
思考一下,站號(hào)本來(lái)就是不必須的恢筝。
"站名轉(zhuǎn)站號(hào)算法"
輸入:站名 輸出 :站號(hào)
看一下原來(lái)的寫法(我用函數(shù)表示了)
def name2num(end):
????#"站名轉(zhuǎn)站號(hào)算法"
????if end == '四惠東':
????????end_num = 1
????if end == '四惠':
????????end_num = 2
????if end == '大望路':
????????end_num = 3
????... #if太多我不寫了
????return end_num
主程序的代碼:
start = '?'#具體執(zhí)行時(shí)填寫
start_num = 0
end = '?' #具體執(zhí)行時(shí)填寫
end_num = 0 #默認(rèn)是0哀卫,請(qǐng)用算法計(jì)算
#注意,start和end可以算出num
start_num = name2num(start)
end_num = name2num(end)
fangxiang = ''
zou_num = 0
if start_num == end_num:
????print("現(xiàn)在出站")
if start_num < end_num:
????fangxiang = '右'
????zou_num = end_num - start_num
????a = 0
????while a < zou_num:
????????print(fangxiang+'走1站') #一定要4個(gè)空格
????????a = a + 1
if start_num > end_num:
????fangxiang = '左'
????zou_num = start_num - end_num
????a = 0
????while a < zou_num:
????????print(fangxiang+'走1站') #一定要4個(gè)空格
????????a = a + 1
試一下 在線Python
-
"站名轉(zhuǎn)站號(hào)算法"
現(xiàn)在撬槽,我們用一個(gè)列表來(lái)實(shí)現(xiàn)這個(gè)算法
list = ['四惠東','四惠','大望路','國(guó)貿(mào)','永安里','建國(guó)門','東單','王府井','天安門東','天安門西','西單','復(fù)興路','南禮士路','木樨地']
- 輸入:list此改,站名
- 輸出:站號(hào)(思路,用list的index方法取隱含的下標(biāo)作為站號(hào))
def name2num(list, name):
????i = list.index(name)
????return i+1 #是不是i+1就是原來(lái)的站號(hào)侄柔!
試一下 在線Python
- 秒殺共啃!
下一章會(huì)先復(fù)習(xí) 列表
的知識(shí)占调,不用擔(dān)心今天的新知識(shí)太多~
p5 知識(shí)點(diǎn)總結(jié):
目錄
0基礎(chǔ)教程金哥Python自學(xué)筆記P0~變量與運(yùn)算
0基礎(chǔ)教程金哥Python自學(xué)筆記P1~循環(huán)與控制