8.2第二課: 字符串 列表
在開課前放的優(yōu)秀文章可以參考簡(jiǎn)書的文章list : http://www.reibang.com/p/7cb84cfa56fa
第二課作業(yè):
作業(yè)1:
下方是一個(gè)嵌套的列表整袁,通過對(duì)x分割祠墅,打印“e”和“g”丹喻。
提示:使用 x[ ][ ]的形式吱雏。x如下:
x = [["a", "b", "c"],
["d", "e", "f"],
["g", "h", "i"]]
作業(yè)2:找最大值和最小值
以下給出一個(gè)團(tuán)隊(duì)中成員名和他們各自的微信好友數(shù)量务甥,請(qǐng)模仿上述詞頻的例子举哟,通過for循環(huán)找出團(tuán)隊(duì)中好友數(shù)最多和最少的兩個(gè)人俯渤。如下:
names = ['小趙','小錢','小孫','小李','小王','小張']
friends = [45, 100, 67, 136, 77, 17]
下文 Q&A 目錄索引:
1,代碼運(yùn)行:?jiǎn)我?hào)&輸出
2侨嘀,代碼運(yùn)行出錯(cuò)
3臭挽,and, or, not 的執(zhí)行優(yōu)先級(jí)
4,github中無法查看代碼
5,python作為工具使用
6,如何上傳代碼至jupyter
7坐梯,Jupyter安裝完成后的根目錄
8,空格健縮進(jìn)
9赤赊,代碼運(yùn)行顯示不出人名
10,“空格”和“引號(hào)”的使用
11煞赢,代碼運(yùn)行出錯(cuò)
12抛计,mac系統(tǒng)jupyternotebook無法跳轉(zhuǎn)瀏覽器
13,代碼運(yùn)行:引號(hào)
14照筑,代碼運(yùn)行:引號(hào)
15吹截,1 在不同運(yùn)行中存儲(chǔ)的位置
16,代碼理解:unique_words凝危,counts[index]
17波俄,代碼理解:count[i] ,bigWord = unique_words[I]
18蛾默,python IDLE編輯中文
19懦铺,代碼運(yùn)行:依次取漢字
20,代碼運(yùn)行:中斷方法
21支鸡,代碼理解:內(nèi)外循環(huán)
22冬念,代碼運(yùn)行出錯(cuò)
23,代碼運(yùn)行:執(zhí)行代碼無反映
24牧挣,jupyter notebook的launch 沒反應(yīng)
25急前,運(yùn)行代碼:有星號(hào)
26,代碼運(yùn)行:三引號(hào)
27瀑构,代碼理解:len, count
28裆针,代碼運(yùn)行優(yōu)化:精簡(jiǎn)步驟
29,代碼運(yùn)行出錯(cuò)
30寺晌,代碼理解:for i in range(len(friends)
31世吨,()和 [ ] 用法及區(qū)別
32,代碼運(yùn)行出錯(cuò)
33呻征,代碼理解:tab
34另假,代碼運(yùn)行出錯(cuò)
Q 1 :如上圖(圖2-1),我有兩個(gè)問題:
1.什么時(shí)候會(huì)出現(xiàn)單引號(hào)怕犁?
2.輸入 x[1][1]
? ? ? ? ? ? x[2][0]
為什么只有一個(gè)輸出?
A:1、不用print函數(shù)時(shí)會(huì)出現(xiàn)單引號(hào)奏甫。
2戈轿、你這樣輸入,只顯示最后一個(gè)運(yùn)算結(jié)果
Q 2 :如上圖(圖2-2)阵子,最小值函數(shù)代碼那一行為什么是從1重新開始思杯,我試了接上面的代碼直接輸入,輸出顯示錯(cuò)誤挠进。這是為什么色乾?以及怎么轉(zhuǎn)換?中間加了一個(gè) In[1] ,后面又是和前面連續(xù)的领突。
A:應(yīng)該是你程序中途shutdown了吧(當(dāng)程序中途停止運(yùn)行時(shí)暖璧,in[ ]里面數(shù)字會(huì)重新從1開始計(jì)數(shù)),試試重啟jupyter君旦,再運(yùn)行
追問Q:不是澎办,那是老師課件里面的。從1重新開始才能輸出正確金砍。如果接著In[35],輸入代碼局蚀,運(yùn)行In[36]的話,則輸出不正確恕稠。
Q 3 :關(guān)于 and, or, not 的執(zhí)行優(yōu)先級(jí)琅绅,以及str能夠用過int()變?yōu)檎蛦幔?br>
A:關(guān)于and or not的優(yōu)先級(jí)問題:
not比or和and的優(yōu)先級(jí)高,or和and優(yōu)先級(jí)相同
比如 not True or False and True鹅巍,計(jì)算順序?yàn)椋?/p>
1 首先計(jì)算not True 為False
2 然后計(jì)算 False or False為False
3 然后計(jì)算False and True為False
所以結(jié)果為False
str可以使用int變?yōu)檎颓Х觥1热鏸nt('123') 結(jié)果為123
追問 Q :但是1 or 0 and 0=1(0和1可直接對(duì)應(yīng)True和False如果我沒理解錯(cuò)的話),1 or 0 and 0 and 1 =1昆著,(1 or 0) and 0 and 1 =0所以我覺得or要先于and執(zhí)行
A:同優(yōu)先級(jí)按從左到右依次執(zhí)行
Q 4 :#github中無法查看代碼#
大家可以打開github中的代碼嗎县貌?我進(jìn)入到圖里的頁(yè)面就在應(yīng)該顯示代碼的地方加載不出來,也沒看到可以下載的地方凑懂,請(qǐng)問要如何解決煤痕?拜謝~神奇的是,用最新版的chrome打開其他網(wǎng)頁(yè)和下載都沒問題接谨,就是這里查看不了_(:з」∠)_
A1:這個(gè)真的是網(wǎng)絡(luò)問題摆碉,實(shí)在不行換瀏覽器吧
A2: PythonData 點(diǎn)擊這個(gè)回到首頁(yè)才有下載通道。首頁(yè)右側(cè)綠色按鈕(Clone or download)點(diǎn)擊就是下載地址→選擇Download ZIP 就可以下載了
Q 5 :請(qǐng)問脓豪,如果只用python能不能做一個(gè)工具:將微信群里的發(fā)言信息變成格式化的信息巷帝,然后分類統(tǒng)計(jì)和匯總?哪位能指點(diǎn)一下扫夜?
A:前提是微信是否可以導(dǎo)出楞泼,并且是明文驰徊。如果可以,就能使用python 分析了.關(guān)于分析 就要看你的具體需求了堕阔,比如某人發(fā)言條數(shù)占比棍厂、詞頻分析之類的。根據(jù)需求對(duì)數(shù)據(jù)進(jìn)行處理清洗超陆。
Q 6 : 如何上傳代碼至jupyter 牺弹?
A:Jupyter Notebook 根目錄修改 windows7
打開終端:開始→所有程序→Anaconda3→Anaconda Prompt
輸入:jupyter notebook --generate-config 生成配置文件
紅框一:輸入的代碼;紅框二:生成配置文件路徑(即文件地址)时呀。按照路徑找到文件:右鍵→編輯jupyter_notebook_config.py 打開編輯頁(yè)面
現(xiàn)在需要查找修改代碼的位置:快捷鍵(Ctrl+F)
需要對(duì)這行代碼進(jìn)行修改:源碼:#c.NotebookApp.notebook_dir = '' ?修改為:c.NotebookApp.notebook_dir = 'D:\python' ?张漂。此處以修改到D盤python文件夾下為例:
鼠標(biāo)點(diǎn)擊下即可獲得該地址。
保存文件
從新運(yùn)行Jupter notebook
課件可以拷貝到D:\python下谨娜,從新打開Jupyter即可看到課件航攒。
Q 7 :哪位可以指導(dǎo)一下我的Jupyter安裝完成怎么沒有課件中的的根目錄啊瞧预?
A:目錄要自己創(chuàng)建的
Q 8 :按空格健 沒有空格屎债,反而是縮進(jìn)了,不知道咋修改
A:這個(gè)問題好難解垢油。確認(rèn)一下你的輸入法盆驹,是不是中文全角狀態(tài)下輸入的空格。
Q 9 :如上圖(圖2-3)滩愁,為什么顯示不出人名躯喇?
A:建議使用python3,python2中文有編碼問題硝枉。
Q 10 :有沒有同學(xué)總結(jié)過關(guān)于“空格”和“引號(hào)”:哪些地方硬性要求必須有空格廉丽,哪些地方可有可無,現(xiàn)在完全憑猜在打空格妻味。正压。。 以及引號(hào)责球,好像 ' 和 " 都可以焦履??
A1:引號(hào)的問題,我以前學(xué)過一點(diǎn)入門雏逾,好像是沒有差別嘉裤。打空格是個(gè)人習(xí)慣,好看一點(diǎn)栖博,你不打也沒事啊屑宠。我以前用過一個(gè)python的編程器,它會(huì)自動(dòng)幫你拉開間距仇让,很美觀典奉。
A2:老師上課說單引號(hào)和雙引號(hào)基本可以互換躺翻,只是在需要引號(hào)套引號(hào)的時(shí)候區(qū)分,我試了一下是一樣秋柄』裰Γ空格我感覺是不是個(gè)人習(xí)慣呀,余老師的課程里都打骇笔,我不打也沒影響結(jié)果,就是看著有點(diǎn)擠嚣崭。笨触。。
Q 11 :上圖(圖2-4)顯示雹舀,這是個(gè)什么錯(cuò)誤芦劣,看著沒問題啊
A:原因可能是之前你使用了類似 max=(1, 3, 4),你可以在菜單kernel-> restart重置一下说榆,然后再執(zhí)行試試虚吟。
Q 12 :關(guān)于mac系統(tǒng)jupyternotebook無法跳轉(zhuǎn)瀏覽器的問題
A:大家可以看下這個(gè)鏈接:https://github.com/jupyter/notebook/issues/2438
Q 13 :print( ) 輸出,有引號(hào)签财,和直接變量串慰,沒引號(hào)的輸出,有什么區(qū)別唱蒸?
A:沒有區(qū)別邦鲫,只是一個(gè)是notebook幫助輸出的,一個(gè)使用print輸出神汹。我記得老師上課有說到這塊庆捺。
Q 14 :請(qǐng)看上圖(圖2-5),這里強(qiáng)制轉(zhuǎn)化成字符串屁魏,為什么沒有引號(hào)滔以?
A:print打印出來的不帶引號(hào),使用notebook打印是帶引號(hào)的氓拼。
Q 15 :我有個(gè)問題:
a = b = c = 1和 a =1你画,b =1,c =1披诗。
1 存儲(chǔ)的位置是不是一樣撬即?
第二個(gè)表達(dá)式中的“1”都存在同一個(gè)內(nèi)存位置上嗎?還是在不同的位置?
A:這個(gè)問題厲害了呈队。第一情況:計(jì)算機(jī)會(huì)在某地址創(chuàng)建一個(gè)整數(shù)對(duì)象1剥槐,然后a、b宪摧、c都指向它粒竖。所以此時(shí)內(nèi)存中只有一個(gè)數(shù)字對(duì)象颅崩。
第二情況:計(jì)算機(jī)會(huì)生成三個(gè)新的整數(shù)對(duì)象1,分別存儲(chǔ)在不同的地址中蕊苗,a沿后、b、c分別指向這個(gè)三個(gè)地址朽砰,所以此時(shí)內(nèi)存中有三個(gè)數(shù)字對(duì)象尖滚。
當(dāng)給變量賦值的時(shí)候,是真實(shí)的劃出了內(nèi)存的一個(gè)區(qū)域瞧柔,并且將這個(gè)區(qū)域命名(也就是變量名)漆弄;而不是指向之前已經(jīng)存在的某一個(gè)區(qū)域。
Q 16 :課程中造锅,有段代碼撼唾,我始終搞不明白。
for word in words:
index=unique_words.index(word)
counts[index]=counts[index]+1
print(counts)
[7, 2, 2, 1, 3, 2, 1, 2, 1, 1, 1, 1]
這句話中哥蔚, index=unique_words.index(word)
counts[index]=counts[index]+1
這兩行是什么意思呢倒谷, counts[index] 指的是索引的次數(shù)嗎,能用更直白的話糙箍,描述這幾段代碼嗎渤愁?
A:假設(shè)現(xiàn)在有unique_words = ["hello", "world"]
counts = [0, 0]
注意counts中的對(duì)應(yīng)位置數(shù)據(jù)就是unique_words中每個(gè)單詞的詞頻,初始時(shí)都為0倍靡。
現(xiàn)有列表words = ["hello", "world", "world", "world", "hello"]猴伶,計(jì)算每個(gè)單詞詞頻數(shù)。下面開始遍歷words塌西,第一個(gè)遍歷單詞為"hello"他挎,此時(shí)查找一下"hello"在unique_words哪個(gè)位置,此處位置為0捡需,則可以把counts位置0處的值加1办桨。此時(shí)counts的值即為[1, 0],表示hello詞頻為1站辉,world詞頻為0呢撞,然后我們?cè)谶M(jìn)行第二次遍歷,單詞為world饰剥,找到其在unique_words位置為1殊霞,把對(duì)應(yīng)的counts中表示world詞頻的值,即位置1處的值+1汰蓉,以此類推绷蹲。最終結(jié)果是counts=[2, 3],表示hello出現(xiàn)2次,world出現(xiàn)3次祝钢。
Q 17 :老師比规,問題在上圖(圖2-6),請(qǐng)過目拦英。這里面的含義不懂蜒什,思考方式也沒清晰。
A:首先需明白u(yù)nique_words和counts一一對(duì)應(yīng)疤估,unique_words為單詞列表灾常,counts為對(duì)應(yīng)位置單詞的頻數(shù)。
下面遍歷counts中的每個(gè)元素做裙,if count[i] > bigCount : ?表示遍歷的最新的某個(gè)count值是否大于bigCount岗憋,如果成立執(zhí)行下面的兩條語句:
bigWord = unique_words[I] ? , 表示把這個(gè)位置單詞找到作為bigword锚贱,也就是最高頻單詞。
bigCount = counts[I] ? 关串,i表示遍歷的最新位置拧廊,將bigCount賦值為最新最大值
Q 18 :直接用python IDLE打開的頁(yè)面是不能直接編輯中文的嗎?"小明" 這樣的詞是打不出來的晋修。
A:python IDLE我沒怎么用過吧碾。通常數(shù)據(jù)分析研究會(huì)用jupyternotebook,開發(fā)人員會(huì)用pycharm墓卦。
Q 19 : 請(qǐng)老師指點(diǎn)一下倦春,如何把一段漢字的字符挨個(gè)挑出來?我用了課程教的語句落剪,可是出現(xiàn)錯(cuò)誤:圖片(圖2-7)所示睁本,而且我看漢字是以一行為一個(gè)字符串的,這樣能依次取漢字嗎忠怖?
A:unique_words.append()這行主要縮進(jìn)呢堰,以保證這行代碼屬于if語句塊。
注:python以縮進(jìn)區(qū)分代碼層級(jí)的凡泣。
Q 20 :(圖2-8)自定義函數(shù),(這是個(gè)有錯(cuò)誤的函數(shù)枉疼,關(guān)于if判值那邊要改),這種錯(cuò)誤的函數(shù)一旦運(yùn)行了鞋拟,即使我esc-ii或者kernet interupt骂维,右上角顯示了interupting kernel,卻無法正常中斷贺纲,只研究出restart中斷航闺,想問問老師正確的中斷方法是什么
daikuane=float(input("\n請(qǐng)輸入貸款額,或者輸入0來結(jié)束報(bào)告"))
if daikuane==float(0):
print("結(jié)束報(bào)告")
應(yīng)該直接float(input..)
A:對(duì)的哮笆,因?yàn)閕nput出來的結(jié)果是字符串類型来颤。因此判斷條件可以是daikuane=='0'或者float(daikuane)=='0.0'汰扭。不然==會(huì)永遠(yuǎn)無法成立,從而出現(xiàn)死循環(huán)福铅。float(daikuane)==0.0萝毛,上面寫錯(cuò)了。
Q 21 :關(guān)于內(nèi)外循環(huán)滑黔,我覺得i=1應(yīng)該不能算是內(nèi)循環(huán)笆包, 而是外循環(huán)的一部分。我理解的內(nèi)循環(huán)是紅框略荡,外循環(huán)是橙框庵佣。和老師藍(lán)色虛線標(biāo)的不同(圖2-9)
A:對(duì)的,準(zhǔn)確的說是這樣的汛兜,理解深刻??巴粪。i是內(nèi)層循環(huán)的控制變量。
Q 22 :誰幫我看看我的代碼有什么問題(圖2-10)粥谬,之前運(yùn)行成功過肛根,改動(dòng)了一點(diǎn)就失敗了,已經(jīng)忘記怎么改動(dòng)的了漏策。派哲。。掺喻。
Q 23 :作業(yè)做完了芭届,不過遇到一個(gè)問題,就是執(zhí)行代碼的時(shí)候無反映感耙。只有重開頁(yè)面才會(huì)有反應(yīng)褂乍。改過代碼后、還需要再重開一次頁(yè)面或者另外開啟一個(gè)Notebook 才會(huì)有反應(yīng)抑月、這樣周而復(fù)始的重新開啟頁(yè)面树叽,才做完的作業(yè)。請(qǐng)問老師是什么問題谦絮?
A:環(huán)境不好吧题诵,建議重啟下juypter 或者重啟下電腦之類的
Q 24 :在navigator中點(diǎn)擊jupyter notebook 下的launch 沒反應(yīng) 是什么情況
A:我原來也遇到過這個(gè)問題。我是win7层皱,下載了google chrome并設(shè)置成默認(rèn)瀏覽器之后就可以了性锭。
Q 25 :運(yùn)行代碼有星號(hào)出現(xiàn)后,就沒有任何輸出了叫胖,請(qǐng)問怎樣除掉它草冈?如果關(guān)了再重來之后又正常了。應(yīng)該是我的錯(cuò)誤操作造成的。
A:我之前也遇到這個(gè)問題怎棱,后來發(fā)現(xiàn)是進(jìn)入了死循環(huán)哩俭。你可以看看之前運(yùn)行的語句是否有死循環(huán)出不來的情況。也可以在運(yùn)行頁(yè)面上方找到 Kernel 的restart 重啟
Q 26 :圖中(圖2-11)拳恋,為什么是三引號(hào)凡资,不是單,不是雙谬运?
A:三引號(hào)是三個(gè)單引號(hào)隙赁,這樣可以換行
Q 27 : len(unique_word)=11, ?為什么counts=[0]*len(unique_word)=[0,0,0,0,0,0,0,0,0,0,0],?
A:counts是一個(gè)列表,counts = [0]*len(unique_word)就是一個(gè)初始化一個(gè)和unique_word一樣長(zhǎng)度的列表
Q 28 :作業(yè)一:print(x[1][1])
? ? ? ? ? ? ? ? ? ? ? ? ? ? print(x[2][0])
問兩個(gè)問題:.作業(yè)一的代碼如何精簡(jiǎn)梆暖,想只用一個(gè) print 但是做不到伞访;
2. 怎么用 max 和 min 函數(shù)來寫作業(yè)二?
A:print(【】【】轰驳,【】【】)
A:print(x[1][1]+x[2][0])
Q 29 :作業(yè)二(圖2-12)厚掷,結(jié)果沒運(yùn)行正確,不知道問題出現(xiàn)在哪里级解,求幫助
A:圖中蝗肪,那里的提示是 “ if ” 那一行有語法錯(cuò)誤,“ = ” 那里改成 “ is ”試試蠕趁,可以對(duì)照老師的代碼看看。
Q 30 :range:生成整數(shù)序列
len:獲取序列元素個(gè)數(shù)
那么辛馆,for i in range(len(friends): ?的準(zhǔn)確意思是什么俺陋?是 i 代表了friends數(shù)列的沒每一個(gè)元素嗎?那么len的作用是什么昙篙?
這里只對(duì)friends進(jìn)行循環(huán)腊状,沒有對(duì)names進(jìn)行循環(huán),計(jì)算機(jī)是如何把兩個(gè)數(shù)列對(duì)應(yīng)起來的苔可?或許我的問題很白癡缴挖,但我真是想不明白啊焚辅!請(qǐng)老師指點(diǎn)映屋。
A:len是獲取列表元素個(gè)數(shù) range可以根據(jù)長(zhǎng)度生成一個(gè)序列。比如此處len(friends)為6同蜻,range(6)為0,1,2,3,4,5棚点。for循環(huán)可以根據(jù)此序列對(duì)friends遍歷了。
Q 31 :望老師解答一下()和 [ ] 用法及區(qū)別湾蔓,目前處于依葫蘆畫瓢階段瘫析。
A :簡(jiǎn)單點(diǎn)說,()主要用于函數(shù)方法的調(diào)用,如max(1, 2, 3)贬循;而[ ]主要用于數(shù)據(jù)結(jié)構(gòu)中數(shù)據(jù)的訪問咸包,如list類型數(shù)據(jù)a, a[1]訪問位置1的元素杖虾,字典d, d["suyi"] 訪問鍵為suyi的值烂瘫。
Q 32 :對(duì)作業(yè)一有疑問,print[x=[1:2],[1;2]] 結(jié)果是[ ],為什么這樣結(jié)果不對(duì)翱飨啤忱反?(圖2-14)
A:這是因?yàn)榍衅僮魇遣粫?huì)改變列表維數(shù)的,也就是x[1:2]返回的結(jié)果是[["d", "e", "f"]]滤愕,仍然是個(gè)二維數(shù)組温算,此時(shí)訪問其中的數(shù)據(jù),如d间影,則需要x[1:2][0][0]注竿,而不是x[1:2][1]。
可以考慮下為什么切片出來的結(jié)果不改變列表的維度魂贬?假設(shè)切片采用x[0:2]巩割,結(jié)果就是[["a", "b", "c"], ["d", "e", "f"]],第一維的元素是兩個(gè)元素付燥,顯然這種情況的數(shù)據(jù)是沒有辦法降維的宣谈。
Q 33 :在print()前面多敲一個(gè)tab,和多敲兩個(gè)tab键科,答案都是不同闻丑,請(qǐng)問為什么?
A:Python是以縮進(jìn)區(qū)分代碼塊的勋颖。一個(gè)tab屬于for執(zhí)行語句嗦嗡,兩個(gè)tab屬于if里面執(zhí)行語句
Q 34 :我沒弄明白,把同學(xué)但作業(yè)拿來照抄饭玲,為什么和同學(xué)打一樣但編碼也會(huì)出錯(cuò)敖募馈?搞的我心力憔悴茄厘。?
A:print 對(duì)齊 for 矮冬,逗號(hào)全英文
以上內(nèi)容整理來源于新生大學(xué)討論區(qū)和作業(yè)區(qū),若有誤請(qǐng)各位指正蚕断!
第二課作業(yè)同學(xué)們開始漸漸上手欢伏,有同學(xué)可以用兩種或者兩種以上的語法來解題,我返回去看了下自己的作業(yè)亿乳,只交了第一題硝拧。径筏。。慚愧罢咸铡滋恬!