習(xí)題0:準(zhǔn)備工作
總有一天你會(huì)聽到有程序員建議你使用 Mac OSX 或者 Linux。如果他喜歡字體美觀,他會(huì)告訴你讓你弄臺(tái) Mac OSX 計(jì)算機(jī),如果他們喜歡操作控制而且留了一部大胡子,他會(huì)讓你安裝 Linux。這里再次向你說明,只要是一臺(tái)手上能用的電腦就可以了。你需要的只有三樣?xùn)|西: gedit、一個(gè)命令行終端、還有 python。
習(xí)題1:第一個(gè)程序
學(xué)會(huì)看調(diào)試的錯(cuò)誤信息
這些內(nèi)容你應(yīng)該學(xué)會(huì)看懂的,這是很重要的一點(diǎn),因?yàn)槟阋院筮€會(huì)犯類似的錯(cuò)誤。
python調(diào)試錯(cuò)誤格式:
- 會(huì)打印出錯(cuò)誤的行
- 指示錯(cuò)誤的地方
- 指示錯(cuò)誤的類型
習(xí)題2:注釋和井號(hào)
中文為井號(hào),英文為 octothorpe 或者 pound characte
程序里的注釋是很重要的。它們可以用自然語言告訴你某段代碼的功能是什么。在你想要臨時(shí)移除一段代碼時(shí),你還可以用注解的方式將這段代碼臨時(shí)禁用
中文為井號(hào),英文為 octothorpe 或者 pound characte
習(xí)題 3: 數(shù)字和數(shù)學(xué)計(jì)算
每一種編程語言都包含處理數(shù)字和進(jìn)行數(shù)學(xué)計(jì)算的方法。不必?fù)?dān)心,程序員經(jīng)常撒謊說他們是多么牛的數(shù)學(xué)天才,其實(shí)他們根本不是。
如果他們真是數(shù)學(xué)天才,他們?cè)缇腿氖聰?shù)學(xué)相關(guān)的行業(yè)了,而不是寫寫廣告程序和社交網(wǎng)絡(luò)游戲,從人們身上偷賺點(diǎn)小錢而已。
加分習(xí)題
由于本教材使用的是 python2.x 未定屬性為浮點(diǎn)數(shù)的情況默認(rèn)整數(shù)
而本機(jī)使用python3.x 整數(shù)運(yùn)算自動(dòng)精確到小數(shù)點(diǎn)后17位~
習(xí)題4:變量(variable)和命名
在編程中,變量只不過是用來指代某個(gè)東西的名字。程序員通過使用變量名可以讓他們的程序讀起來更像英語。而且因?yàn)槌绦騿T的記性都不怎么地,變量名可以讓他們更容易記住程序的內(nèi)容。
如果他們沒有在寫程序時(shí)使用好的變量名,在下一次讀到原來寫的代碼時(shí)他們會(huì)大為頭疼的。
space_in_a_car 中的 _ 是 下劃線(underscore) 字符。你要自己學(xué)會(huì)怎樣打出這個(gè)字符來。這個(gè)符號(hào)在變量里通常被用作假想的空格,用來隔開單詞。
記住 = 的名字是等于(equal),它的作用是為東西取名。
記住 _ 是下劃線字符(underscore)。
習(xí)題5:更多的變量和打印
這次我們將使用一個(gè)叫“格式化字符串(format string)”的東西. 每一次你使用 " 把一些文本引用起來,你就建立了一個(gè)字符串。 字符串是程序?qū)⑿畔⒄故窘o人的方式。你可以打印它們,可以將它們寫入文件,還可以將它們發(fā)送給網(wǎng)站服務(wù)器,很多事情都是通過字符串交流實(shí)現(xiàn)的。
外鏈索引
在編寫程序的過程中,經(jīng)常需要進(jìn)行格式化輸出,每次用每次查。干脆就在這里整理一下,以便索引。
This is python格式字符串 reference-style link.
習(xí)題6:字符串(string)和文本
字符串通常是指你想要展示給別人的、或者是你想要從程序里“導(dǎo)出”的一小段字符。Python 可以通過文本里的雙引號(hào) " 或者單引號(hào) ' 識(shí)別出字符串來。這在你以前的 print 練習(xí)中你已經(jīng)見過很多次了。如果你把單引號(hào)或者雙引號(hào)括起來的文本放到 print 后面,它們就會(huì)被 python 打印出來。
字符串可以包含格式化字符 %s,這個(gè)你之前也見過的。你只要將格式化的變量放到字符串中,再緊跟著一個(gè)百分號(hào) % (percent),再緊跟著變量名即可。唯一要注意的地方,是如果你想要在字符串中通過格式化字符放入多個(gè)變量的時(shí)候,你需要將變量放到 ( ) 圓括號(hào)(parenthesis)中,而且變量之間用 , 逗號(hào)(comma)隔開。就像你逛商店說“我要買牛奶、面包、雞蛋、八寶粥”一樣,只不過程序員說的是”(milk, eggs, bread, soup)”。
我們將鍵入大量的字符串、變量、和格式化字符,并且將它們打印出來。我們還將練習(xí)使用簡(jiǎn)寫的變量名。程序員喜歡使用惱人的難度的簡(jiǎn)寫來節(jié)約打字時(shí)間,所以我們現(xiàn)在就提早學(xué)會(huì)這個(gè),這樣你就能讀懂并且寫出這些東西了。
習(xí)題 7: 更多打印
習(xí)題 8: 打印,打印
習(xí)題 9: 打印,打印,打印
先說1雙引號(hào)與3個(gè)雙引號(hào)的區(qū)別,雙引號(hào)所表示的字符串通常要寫成一行
如:
s1 = "hello,world"
如果要寫成多行,那么就要使用/ (“連行符”)吧,如
s2 = "hello,/
world"
s2與s1是一樣的。如果你用3個(gè)雙引號(hào)的話,就可以直接寫了,如下:
s3 = """hello,
world,
hahaha.""",那么s3實(shí)際上就是"hello,/nworld,/nhahaha.", 注意“/n”,所以,
如果你的字符串里/n很多,你又不想在字符串中用/n的話,那么就可以使用3個(gè)雙
引號(hào)。而且使用3個(gè)雙引號(hào)還可以在字符串中增加注釋,如下:
s3 = """hello, #hoho, this is hello, 在3個(gè)雙引號(hào)的字符串內(nèi)可以有注釋哦
world, #hoho, this is world
hahaha."""
這就是3個(gè)雙引號(hào)和1個(gè)雙引號(hào)表示字符串的區(qū)別了,3個(gè)雙引號(hào)與1個(gè)單引號(hào)的區(qū)別也
是和這個(gè)一樣的,實(shí)際上python支持單引號(hào)是有原因的,下面我來比較1個(gè)單引號(hào)和 1個(gè)雙引號(hào)的區(qū)別。
當(dāng)我用單引號(hào)來表示一個(gè)字符串時(shí),如果要表示 Let's go 這個(gè)字符串,必須這樣:
s4 = 'Let/'s go',注意沒有,字符串中有一個(gè)',而字符串又是用'來表示,所以
這個(gè)時(shí)候就要使用轉(zhuǎn)義符 / (/,轉(zhuǎn)義符應(yīng)該知道吧), 如果你的字符串中有一大堆
的轉(zhuǎn)義符,看起來肯定不舒服,python也很好的解決了這個(gè)問題,如下:
s5 = "Let's go"
這時(shí),我們看,python知道你是用 " 來表示字符串,所以python就把字符串中的那
個(gè)單引號(hào) ' , 當(dāng)成普通的字符處理了,是不是很簡(jiǎn)單。
對(duì)于雙引號(hào),也是一樣的,下面舉個(gè)例子
s6 = 'I realy like "python"!'
這就是單引號(hào)和雙引號(hào)都可以表示字符串的原因了。
習(xí)題 10: 那是什么?
\t的作用是拉空格
\作用是打印一個(gè)\
習(xí)題 11: 提問
一般軟件做的事情主要就是下面幾條:
- 接受人的輸入
- 改變輸入。
- 打印出改變了的輸入。
注意到我在每行 print 后面加了個(gè)逗號(hào)(comma) , 了吧?這樣的話 print 就不會(huì)輸出新行符而結(jié)束這一行跑到下一行去了。
習(xí)題 12: 提示別人
當(dāng)你鍵入 raw_input() 的時(shí)候,你需要鍵入 ( 和 ) 也就是“括號(hào)(parenthesis)”。這和你格式化輸出兩個(gè)以上變量時(shí)的情況有點(diǎn)類似,比如說 "%s %s" % (x, y) 里邊就有括號(hào)。對(duì)于 raw_input 而言,你還可以讓它顯示出一個(gè)提示,從而告訴別人應(yīng)該輸入什么東西。你可以在 () 之間放入一個(gè)你想要作為提示的字符串
現(xiàn)在的搜索引擎這么發(fā)達(dá),為什么還要使用Python自帶的幫助系統(tǒng)呢?因?yàn)椋?)利用搜索引擎搜出的結(jié)果往往太寬泛,不聚焦,一些論壇和blog給出的結(jié)論往往會(huì)針對(duì)一些過時(shí)的版本,但又不指明,有的還有一些typos,這樣就增大了解決問題的時(shí)間;2)利用搜索引擎需要聯(lián)網(wǎng),自帶的就非常方便,隨時(shí)都陪在你的身邊;3)自帶的幫助系統(tǒng)給出的結(jié)果可靠,準(zhǔn)確和版本一致?;谝陨系脑颍覀?nèi)匀恍枰莆兆詭椭到y(tǒng)的使用方法。
習(xí)題 13: 參數(shù)、解包、變量
from sys import argv
script, first, second, third = argv
print("The script is called :", script)
print("your first variable is :", first)
print("your second variable is :", second)
print("your third variable is :", third)
在第 1 行我們有一個(gè)“import”語句. 這是你將 python 的功能引入你的腳本的方法. Python 不會(huì)一下子將它所有的功能給你,而是讓你需要什么就調(diào)用什么。這樣可以讓你的程序保持精簡(jiǎn),而后面的程序員看到你的代碼的時(shí)候,這些“import”可以作為提示,讓他們明白你的代碼用到了哪些功能。
argv 是所謂的“參數(shù)變量(argument variable)”,是一個(gè)非常標(biāo)準(zhǔn)的編程術(shù)語。在其他的編程語言里你也可以看到它。這個(gè)變量包含了你傳遞給 Python 的參數(shù)。通過后面的練習(xí)你將對(duì)它有更多的了解。
第 3 行將 argv “解包(unpack)”,與其將所有參數(shù)放到同一個(gè)變量下面,我們將每個(gè)參數(shù)賦予一個(gè)變量名: script, first, second, 以及 third。這也許看上去有些奇怪, 不過”解包”可能是最好的描述方式了。它的含義很簡(jiǎn)單:“把 argv 中的東西解包,將所有的參數(shù)依次賦予左邊的變量名”。
在pycharm里面運(yùn)行命令行:
Run/Debug Configurations->Configurations->Script Parames
結(jié)果:
The script is called : C:/Users/Administrator.WENNRK2ZC0P1OB5/PycharmProjects/untitled/python/Python learning/ex13.py
your first variable is : apple
your second variable is : cheese
your third variable is : pig
當(dāng)輸入錯(cuò)誤信息時(shí):例如少輸入一個(gè)參數(shù)時(shí)
當(dāng)你運(yùn)行腳本時(shí)提供的參數(shù)的個(gè)數(shù)不對(duì)的時(shí)候,你就會(huì)看到上述錯(cuò)誤信息 (這次我只用了
first 2nd 兩個(gè)參數(shù))?!皀eed more than 3 values to unpack”這個(gè)錯(cuò)誤信息告訴你參數(shù)數(shù)量不足。
等一下!“功能”還有另外一個(gè)名字
前面我們使用 import 讓你的程序?qū)崿F(xiàn)更多的功能,但實(shí)際上沒人吧 import 稱為“功能”。我希望你可以在沒接觸到正式術(shù)語的時(shí)候就弄懂它的功能。在繼續(xù)下去之前, 你需要知道它們的真正名稱:模組(modules)。
從現(xiàn)在開始我們將把這些我們導(dǎo)入(import)進(jìn)來的功能稱作模組。你將看到類似這樣的說法:“你需要把 sys 模組 import 進(jìn)來?!币灿腥藢⑺鼈兎Q作“庫(libraries)”,不過我們還是叫它們模組吧。
習(xí)題 14: 提示和傳遞
輸出
習(xí)題15:讀取文件
如下代碼:
from sys import argv
script, filename = argv
txt = open(filename)
print "Here's your file %r:" % filename
print txt.read()
print "Type the filename again:"
file_again = raw_input("> ")
txt_again = open(file_again)
print txt_again.read()
我使用了“命令”這個(gè)詞,不過實(shí)際上它們的名字是“函數(shù)(function)”和“方法(method)。上網(wǎng)搜索一下這兩者的意義和區(qū)別。看不明白也沒關(guān)系,迷失在別的程序員的知識(shí)海洋里是很正常的一件事情
下附鏈接:
函數(shù)與方法區(qū)別
習(xí)題16:讀寫文件
你應(yīng)該記住的命令如下:
- close – 關(guān)閉文件。跟你編輯器的 文件->保存.. 一個(gè)意思。
- read – 讀取文件內(nèi)容。你可以把結(jié)果賦給一個(gè)變量。
- readline – 讀取文本文件中的一行。
- truncate – 清空文件,請(qǐng)小心使用該命令。
- write(stuff) – 將stuff寫入文件。
代碼執(zhí)行的操作流程為:打開-清空-寫入-關(guān)閉
練習(xí)代碼:
#python ex16_practice.py ex15_sample.txt
from sys import argv
script,filename = argv
txt =open(filename)
print(txt.read())
txt.close()
上述代碼輸出結(jié)果:
加分習(xí)題中的第三題:
文件中重復(fù)的地方太多了。試著用一個(gè) target.write() 將 line1, line2, line3 打印出來,你可以使用字符串、格式化字符、以及轉(zhuǎn)義字符。
Python新舊兩種格式化輸出:
舊%格式串:
target.write('%s\n%s\n%s\n' %(line1,line2,line3))
新format()格式串:
target.write('{0}\n{1}\n{2}\n'.format(line1,line2,line3))
找出為什么我們需要給 open 多賦予一個(gè) 'w' 參數(shù)。提示: open 對(duì)于文件的寫入操作態(tài)度是安全第一,所以你只有特別指定以后,它才會(huì)進(jìn)行寫入操作
target = open(filename, 'w')
習(xí)題17:更多文件操作
- 通過import導(dǎo)入更多功能,復(fù)用現(xiàn)成功能,而不是浪費(fèi)時(shí)間再造輪子也是寫程序很重要的一個(gè)思想。
- 首次用到exists功能??梢耘袛辔募欠翊嬖?,返回一個(gè)布爾值。
加分習(xí)題:
1.再多讀讀和 import 相關(guān)的材料,將 python 運(yùn)行起來,試試這一條命令。試著看看自己能不能摸出點(diǎn)門道,當(dāng)然了,即使弄不明白也沒關(guān)系。
*模塊和包的參考文檔:http://wiki.woodpecker.org.cn/moin/PythonEssentialRef8
import當(dāng)然是用來引入各種模塊、包,從而使用其中包含的方法,定義的數(shù)據(jù)等。具體等日后豐富。
2.這個(gè)腳本 實(shí)在是 有點(diǎn)煩人。沒必要在拷貝之前問一遍把,沒必要在屏幕上輸出那么多東西。試著刪掉腳本的一些功能,讓它使用起來更加友好。
'''''
3.看看你能把這個(gè)腳本改多短,我可以把它寫成一行。from sys import argv script, from_file, to_file = argv open(to_file,'w').write(open(from_file).read())
4.我使用了一個(gè)叫 cat 的東西,這個(gè)古老的命令的用處是將兩個(gè)文件“連接(concatenate)”到一起,不過實(shí)際上它最大的用途是打印文件內(nèi)容到屏幕上。你可以通過 man cat 命令了解到更多信息。
'''
5.使用 Windows 的同學(xué),你們可以給自己找一個(gè) cat 的替代品。關(guān)于 man 的東西就別想太多了,Windows 下沒這個(gè)命令。
'''
6.找出為什么你需要在代碼中寫 output.close() 。
收回資源
習(xí)題 18: 命名、變量、代碼、函數(shù)
函數(shù)可以做三樣事情:
- 它們給代碼片段命名,就跟“變量”給字符串和數(shù)字命名一樣。
- 它們可以接受參數(shù),就跟你的腳本接受 argv 一樣。
- 通過使用 #1 和 #2,它們可以讓你創(chuàng)建“微型腳本”或者“小命令”。
為自己寫一個(gè)函數(shù)注意事項(xiàng)以供后續(xù)參考。你可以寫在一個(gè)索引卡片上隨時(shí)閱讀,直到你記住所有的要點(diǎn)為止。注意事項(xiàng)如下:
函數(shù)定義是以 def 開始的嗎?是的
函數(shù)名稱是以字符和下劃線 _ 組成的嗎?可以,但不一定
函數(shù)名稱是不是緊跟著括號(hào) ( ?不一定,緊跟或不緊跟都可以
括號(hào)里是否包含參數(shù)?多個(gè)參數(shù)是否以逗號(hào)隔開?可以
參數(shù)名稱是否有重復(fù)?(不能使用重復(fù)的參數(shù)名)''''
緊跟著參數(shù)的是不是括號(hào)和冒號(hào) ): ?是的
緊跟著函數(shù)定義的代碼是否使用了 4 個(gè)空格的縮進(jìn) (indent)?是的
函數(shù)結(jié)束的位置是否取消了縮進(jìn) (“dedent”)?是的
當(dāng)你運(yùn)行(或者說“使用 use”或者“調(diào)用 call”)一個(gè)函數(shù)時(shí),記得檢查下面的要點(diǎn):
- 調(diào)運(yùn)函數(shù)時(shí)是否使用了函數(shù)的名稱?
- 函數(shù)名稱是否緊跟著 ( ?
- 括號(hào)后有無參數(shù)?多個(gè)參數(shù)是否以逗號(hào)隔開?
- 函數(shù)是否以 ) 結(jié)尾?
- 按照這兩份檢查表里的內(nèi)容檢查你的練習(xí),直到你不需要檢查表為止。
最后,將下面這句話閱讀幾遍:
“‘運(yùn)行函數(shù)(run)’、‘調(diào)用函數(shù)(call)’、和 ‘使用函數(shù)(use)’是同一個(gè)意思”
習(xí)題19:函數(shù)和變量
有一個(gè)你可能沒有注意到的細(xì)節(jié),我們現(xiàn)在強(qiáng)調(diào)一下:函數(shù)里邊的變量和腳本里邊的變量之間是沒有連接的
函數(shù)里的變量是局部變量,而腳本里的變量叫全局變量。
例如在某一函數(shù)里,雖然定義的變量名與腳本中定義的變量名相同,但腳本中的變量的賦值并不影響函數(shù)中的變量名的值。反過來函數(shù)中也不影響腳本中的變量名。
以下為例子:
#python ex19.py
from sys import argv
script,cheese_count,boxes_of_crackers = argv
print("there is the firsr raw %s,%s" % (cheese_count,boxes_of_crackers))
def cheese_and_crackers(cheese_count, boxes_of_crackers):
print("You have %d cheeses!" % cheese_count)
print("You have %d boxes of crackers!" % boxes_of_crackers)
print("Man that's enough for a party!")
print("Get a blanket.\n")
print("We can just give the functio n numbers directly:")
cheese_and_crackers(20, 30)
習(xí)題20:函數(shù)和文件
加分習(xí)題:
1.通讀腳本,在每行之前加上注解,以理解腳本里發(fā)生的事情。
2.每次 print_a_line 運(yùn)行時(shí),你都傳遞了一個(gè)叫 current_line 的變量。
在每次調(diào)用函數(shù)時(shí),打印出 current_line 的值,跟蹤一下它在 print_a_line 中是怎樣變成 line_count 的。
"current_line"這個(gè)變量作為"print_a_line"的參數(shù)傳遞一個(gè)值給"print_a_line"方法,在這個(gè)方法中會(huì)把值賦給"line_count"變量,參與計(jì)算。3.找出腳本中每一個(gè)用到函數(shù)的地方。檢查 def 一行,確認(rèn)參數(shù)沒有用錯(cuò)。
4.上網(wǎng)研究一下 file 中的 seek 函數(shù)是做什么用的。試著運(yùn)行 pydoc file 看看能不能學(xué)到更多。
#seek 函數(shù)是用來指定文件位置的函數(shù),使用方法
#seek (offset[, whence])
#第一個(gè)值(offset)用來指定偏移的大小,可有正負(fù)。
#第二個(gè)值(whence)用來指定開始位置,'0'代表絕對(duì)開始位置(默認(rèn)值),'1'代表當(dāng)前指針?biāo)谖恢茫?2'代表絕對(duì)結(jié)束位置。
#例字符串[abcdefg],當(dāng)讀取到abcd時(shí),使用seek(0),那么就能回到a之前,此時(shí)打印全部就能打印出[abcdefg]
#這時(shí)使用seek(0,1),就相當(dāng)于當(dāng)前位置,等于沒變化。
#這是使用seek(2,1),就相當(dāng)于從在當(dāng)前位置往后三個(gè)位置,也就是從g開始,此時(shí)能夠輸出g。
#這時(shí)使用seek(-2,2),就像先回到最末尾,然后往前兩個(gè)位置,此時(shí)能夠輸出[fg]。
5.研究一下 += 這個(gè)簡(jiǎn)寫操作符的作用,寫一個(gè)腳本,把這個(gè)操作符用在里邊試一下。
遞增符號(hào)。已直接優(yōu)化進(jìn)代碼。
例如定義了str=“woaini”
str+=“paste”意思就是str=“woaini”+“paste”
計(jì)算的結(jié)果重新賦給str
習(xí)題21:函數(shù)可以返回東西
返回值概念,這部分沒有很大問題。
習(xí)題22:到現(xiàn)在你學(xué)到了哪些東西?
做這節(jié)練習(xí)沒有失敗,只有嘗試,請(qǐng)牢記這一點(diǎn)。
"""三引號(hào)問題
如果你的字符串里/n很多,你又不想在字符串中用/n的話,那么就可以使用3個(gè)雙
引號(hào)。而且使用3個(gè)雙引號(hào)還可以在字符串中增加注釋,如下:
s3 = """hello, #hoho, this is hello, 在3個(gè)雙引號(hào)的字符串內(nèi)可以有注釋哦
world, #hoho, this is world
hahaha."""
\t的意思是空格
tabby_cat = "\tI'm tabbed in."
字符中單雙引號(hào)的轉(zhuǎn)義
print ("I am 6'2\" tall." ) # 將字符串中的雙引號(hào)轉(zhuǎn)義
print ('I am 6\'2" tall.') # 將字符串種的單引號(hào)轉(zhuǎn)義
\的意思
backslash_cat = "I'm \\ a \\ cat."#only print one \
input()輸入
age = input("How old are you? ")
height = input("How tall are you? ")
weight = input("How much do you weigh? ")
script 腳本
from sys import argv
sys 為內(nèi)置模塊,提供了許多函數(shù)和變量來處理 Python 運(yùn)行時(shí)環(huán)境的不同部分。是固定的用法,不能自己隨便寫名字代替它,這行的作用就是要把用到的東西(比如需要什么特定函數(shù)什么之類的)從這個(gè)東西存放的模塊中引入程序中。
argv就是列表(參數(shù)變量),是編程術(shù)語。在解釋器啟動(dòng)后, argv 列表包含了傳遞給腳本的所有參數(shù), 第一個(gè)元素為腳本自身的名稱
truncate()方法
作用是清空txt文件
close()方法
收回資源
習(xí)題 23: 讀代碼
習(xí)題24:更多練習(xí)
習(xí)題25:更多更多的練習(xí)
加分習(xí)題
- 研究答案中沒有分析過的行,找出它們的來龍去脈。確認(rèn)自己明白了自己使用的是模組 ex25 中定義的函數(shù)。
- 試著執(zhí)行 help(ex25) 和 help(ex25.break_words) 。這是你得到模組幫助文檔的方式。 所謂幫助文檔就是你定義函數(shù)時(shí)放在 """ 之間的東西,它們也被稱作 documentation comments (文檔注解),后面你還會(huì)看到更多類似的東西。
- 重復(fù)鍵入 ex25. 是很煩的一件事情。有一個(gè)捷徑就是用 from ex25 import * 的方式導(dǎo)入模組。這相當(dāng)于說:“我要把 ex25 中所有的東西 import 進(jìn)來?!背绦騿T喜歡說這樣的倒裝句,開一個(gè)新的會(huì)話,看看你所有的函數(shù)是不是已經(jīng)在那里了。
- 把你腳本里的內(nèi)容逐行通過 python 編譯器執(zhí)行,看看會(huì)是什么樣子。你可以執(zhí)行CTRL-D (Windows 下是 CTRL-Z)來關(guān)閉編譯器。
習(xí)題26:恭喜你,現(xiàn)在可以考試了!
i'm pass the exam.
習(xí)題 27: 記住邏輯關(guān)系
習(xí)題28:布爾表達(dá)式練習(xí)
習(xí)題 29: 如果(if)
習(xí)題30:Else 和 If
習(xí)題 31: 作出決定
習(xí)題32:循環(huán)與列表
append()方法用于在列表末尾添加新的對(duì)象。
list1 = ['Google', 'Runoob', 'Taobao']
list1.append('Baidu')
print ("更新后的列表 : ", list1)
更新后的列表 : ['Google', 'Runoob', 'Taobao', 'Baidu']
range()方法函數(shù)可創(chuàng)建一個(gè)整數(shù)列表,一般用在 for 循環(huán)中。
>>>range(10) # 從 0 開始到 10
[0, 1, 2, 3, 4, 5, 6, 7, 8, 9]
>>> range(1, 11) # 從 1 開始到 11
[1, 2, 3, 4, 5, 6, 7, 8, 9, 10]
>>> range(0, 30, 5) # 步長(zhǎng)為 5
[0, 5, 10, 15, 20, 25]
>>> range(0, 10, 3) # 步長(zhǎng)為 3
[0, 3, 6, 9]
>>> range(0, -10, -1) # 負(fù)數(shù)
[0, -1, -2, -3, -4, -5, -6, -7, -8, -9]
>>> range(0)
[]
>>> range(1, 0)
[]
更多有關(guān)列表的函數(shù)可以參考:python3列表
習(xí)題33:While 循環(huán)
while 循環(huán),它所作的和 if 語句類似,也是去檢查一個(gè)布爾表達(dá)式的真假,不一樣的是它下面的代碼片段不是只被執(zhí)行一次,而是執(zhí)行完后再調(diào)回到 while 所在的位置,如此重復(fù)進(jìn)行,直到 while 表達(dá)式為 False 為止
While 循環(huán)有一個(gè)問題,那就是有時(shí)它會(huì)永不結(jié)束。如果你的目的是循環(huán)到宇宙毀滅為止,那這樣也挺好的,不過其他的情況下你的循環(huán)總需要有一個(gè)結(jié)束點(diǎn)。
為了避免這樣的問題,你需要遵循下面的規(guī)定:
- 盡量少用 while-loop,大部分時(shí)候 for-loop 是更好的選擇。
- 重復(fù)檢查你的 while 語句,確定你測(cè)試的布爾表達(dá)式最終會(huì)變成 False 。
- 如果不確定,就在 while-loop 的結(jié)尾打印出你要測(cè)試的值。看看它的變化。
加分習(xí)題:
接下來使用 for-loop 和 range 把這個(gè)腳本再寫一遍。你還需要中間的加值操作嗎?如果你不去掉它,會(huì)有什么樣的結(jié)果?
numbers=[]
def test_for_loop(i,newi):
for i in range(0,6):
print("At the top i is %r"%i)
numbers.append(i)
i=i+newi
print("numbers now :",numbers)
print("At the numbers i %d"%i)
print(test_for_loop(0,1))
print("The numbers:")
習(xí)題 34: 訪問列表的元素
習(xí)題35:分支與函數(shù)
加分習(xí)題:
這個(gè) gold_room 游戲使用了奇怪的方式讓你鍵入一個(gè)數(shù)字。這種方式會(huì)導(dǎo)致什么樣的 bug? 你可以用比檢查 0、1 更好的方式判斷輸入是否是數(shù)字嗎?int() 這個(gè)函數(shù)可以給你一些頭緒。
if "0" in next or "1" in next:
how_much = int(next)
else:
dead("Man, learn to type a number.")
作者使用了如上代碼來給how_much進(jìn)行賦值。這樣寫的問題就是如果輸入的是2、22這些不帶0和1的數(shù)字,那么就會(huì)走入錯(cuò)誤的邏輯分支。查了一下,用isdigit函數(shù)可以實(shí)現(xiàn)判斷是否為數(shù)字的功能。如下:
if next.isdigit():
how_much = int(next)
exit()
exit(0):無錯(cuò)誤退出
exit(1):有錯(cuò)誤退出
退出代碼是告訴解釋器的(或操作系統(tǒng))
習(xí)題 36: 設(shè)計(jì)和調(diào)試
WARNING
在日常編程中不要成為這些規(guī)則的奴隸。在訓(xùn)練中,你需要通過這些規(guī)則的應(yīng)用來鞏固你學(xué)到的知識(shí),而在實(shí)際編程中這些規(guī)則有時(shí)其實(shí)很蠢。如果你覺得哪個(gè)規(guī)則很蠢,就別使用它。
if 規(guī)則
- 每個(gè) if 語句必須包含一個(gè)else.
- if 語句嵌套盡量不要超過2層
- if 語句段的前后各保持一個(gè)空行,這個(gè)規(guī)則對(duì)其他語句段也適用,如函數(shù)、循環(huán)
- if 條件應(yīng)盡量保持簡(jiǎn)單,若比較復(fù)雜,應(yīng)先建立變量保存該值
如果else永遠(yuǎn)都執(zhí)行不到,必須在else語句后面使用die函數(shù)
習(xí)題37:復(fù)習(xí)各種符號(hào)
各種符號(hào)參考
習(xí)題38:閱讀代碼
習(xí)題 39: 列表的操作
#字符串
ten_things = "Apples Oranges Crows Telephone Light Sugar"
#打印字符串
print "Wait there are not 10 things in that list. Let's fix that."
#以空格為分隔符,分解字符串中的子串,返回一個(gè)列表
stuff = ten_things.split(' ')
#定義一個(gè)列表
more_stuff = ["Day","Night","Song","Frisbee","Corn","Banana","Girl","Boy"]
#打印列表
print stuff
#循環(huán),當(dāng)列表元素個(gè)數(shù)不等于10
while len(stuff) != 10:
#刪除列表最后一個(gè)元素,并返回
next_one = more_stuff.pop()
print "Adding: ", next_one
#將刪除的元素添加到另一個(gè)列表的末尾
stuff.append(next_one)
print "There are %d items now." % len(stuff)
print "There we go: ", stuff
print "Let's do some things with stuff."
#打印列表的第2個(gè)元素
print stuff[1]
#打印列表最后一個(gè)元素
print stuff[-1]
#刪除列表最后一個(gè)元素
print stuff.pop()
#用空格字符聯(lián)接列表中的各個(gè)元素
print ' '.join(stuff)
#用井號(hào)聯(lián)接列表的第4和第5個(gè)元素
print '#'.join(stuff[3:5])
習(xí)題 40: 字典, 可愛的字典
這是最有用的容器:字典(dictionary)。
Python 將這種數(shù)據(jù)類型叫做 “dict”,有的語言里它的名稱是 “hash”。