2012-01-09 53 views
2

我有以下腳本是從Python遊戲開發書中提取的。作者解釋了一切,除了一件事。我試圖自己弄清楚,但作爲一個初學者,這沒什麼意義。下面是代碼:這個特定參數如何獲得一個值?

import random 
import time 

def displayIntro(): 
    print('You are on a planet full of dragons. In front of you,') 
    print('you see two caves. In one cave, the dragon os friendly') 
    print('and will share his treasure with you. The other dragon') 
    print('is greedy and hungry, and will eat you on sight.') 
    print() 

def chooseCave(): 
    cave='' 
    while cave != '1' and cave != '2': 
     print('Which cave will you go into? (1 or 2)') 
     cave=input() 
    return cave 

def checkCave(chosenCave): 
    print('You approach the cave...') 
    time.sleep(2) 
    print('It is dark and spooky...') 
    time.sleep(2) 
    print('A large dragon jumps out in front of you! He opens his jaws and...') 
    print() 
    time.sleep(3) 
    friendlyCave=random.randint(1,2) 
    if chosenCave==str(friendlyCave): 
     print('Gives you his treasure!') 
    else: 
     print('Gobbles you down in one bite.') 

playAgain='yes' 
while playAgain=='yes' or playAgain=='y': 
    displayIntro() 
    caveNumber=chooseCave() 
    checkCave(caveNumber) 
    print('Do you want to play again? (yes or no)') 
    playAgain=input() 

現在我的問題是:如何在參數chosenCave獲得價值?對我來說,它似乎沒有在任何地方定義。我們定義了什麼是cave,什麼friendlyCave是,但不是chosenCave。這裏發生了什麼?我錯過了什麼?

對不起,如果這是一個完整的初學者問題。

回答

7

參數selectedCave在調用checkCave函數時接收其值。在此之前它沒有價值。

當你定義一個函數時,你必須選擇向該函數聲明參數。這就是您在函數名稱旁邊的圓括號中看到selectedCave的地方。這些括號創建了正式所謂的「形式參數聲明」。它定義了某人如何稱呼你的方法。它實際上並沒有調用該方法,但它只是告訴每個人如何調用它。

下代碼的底部你看到這個代碼:

caveNumber = chooseCave() 
checkCave(caveNumber) 

這就是所謂的「實際參數聲明」。這是一個奇特的說法,就是SelectedCave的實際價值。在你的例子中,selectedCave已經被分配了變量caveNumber中的值。

現在這並不意味着chosenCave永遠是更多的一個價值。這僅僅意味着在這個函數的執行過程中它是一個特定的值。每次調用一個函數時,都可以將一個新值分配給chosenCave。例如,用戶可以選擇洞穴1,獲得一些寶藏,說是再玩一次,然後選擇洞穴2.這是兩次checkCave的調用。首先是checkCave(1),第二個是checkCave(2)。 selectedCave的值可以隨函數的每次調用而改變。

+0

哦,這很有道理。謝謝,今天早些時候我實際上已經停留了幾個小時。 – 2012-01-10 03:37:54

0

下面的代碼片段就是chosenCave被傳遞到checkCave()

​​

caveNumberchosenCave一旦函數被調用。

main函數main函數chooseCave()被調用並將整個過程踢掉,但該代碼似乎並未在示例中列出。

相關問題