1忧风、先自我梳理
目前掌握了列表和字典,以及while循環(huán)和for循環(huán)球凰。而且已經(jīng)做了一些練習(xí)狮腿,現(xiàn)在的問題不再是我能不能學(xué)會Python腿宰,而是我怎么學(xué)號Python?
2缘厢、學(xué)習(xí)的兩大瓶頸
知識學(xué)完就忘:學(xué)的時(shí)候記得吃度,過一會就忘了。
缺乏理解能力:明明學(xué)會了贴硫,但做題的時(shí)候就不會了椿每。
好比我們在學(xué)校上課時(shí),明明老師講的每個(gè)字都聽進(jìn)去了英遭,但鈴聲一響间护,新學(xué)的知識就從腦袋里溜走了;復(fù)習(xí)到半夜挖诸,明明胸有成竹汁尺,但看到考卷的時(shí)候卻一臉懵逼。
2.1多律、瓶頸1:知識學(xué)完就忘
在編程學(xué)習(xí)中痴突,【掌握】知識和【記住】知識是兩個(gè)概念:【掌握知識】是知道有這個(gè)知識點(diǎn),并了解它該往哪用狼荞,而【記住知識】只是強(qiáng)行記憶知識點(diǎn)辽装,但不一定知道怎么用,用在哪粘秆。
記住知識 ≠ 掌握知識
當(dāng)你使用得足夠多如迟,你就會自然形成“肌肉記憶”,對使用場景和具體用法爛熟于心攻走。
我們需要通過幾類筆記法的運(yùn)用掌握殷勘,幫助自己掌握知識點(diǎn)。
2.1.1昔搂、用法查詢筆記
【用法查詢筆記】解決的是“知識點(diǎn)是什么”的問題
記錄知識點(diǎn)的基礎(chǔ)用法玲销,是自己的學(xué)習(xí)記錄,便于自己快速查閱摘符,加深對知識的印象贤斜。
筆記格式不限,目的就是方便自己使用逛裤。
例1瘩绒,最簡單的 “算數(shù)運(yùn)算符” 相關(guān)筆記:
例2锁荔,與“列表”相關(guān)的筆記:
制作一份不同于課堂的案例,寫出“代碼含義”和“實(shí)際運(yùn)行結(jié)果”的注釋蝙砌,這樣才能加深對知識的第一印象阳堕,需要的時(shí)候才想得起筆記在哪跋理。
例3,與“字典”相關(guān)的筆記:
逐步積累恬总,形成自己的【用法查詢筆記】:
遇見有些課堂上老師沒有涉及到的零碎知識點(diǎn)前普,也可以補(bǔ)充到筆記里,方便日后查看壹堰。
有了這些【查詢使用筆記】拭卿,在學(xué)習(xí)新知識的時(shí)候,可以及時(shí)回顧已學(xué)知識贱纠。
在練習(xí)或?qū)嵅俚臅r(shí)候记劈,可以快速查看某個(gè)知識的具體使用細(xì)節(jié)。
建議:搞一個(gè)可以自己往里面加知識點(diǎn)并巍、并且可以快速搜索的開源技術(shù)博客之類的站點(diǎn)目木。
2.1.2、深度理解筆記
【深度理解筆記】更側(cè)重解決“為什么要用”以及“怎么用這個(gè)知識點(diǎn)”的問題懊渡。
有些知識光有印象還不夠刽射,還需要知道這些知識該如何使用。所以我們需要【深度理解筆記】來總結(jié)剃执、理解知識的使用場景誓禁。
思路是回答:
“什么時(shí)候需要用到這個(gè)知識?這個(gè)知識有什么常見用法肾档?這個(gè)知識和其他知識有什么不同摹恰?”
之類的問題,并寫下自己的思考過程怒见。
案例1俗慈,列表和字典:
深度理解筆記不是一蹴而就的,它會隨著你對某一知識的理解程度的加深而不斷完善遣耍。
所以闺阱,在練習(xí)和實(shí)操的過程中,積累更多的知識舵变、運(yùn)用技巧酣溃、實(shí)操經(jīng)驗(yàn)纪隙,補(bǔ)充到深度筆記中去赊豌。
2.1.3、知識管理
如果你學(xué)Python學(xué)到“走火入魔”的話绵咱,你會發(fā)現(xiàn)【深度理解筆記】和【用法查詢筆記】本質(zhì)上就是一個(gè)“字典嵌套列表”碘饼,其中【深度理解筆記】是鍵,【用法查詢筆記】是值。
基于這個(gè)結(jié)構(gòu)由點(diǎn)到面派昧,再不斷將新知識、經(jīng)驗(yàn)循環(huán)往復(fù)的補(bǔ)充到自己的知識管理體系中去拢切。
3蒂萎、瓶頸2:缺乏解題能力
缺乏解題能力,也就是看到題目淮椰,隱隱中知道要用什么知識五慈,但就是會像便秘一樣死活卡住。
3.1主穗、如何解題
一般分為五步泻拦,即:
1、看問題:分析問題忽媒,明確結(jié)果争拐;
2、想辦法:思考需要的知識晦雨,或搜索新知識架曹;
3、找切入:思考切入點(diǎn)闹瞧;
4绑雄、試切入:切入并嘗試解決一部分問題;
5奥邮、重復(fù)直到解決問題万牺。
案例,用Python打印九九乘法表:
1洽腺、看問題:當(dāng)我們拿到這個(gè)問題時(shí)脚粟,首先思考這是什么問題呢?
要打印九九乘法表蘸朋,我們知道九九乘法表最終是什么樣子嗎珊楼?
是下述的橫著打印度液?
1 x 1 = 1厕宗,1 x 2 = 2,1 x 3=3 堕担?......
還是金字塔打右崖?
1 x 1 = 1
1 x 2 = 2霹购,2 x 2 = 4
1 x 3 = 3佑惠,2 x 3 = 6,3 x 3 = 9
......
2、想辦法:我們要用到哪些知識來解決這個(gè)問題膜楷。
首先很明顯旭咽,要打印信息就必須用到最基本的print()函數(shù)。
最取巧的辦法是像下面這樣直接寫赌厅,但顯然這么操作太原始了穷绵。
print('1 X 1 = 1')
print('1 X 2 = 2 2 X 2 = 4')
print('1 X 3 = 3 2 X 3 = 6 3 X 3 = 9')
print('1 X 4 = 4 2 X 4 = 8 3 X 4 = 12 4 X 4 = 16')......
于是我們仔細(xì)觀察,發(fā)現(xiàn)九九乘法表是有一定規(guī)律特愿,重復(fù)的結(jié)構(gòu)仲墨,所以可以想到用循環(huán)來處理。
同時(shí)揍障,我們能看到數(shù)字是在靈活變動的目养,所以用“格式化字符串”來為變動的數(shù)字預(yù)留位置會方便些。
3毒嫡、找切入:現(xiàn)在我們知道需要用的知識點(diǎn)癌蚁,但我們該先從什么地方入手來解決這個(gè)問題呢?
九九乘法表兜畸,我們會發(fā)現(xiàn)一個(gè)規(guī)律:每一行的等式里匈勋,第一位數(shù)會遞增,第二位數(shù)則會保持不變膳叨,并且在第幾行就會有多少個(gè)等式洽洁。
4、試切入:我們嘗試切入并解決一部分問題菲嘴。
我們現(xiàn)在要用到循環(huán)饿自,那么我們嘗試用兩次for循環(huán)在終端打印出:
1x2=2 2x2=4
1x3=3 2x3=6 3x3=9
如果只用循環(huán),可能代碼是這個(gè)樣子的:
fori in range(1,3):
print(str(i)+' X 2 = '+str(i*2))
for i in range(1,4):
print(str(i)+' X 3 = '+str(i*3))
你需要坐九次這樣的循環(huán)龄坪,而且要用'+'號去反復(fù)拼接數(shù)字和字符串昭雌。
那么我們可以嘗試用格式化字符串來解決這個(gè)問題,格式化字符串怎么用健田?我們前面的【用法查詢筆記】現(xiàn)在派上用場了烛卧。
于是,我們用循環(huán)和格式化字符串來打印九九乘法表妓局,得出下代碼:
for i in range(1,3):
? ? print('%d X %d = %d' % (i,2,i*2))
for i in range(1,4):
? ? print('%d X %d = %d' % (i,3,i*3))
我們一運(yùn)行总放,就發(fā)現(xiàn)結(jié)果長這樣:
1x2=2;
2x2=2;
... ...
這不是我們上圖中想要的結(jié)果,于是我們重復(fù)步驟1~4好爬,將需要的結(jié)果更新局雄,并開始思考新知識。
于是去找百度問存炮,百度告訴我炬搭。
原來print()函數(shù)里有個(gè)參數(shù)'end'是用來控制換行行數(shù)和結(jié)尾字符蜈漓。于是我們繼續(xù)嘗試解決問題,優(yōu)化上面的基礎(chǔ)代碼:
for i in range(1,3):
? ? print('%d X %d = %d' % (i,2,i*2),end = '? ')
for i in range(1,4):
? ? print('%d X %d = %d' % (i,3,i*3),end = '? ')
一運(yùn)行宫盔,發(fā)現(xiàn)結(jié)果變成這樣了:
1 X 2 = 2 2 X 2 = 4 1 X 3 = 3 2 X 3 = 6 3 X 3 = 9
太磨人了融虽,咋辦?只能找繼續(xù)找度娘灼芭,深入理解print了有额。
于是我發(fā)現(xiàn)可以用print('')來控制換行,重新改了代碼:
for i in range(1,3):
? ? print('%d X %d = %d' % (i,2,i*2),end = '? ')
print('') #用來換行
for i in range(1,4):
? ? print('%d X %d = %d' % (i,3,i*3),end = '? ')?
print('') #用來換行
終于輸出了我想要的結(jié)果:
1 X 2 = 2 2 X 2 = 4
1 X 3 = 3? 2 X 3 = 6? 3 X 3 = 9
但是這樣寫出來的代碼同樣的結(jié)構(gòu)要重復(fù)九次姿鸿,跟搬磚差不多,我得想個(gè)法子優(yōu)化這段代碼倒源。
再回來看看九九乘法表苛预,我可以發(fā)現(xiàn)行數(shù)是固定的,范圍是range(1,10)笋熬,而列數(shù)(等式)則是逐行加一热某,即第N行就有N個(gè)等式。
于是決定使用for循環(huán)消滅重復(fù)胳螟,最終將代碼縮到4行昔馋。
for i in range(1,10):
? ? for y in range(1,i+1):
? ? ? ? print('{0}x{1}={2}'.format(y,i,i*y),end = '? ')
? ? print(' ')#用來換行
用while循環(huán)和if結(jié)構(gòu)嘗試了一下,發(fā)現(xiàn)直觀一點(diǎn)糖耸,但是代碼要多一些秘遏。
i = 1
while i <= 9:
? ? j = 1
? ? while j <= i:
? ? ? ? print('%d X %d = %d' % (j,i,i*j),end = '? ')
? ? ? ? j += 1
? ? print('')
? ? i += 1
九九表做好了,完結(jié)撒花嘉竟。
下面開始總結(jié):
練習(xí)2邦危、?學(xué)習(xí)小組成績的合并排序?:
練習(xí)目標(biāo)
通過這個(gè)練習(xí),掌握列表的兩個(gè)新運(yùn)用:合并列表和列表排序舍扰。
練習(xí)要求
一次測評中倦蚪,老師將 學(xué)習(xí)小組A 和 學(xué)習(xí)小組B 的測評成績(滿分 100 分)從低到高記錄放進(jìn)兩個(gè)列表:
A=[91, 95, 97, 99],B=[92, 93, 96, 98] 边苹。
現(xiàn)在陵且,老師想將兩個(gè)小組的成績合并為一個(gè)列表,并按照從低到高的順序排序个束,你能幫老師完成嗎慕购?
思路:
列表嘛,可以用append()函數(shù)來新增列表的元素(一次一個(gè))茬底,同時(shí)可以用for循環(huán)遍歷列表里的元素脓钾。(可以考慮用經(jīng)典的冒泡排序法)就用這個(gè)知識點(diǎn),來完成列表合并和排序吧桩警。
1可训、將列表合并起來昌妹,打印檢查;(查了一堆資料握截,考慮使用列表長度來確定循環(huán)長度lenlist)
2飞崖、存到一張列表以后,使用冒泡排序法把當(dāng)前的列表從低到高排序谨胞。
3固歪、在百度以后,發(fā)現(xiàn)PYTHON直接有SORT參數(shù)胯努,一行代碼就搞定了牢裳,不用自己寫方法,表示震驚叶沛。
代碼:
list1 = [91, 95, 97, 99]?
list2 =? [92, 93, 96, 98]
for i in range(0,len(list2)):
? ? list1.append(list2[i])
list1.sort()
print(list1)