與孩子一起學編程(Python讀書筆記3)
第十一章 嵌套與可變循環
Python 3.X里 print()函數默認是自動換行的,所以本章代碼會有很多問題,實際上 print()函數里有一個默認參數 end,
默認情況下: end= "
"
把它換成 空字元 "",
print("*",end = "")即可實現不換行。
舉例:
同理,在長字串中增加換行,只需添加
即可。
11.1
嵌套並不複雜,但是每一層的循環語句末尾要寫 冒號 :
從其它語言轉Python的人來說,這是個比較容易忘的符號。
若循環體內的代碼沒有自動縮進,請檢查是否忘記輸入冒號
for multi in range(5, 8):
for i in range(1, 11):
print(i,"x",multi, "=", i* multi)
print () #這個print專門用來提供一個空行
11.2
可變循環,在這裡指的是用 變數 來設置 循環的範圍。
比如:for i in range( 0, num ) 在執行此句前 對num 進行賦值,以達到動態確定範圍的目的。
實際上,循環的起點、終點都可以用變數來表示。
11.4
初學編程,在每一層循環的開始第一行,列印一下循環變數的值,可以幫助理解,最後可以用 # 號將代碼變成注釋,不影響最終輸出效果。
11.6
對於較長的代碼行,可以用 「」 來表示分行,或者在多行的代碼前後加「(」「)」總的括起來。
練習1
time.sleep(1) 起到的作用是讓 程序暫停1秒種。
這裡的time是Python命名空間的用法,在第15章將會看到。Python將很多概念進行了簡化,這種不區分實例、類,不做變數類型設定 的做法,在理解上會有一些問題。
練習3
Python3重點:對換行進行精確控制。
range(i)代表了從0到i-1的範圍,非常的方便。
結合可變循環概念,實現經典的9*9 乘法表:
第十二章 列表
C語言中稱為數組,Python中稱為列表,它相當於C#中的集合。C 系列語言的基因中,數組是長度不可變,數據類型不可變的,這大大限制了數組的可用性。Python中的數組用法非常靈活,實際上ActionScript等語言中都是這麼靈活的在使用數組,這是很多人喜歡Python的一個理由。
12.1
列表的兩種用法
1)先定義再使用:
family = []
family.append("Dad")
2)直接定義並填充,之後仍可添加數據。
family = ["Dad","Mom","Brother","Sister"]
12.6
從列表中獲取元素是通過索引號來實現的,首個索引號為零。
print(family[0]) # 輸出 Dad
12.7
Python特色功能,按兩個索引位置讀取數據:
print(family[1,3]) # 輸出 Mom Brother
從索引 1 開始(實際上是第二個數據),至索引 3 之前結束(第四個數據之前)
輸出的仍為列表,所以有中括弧和引號,數據類型為list。
12.8—12.12
列表的各種花式操作,平時用的不會很多。
12.13
列表排序,同類型數據排序是比較有用的方法。
混合數據類型的排序是不被支持的。
練習4
nameList = []
for i in range(5):
name = input("請輸入一個名字:")
nameList.append( name )
print("輸入的名字有:", end =" ")
for j in nameList :
print(j, end =" ")
index = int( input("想替換哪個名字?(1-5):"))
newName = input("請輸入新名字:")
nameList[index-1] = newName
print("新名單是:", end =" ")
for j in nameList :
print(j, end =" ")
上面的代碼中未包含數據有效性檢驗,index的大小應該在列表的數據個數範圍以內。
讓用戶指定第幾個數據時,用戶不知道是從零開始計數,所以代碼里要對index–1,這樣才是普通用戶想指定的那個名字。
index未修正前的一個錯誤示範:
用戶指定修改第3個名字,實際修改了第4個名字,將index-1後,就正常了。
提示:
1)對於需要多次輸入的數據,可以放到循環語句中。
2)輸入的數據,如果要做數學計算,記得 字元 轉換成 數字。
3)列表的首個索引位置值為零,在統計個數、設定循環變數時,這個很重要,以後會慢慢習慣的。
第十三章 函數
13.1
定義函數時,函數名後面記得加 冒號。
即使是在同一個代碼塊里,也要先定義函數,再使用它。
注意縮進,別把執行函數的代碼,變成了函數的一部分,如下面所示的那樣:
13.5
函數的意義在於:根據給定的參數,用一段相同的代碼,實現不同的輸出。或者說,是對軟體功能模塊的一個劃分,是段落式的代碼組織方式。
13.6
從函數名開始,括弧內的參數名,與外部的參數僅是對應關係。函數內的變數在執行完畢後,就會被清除掉。
函數外定義的變數是全局變數。全局變數在函數體內是可以訪問的,但不會被改變。嘗試在函數體內改變全局變數的做法,只相當於在函數體內增加了一個同名的局部變數。
為了在函數體內改變全局變數的內容,需要使用 global關鍵字。
練習1
猛然看到習題嚇一跳,它明顯超綱了啊,每個字母作一遍編碼,再按行串起來,最後對輸入的名字拆成字母,每個字母調用不同的函數,老鳥都得想半天啊。
初學者肯定做不到啊,肯定是自己想多了。所以想到應該是上圖中的代碼,練習題的重點是可以重複列印,怎麼生成的圖形不是重點。
第十四章 對象
能堅持到這一章,您已經超越C語言了。因為C語言里最複雜的數據類型是 結構(structure),沒有「對象」的概念。到了C++才有了「對象」的概念,隨之而來的是OOP概念(面向對象的編程)。Python淡化了概念之間的鴻溝,將 對象 理解為 函數 和 參數 的混合體就好了,它是比單純的函數 更高級的一種數據、代碼組織方式。
萬事萬物都是對象(object),將對象的描述 抽象成定義,就是 類(class)。
類 是 對象 的定義和描述。
對象 是 類 的一個個具體的實例。
可以把 對象 看做是程序運行中間才存在的數據實體。
存貯在電腦中的代碼文件 看做是 類 的定義文件。
很多時候,口語習慣是混著說這兩個詞。
14.2
動態添加類屬性。在對象的使用過程中,給它添加的屬性,都屬於動態添加的屬性。
動態添加的屬性,僅屬於被添加的對象。通過 類定義 來生成的新對象不具備剛添加的屬性。下面的代碼就是這樣的例子:
14.4
通過 __init__() 函數對類 進行初始設置。
通過 __str__() 函數來指定默認情況下的輸出信息,通常用來顯示內置屬性的內容。
14.5
self 是普遍遵守的參數名設定,換成其它名字也是可以的。
14.6
len( self.condiments )>0
len 函數返回數組的長度
14.7
Python 通過「遵守規則」來簡化數據的訪問限制。盡量通過「方法」來訪問屬性,而不是直接去設置屬性,因此,不再考慮類的訪問限制(private私有 public公有 protect 受保護 在Python中統統不存在的)。
方法(Method)中可以添加對數據的校驗的內容,從而避免無效數據(比如超範圍的數據)進入到對象中。
14.8
「不同的類中具有同名的方法」這個不是傳統意義上的多態。傳統的多態 通常指的是「同一個」類中通過參數形式的變化,達到不同的效果。
第十五章 模塊
模塊是存貯代碼時的一種策略,相當於將多個函數打包放在一起,使用時用import 命令導入。
幾個常的模塊:
import time
time.sleep(30) # 休眠30秒
import random
random.randint(0,100) # 產生一個0到100之間的整數
random.random( ) # 產生一個0到1之間的小數
精確導入函數的方法:
from random import randint
print(randint(0,100)) # 產生一個0到100之間的整數
練習3
通過增大重複次數,可看到,randint(1,20)函數的結果中包含1 和 20
相關軟體網盤下載
easyGui
https://pan.baidu.com/s/1lYFo7Jm4QEngQGc11w_XNAinstall Pygame
https://pan.baidu.com/s/1rwPDiHBgMsuM6NscGeS0oAPygame 64位
https://pan.baidu.com/s/1ETyDYZWcW_JJJgZWCVR5fwPygame 32位
https://pan.baidu.com/s/1F_Vd07FW8k3jU9DyPaX-JgPyhton3.6 64位
https://pan.baidu.com/s/11XWyLN8TlzZaegwcV91uuA劉崇軍:與孩子一起學編程(Python讀書筆記 )劉崇軍:與孩子一起學編程(Python讀書筆記2)推薦閱讀:
※零基礎編程入門(01)——前言
※0基礎學Python之二十四:異常處理(上)
※編程入門(五):編程開發工具這麼多,我該如何選擇?
※開始學編程 0x01
※hello, world——《例C》(二)