2012-01-09 105 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()被调用并将整个过程踢掉,但该代码似乎并未在示例中列出。

相关问题