笨辦法學(xué)python習(xí)題0~習(xí)題39

習(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ù)依次賦予左邊的變量名”。

命令行輸入下的結(jié)果1
命令行輸入下的結(jié)果2

在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寫入文件。
輸入輸出結(jié)果

代碼執(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é)果:

輸出結(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”。

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。
  • 序言:七十年代末,一起剝皮案震驚了整個(gè)濱河市,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌,老刑警劉巖,帶你破解...
    沈念sama閱讀 227,837評(píng)論 6 531
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場(chǎng)離奇詭異,居然都是意外死亡,警方通過查閱死者的電腦和手機(jī),發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 98,196評(píng)論 3 414
  • 文/潘曉璐 我一進(jìn)店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人,你說我怎么就攤上這事。” “怎么了?”我有些...
    開封第一講書人閱讀 175,688評(píng)論 0 373
  • 文/不壞的土叔 我叫張陵,是天一觀的道長(zhǎng)。 經(jīng)常有香客問我,道長(zhǎng),這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 62,654評(píng)論 1 309
  • 正文 為了忘掉前任,我火速辦了婚禮,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘。我一直安慰自己,他們只是感情好,可當(dāng)我...
    茶點(diǎn)故事閱讀 71,456評(píng)論 6 406
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著,像睡著了一般。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 54,955評(píng)論 1 321
  • 那天,我揣著相機(jī)與錄音,去河邊找鬼。 笑死,一個(gè)胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播,決...
    沈念sama閱讀 43,044評(píng)論 3 440
  • 文/蒼蘭香墨 我猛地睜開眼,長(zhǎng)吁一口氣:“原來是場(chǎng)噩夢(mèng)啊……” “哼!你這毒婦竟也來了?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 42,195評(píng)論 0 287
  • 序言:老撾萬榮一對(duì)情侶失蹤,失蹤者是張志新(化名)和其女友劉穎,沒想到半個(gè)月后,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 48,725評(píng)論 1 333
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 40,608評(píng)論 3 354
  • 正文 我和宋清朗相戀三年,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點(diǎn)故事閱讀 42,802評(píng)論 1 369
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情,我是刑警寧澤,帶...
    沈念sama閱讀 38,318評(píng)論 5 358
  • 正文 年R本政府宣布,位于F島的核電站,受9級(jí)特大地震影響,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 44,048評(píng)論 3 347
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧,春花似錦、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 34,422評(píng)論 0 26
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 35,673評(píng)論 1 281
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留,地道東北人。 一個(gè)月前我還...
    沈念sama閱讀 51,424評(píng)論 3 390
  • 正文 我出身青樓,卻偏偏與公主長(zhǎng)得像,于是被迫代替她去往敵國和親。 傳聞我的和親對(duì)象是個(gè)殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 47,762評(píng)論 2 372

推薦閱讀更多精彩內(nèi)容

  • 笨辦法學(xué) Python (Learn Python The Hard Way)中文版 習(xí)題 0: 準(zhǔn)備工作 總有一...
    fatfatEddy閱讀 1,423評(píng)論 0 5
  • 第二天 40-50(一)轉(zhuǎn)義字符 \ : 反斜杠 ,作用 1、轉(zhuǎn)義字符 \n 換行 這兩個(gè)字符的作...
    Babyzpj閱讀 272評(píng)論 0 0
  • 字符串是python中常見數(shù)據(jù)類型,應(yīng)用非常廣泛。 python不支持單字符類型,單字符類型在python中以字符...
    大貓黃閱讀 1,388評(píng)論 0 6
  • “愛一個(gè)人,是用心能感覺到的”“明明清楚,還是裝糊涂,可悲” 1 我們?cè)谌粘I钪?,總是?huì)碰到這么一些陷在感情中不...
    YIBAO閱讀 548評(píng)論 4 6
  • 明月多情應(yīng)笑我,笑我如今。辜負(fù)春心,獨(dú)自閑行獨(dú)自吟。 近來怕說當(dāng)時(shí)事,結(jié)遍蘭襟。月淺燈深,夢(mèng)里云歸何處尋?
    后半月閱讀 152評(píng)論 0 0