今天學了個知識點:1.如何編寫注釋,該編寫什么樣的注釋。2.python之禪。3.列表是什么。4.訪問列表元素。5.索引從0而不是1開始。6.使用列表中的各個值。
python大大的圖
我的圖
1.如何編寫注釋,該編寫怎樣的注釋。
在python中,注釋用(#)標識,井號后面的內容都會被python解釋器忽略。這里有兩個問題:(1)# -*- coding: utf-8 -*-為什么會起作用。(2)真的是所有的井號都會被忽略嗎,有沒有特例。
(1)我們都知道# -*- coding: utf-8 -*-是聲明文件編碼的注釋,它必須要放在第一行或者第二行,有了這一句話我們才能在里面寫中文。否則python會默認使用ASCII編碼,寫中文時會報錯。其實不僅是允許寫中文,要寫其他的語言也是可以的,這一句話讓python容納多種字符。這一句話是有作用的,事實上python任然會忽略這句代碼,但是它卻可以作為“黑客”或者解決問題的方法來指定文件的格式。
(2)哈哈,如果井號在單引號或者雙引號里面當然就直接輸出了呀。一般單引號或者雙引號里面的句子不長,我們要寫注釋的話也會寫在它們的后面。但是在三引號里一般是用作注釋的,三引號表示換行,里面會有很多內容,會使用井號來注釋,而且井號里面的注釋內容會被直接輸出。而且由于三引號具有換行的特性,它自己可以變成注釋,只要你不把它輸出。不知道大家是否還記得這個圖
編寫注釋的主要目的是闡述代碼要做什么,以及是如何做的。清晰簡潔的注釋便于自己檢查代碼,也便于別人讀懂你的代碼。
2.python之禪
只需在解釋器中執行命令import this,python就會把編碼的一系列原則告訴我們。
Beautiful is better than ugly.優美勝于丑陋(Python 以編寫優美的代碼為目標)
Explicit is better than implicit.明了勝于晦澀(優美的代碼應當是明了的,命名規范,風格相似)
Simple is better than complex.簡潔勝于復雜(優美的代碼應當是簡潔的,不要有復雜的內部實現
Complex is better than complicated.復雜勝于凌亂(如果復雜不可避免,那代碼間也不能有難懂的關系,要保持接口簡潔)
Flat is better than nested.扁平勝于嵌套(優美的代碼應當是扁平的,不能有太多的嵌套)
Sparse is better than dense.間隔勝于緊湊(優美的代碼有適當的間隔,不要奢望一行代碼解決問題)
Readability counts.可讀性很重要(優美的代碼是可讀的)
Special cases aren't special enough to break the rules.Although practicality beats purity.即便假借特例的實用性之名,也不可違背這些規則(這些規則至高無上)
Errors should never pass silently.Unless explicitly silenced.不要包容所有錯誤,除非你確定需要這樣做(精準地捕獲異常,不寫 except:pass 風格的代碼)
In the face of ambiguity, refuse the temptation to guess.當存在多種可能,不要嘗試去猜測
There should be one-- and preferably only one --obvious way to do it.而是盡量找一種,最好是唯一一種明顯的解決方案(如果不確定,就用窮舉法)
Although that way may not be obvious at first unless you're Dutch.雖然這并不容易,因為你不是 Python 之父(這里的 Dutch 是指 Guido )
Now is better than never.Although never is often better than *right* now.做也許好過不做,但不假思索就動手還不如不做(動手之前要細思量)。你可以將余生都用來學習python和編程的紛繁難懂之處,但這樣你什么項目都完不成。不要企圖編寫完美無缺的代碼;先編寫行之有效的代碼,再決定是對其做進一步改進還是轉而去編寫新代碼。
If the implementation is hard to explain, it's a bad idea.If the implementation is easy to explain, it may be a good idea.如果你無法向人描述你的方案,那肯定不是一個好方案;反之亦然(方案測評標準)
Namespaces are one honking great idea -- let's do more of those!命名空間是一種絕妙的理念,我們應當多加利用(倡導與號召)
3.列表是什么
列表由一系列按特定順序排列的元素組成。列表中可以加入任何元素,其中的元素之間也可以沒有任何關系。鑒于列表通常包含多個元素,給列表指定一個表示復數的名稱(如letters、digits或names)是個不錯的主意。在python中,用方括號([ ])來表示列表,并用逗號來分隔其中的元素。
當然我們也可以不直接把一個完整的列表寫出來。我們可以定義一個空列表,再一點一點的往里面加元素(用列表名.append()),最后打印列表時的結果是一樣的
4.訪問列表元素
列表是有序集合,因此要訪問列表的任何元素,只需將該元素的位置或索引告訴python即可。要訪問列表元素,可指出列表的名稱,再指出元素的索引,并將其放在方括號內。從列表bicycles中提取第一款自行車print(bicycles[0]),當請求獲取列表元素時,python只返回該元素,而不包括方括號和引號,非常簡潔。當然我們也可以對輸出的內容規范其格式。還記得我們在第二章學了三種修改字符串大小寫的方法,分別是:print(bicycles[0].title()),print(bicycles[0].upper())和print(bicycles[0].lower())。
我們需要注意的是這些修改大小寫的方法只能針對列表中的元素,不能針對整個列表。因為列表并沒有這些屬性
5.索引從0而不是1開始
在python中,第一個列表元素的索引為0,而不是1。第二個列表元素的索引為1。根據這種簡單的計數方式,要訪問列表的任何元素,都可將其位置減1,并將結果作為索引。python為訪問最后一個列表元素提供了一種特殊語法。通過講索引指定為-1,可讓python返回最后一個列表元素。這種語法很有用,因為你經常需要在不知道列表長度的情況下訪問最后的元素。這種約定也適用于其他負數索引,例如,索引-2返回倒數第二個列表元素,索引-3返回第三個列表元素,以此類推。如果我現在想返回列表的倒數第二個元素,我可以有如下兩種寫索引的方式
最終它們的結果都是
如果我現在想返回最后兩個列表元素,我可以有兩種寫索引的方式
最終它們的結果都是
6.使用列表中的各個值
對于理解for循環里的內容,我們需要有一點補充知識。函數len()用于返回字符串、列表、字典、元組等長度。函數range()返回一個列表,列表里寫的是各個元素的索引。
這個for循環說的是,我們循環列表中每個元素的索引(range(len(bicycles))),打印出這個元素(bicycles[i])和雙引號內的=>以及這個元素對應的索引(i)
for循環的第二種寫法我嘗試了用列表去寫,我想的是原來我們的i代表的是數字,現在我們的i代表列表里的元素。我們最后打印的結果只要保證=>的左邊是元素,右邊是數字就好了。但是這么寫右邊的數字如果不寫循環是沒有辦法單個輸出的。
于是我參考了Candice Hu同學的建議,寫了一個字典,用for循環對字典里的value和key進行輸出
可像使用其他變量一樣使用列表中的各個值。例如,你可以使用拼接根據列表中的值來創建消息。
最后兩行代碼嘗試從列表中提取第一款自行車,并使用這個值來創建一條消息。我們使用bicycles[0]的值生成了一個句子,并將其存儲在變量message中,輸出是一個簡單的句子,其中包含列表中的第一款自行車