有人說任務驅動式的學習方式會更有效率,有人說興趣是最好的老師。
所以我打算調試前人設計好的一些小遊戲,來做爲自己Python入門的教材。
下面是對現有代碼的分析,在分析每一行代碼在遊戲中發揮的作用的同時,分析代碼中涉及到的編程語法。
通過設計一個小的遊戲來學習Python編程語言,首先以最基礎的“猜數字”遊戲入手,詳細的介紹每一行代碼,並講解代碼的其他功能和屬性,在編寫遊戲的過程中學會編程。
(一)源代碼:
#This is a Guess The Number game.
import random
#賦值過程自動創建變量
guessesTaken = 0
print("Hello! What is your name?")
myName = input()
number = random.randint(1, 20)
print("Well," + myName + ", I an thinking of a number between 1 and 20.")
for i in range(6):
print("Take a guess.")
guess = input()
guess = int(guess)
if guess < number:
print("Your guess is too low.")
if guess > number:
print("Your guess is too high.")
if guess == number:
break #跳出for循環
if guess == number:
guessesTaken = i
guessesTaken = str(guessesTaken)
print("Good job," + myName + "Your guessed my number in " + guessesTaken +" guesses!")
if guess != number:
number = str(number)
print("Nope. The number I was thinking of was" + number +".")
運行結果:
runfile('D:/Z/Python/Python遊戲編程/遊戲編程代碼/猜數字.py', wdir='D:/Z/Python/Python遊戲編程/遊戲編程代碼')
Hello! What is your name?
低頭寫作業
Well,低頭寫作業, I an thinking of a number between 1 and 20.
Take a guess.
13
Your guess is too low.
Take a guess.
16
Your guess is too low.
Take a guess.
18
Your guess is too high.
Take a guess.
177
Your guess is too high.
Take a guess.
17
Good job,低頭寫作業Your guessed my number in 4 guesses!
這個遊戲用到的都是最基本的語法。下面進行詳細的分析:
(二)詳細分析:
遊戲主要內容:
- import語句;
- 模塊;
- randint()函數;
- for語句
- 語句塊
- str()函數、int()函數、float()函數;
- 布爾類型;
- 比較操作符;
- =和==的區別;
- if語句;
首先導入random模塊以便程序可以調用random.randint()函數,該函數將會產生一個隨機數,供用戶進行猜測。
#導入random模塊
import random
導入random模塊,以便程序可以調用random.randint()函數,該函數將會產生一個隨機數,供用戶進行猜測。
import語句:
語句是執行某些動作的指令,不像表達式那樣會計算一個值。
例如賦值語句:把一個值存儲到一個變量中。
Python包含許多內建的函數,有些儲存在模塊中,使用import語句導入我們的程序中後,就可以使用這些函數了。
guessesTaken = 0
新建變量用於保存玩家猜測過的次數。Python賦值後直接創建變量。
print("Hello! What is your name?")
myName = input()
調用print()函數,把傳遞給它的字符串參數顯示到屏幕上。函數就像是程序中的一個小程序。input()函數用於獲取玩家的姓名,注意input()函數傳遞玩家輸入的字符串。
number = random.randint(1, 20)
調用random模塊中的randint()函數,產生一個隨機數,賦值給變量number。代碼中的randint(1, 20)函數會返回一個1到20之間的整數並賦值給變量number。
print("Well," + myName + ", I an thinking of a number between 1 and 20.")
調用print()函數根據玩家姓名來歡迎玩家,並且告訴玩家猜測數字的範圍。
for i in range(6):
print("Take a guess.")
guess = input()
guess = int(guess)
if guess < number:
print("Your guess is too low.")
if guess > number:
print("Your guess is too high.")
if guess == number:
break #跳出for循環
for循環:
通過for循環一遍一遍的執行代碼,該段代碼會重複執行6次。for語句以關鍵字for打頭,後面跟着一個新的變量、in關鍵字、對range()函數的一次調用,range()函數指定了循環應該執行的次數,此外還包括一個冒號。
break語句立刻跳出for循環語句塊,跳到for循環結束後的第一行代碼。
for語句表示一個循環的開始,循環可以重複的執行相同的代碼。當程序執行到一條for語句時,它會進入for語句後面的代碼塊,運行完所有的代碼塊之後,執行會回到該語句塊的頂部,並再次運行所有的代碼。通過循環的每一次執行,叫做一次迭代。可以把for語句理解爲:“將如下的語句塊中的代碼執行一定的次數”。
組織語句塊:
Python用語句縮進來確定流程控制結構不同代碼塊(即語句體)的邊界。在一個語句塊中的每一行代碼都有和語句塊第一行代碼相同的縮進值,通過改變語句的縮進值來開始和結束一個新的語句塊,語句塊中可以嵌套語句塊。在代碼行之後,擁有相同或者更多的縮進值的任何代碼行,都被認爲是該語句塊的一部分。
guess = int(guess)
int()函數接受一個參數,返回參數的整數形式。儘管可以傳遞一個字符串給int()函數,但是不能傳遞任意的字符串,傳遞給int()的字符串,必須是由數字組成的。
類似的,float()和str()函數分別返回浮點數和字符串類型。
使用int()、float()和str()函數,可以接受一種數據類型的值,而返回另一種數據類型的值。
數據類型
Python中的每一個值,都屬於一種數據類型。Python數據類型包括整數型、浮點型、字符串和布爾數據類型。布爾數據類型只有兩個值:True或者False,這兩個值的首字母必須大寫,其餘部分爲小寫。
比較操作符
比較操作符比較兩個值,並且會得到一個True或者Flase的布爾值。
在代碼中理解比較操作符
a = 21
b = 10
c = 0
if ( a == b ):
print ("1 - a 等於 b")
else:
print ("1 - a 不等於 b")
if ( a != b ):
print ("2 - a 不等於 b")
else:
print ("2 - a 等於 b")
if ( a < b ):
print ("3 - a 小於 b")
else:
print ("3 - a 大於等於 b")
if ( a > b ):
print ("4 - a 大於 b")
else:
print ("4 - a 小於等於 b")
# 修改變量 a 和 b 的值
a = 5;
b = 20;
if ( a <= b ):
print ("5 - a 小於等於 b")
else:
print ("5 - a 大於 b")
if ( b >= a ):
print ("6 - b 大於等於 a")
else:
print ("6 - b 小於 a")
輸出結果
1 - a 不等於 b
2 - a 不等於 b
3 - a 大於等於 b
4 - a 大於 b
5 - a 小於等於 b
6 - b 大於等於 a
Python運算符還包括算數運算符、賦值運算符、邏輯運算符等。
其中“等號”賦值操作符(=)用於賦值語句,用來把值儲存到變量中;“等於”比較操作符號(==)用於表達式,用來判斷兩個值是否相等。
if語句
if語句以關鍵字if打頭、後面跟着條件和一個冒號,其中條件只是結果爲True或者False的表達式的另一種叫法而已。if語句後面條件爲True,則執行冒號後面的代碼塊,Flase則會跳過if語句塊中的代碼。
if guess == number:
guessesTaken = i
guessesTaken = str(guessesTaken)
print("Good job," + myName + "Your guessed my number in " + guessesTaken +" guesses!")
if guess != number:
number = str(number)
print("Nope. The number I was thinking of was" + number +".")
只有字符串值纔可以和其他字符串連接,如果把一個整數和一個字符串連接會報錯。
這個遊戲就介紹到這裏。
疫情爆發,也只能待在家裏,延遲開學。也是要停課不停學。在開學之前爭取每天更新一篇,總結之前學習的內容,也繼續學習新的內容。
參考:
- 菜鳥教程
- http://inventwithpython.com/invent4thed/chapter3.html
- 《Python遊戲編程快速上手》第四版,AI Sweigart著,李強 譯