2014-12-13 183 views
1

即时通讯使用python编程语言的初学者,并且我无法在python中编写简单的程序,我可以在终端中运行。这是迄今为止的计划。python终端打印变量

import random 

X = "*" 
O = "*" 
Player = "*" 
Computer = "*" 


def inputPlayerLetter(): 
    letter = raw_input('Do you want to be X or O? \n') 

    if letter == "X": 
     print "You are now X's, you will go first" 
     Player = "X" 
     Computer = "O" 
    elif letter == "O": 
     print "You are now O's you will go second" 
     Player = "O" 
     Computer = "X" 

inputPlayerLetter() 

print Player 
print Computer 

这就是我在终端上运行代码时得到的结果。

Do you want to be X or O? 
X 
You are now X's, you will go first 
* 
* 

Do you want to be X or O? 
O 
You are now O's you will go second 
* 
* 

基本上,我的功能,如果我选择X,我想球员是X,和电脑是O(或当我选择O,我希望球员是O和计算机X)。但是,当我打印这个变量时,我得到了*和*。我该如何解决这个问题,以便我从elif语句中得到我想要的效果。

+1

这是一个范围问题 – keyser 2014-12-13 15:44:07

回答

0

您正在分配的播放器和计算机的值是本地函数。你应该从你的函数返回值,因此,他们在主要适用范围入店:

def inputPlayerLetter(): 
    Player , Computer = "*", "*" 
    letter = raw_input('Do you want to be X or O? \n') 
    if letter == "X": 
     print "You are now X's, you will go first" 
     Player, Computer = "X", "0" 
    elif letter == "O": 
     print "You are now O's you will go second" 
     Player, Computer = "O", "X" 
    return Player, Computer 

Player, Computer = inputPlayerLetter() 

欲了解更多详情,请参阅What are the rules for local and global variables in Python?

在Python中,变量只在函数内部引用的是隐含地全球性的 。如果一个变量在函数体内的任何地方被赋予了一个新的值,它被假定为一个局部变量。如果一个变量 在函数内部被分配了一个新的值,那么该变量为 隐式地为local,并且您需要明确声明它为'global'。

虽然起初有点令人惊讶,但一时的考虑解释了 这个。一方面,要求分配变量的全局值可提供针对意外副作用的 。另一方面,如果所有全局引用都需要全局参数 ,那么您将使用全局全部 时间。您必须声明为全局引用内置的 函数或导入模块的组件。这种混乱使 击败了全球声明识别 副作用的用处。

你也可以使变量全局,但这通常被认为是不好的做法,因为它打开了意想不到的副作用的大门。

0

您的播放器,计算机变量不在inputplayerletter()函数中,因此您将值存储在局部变量中。

为了解决这个让你的使用功能使用全局变量:

global Player, Computer 

最终代码:

import random 

X = "*" 
O = "*" 
Player = "*" 
Computer = "*" 


def inputPlayerLetter(): 
    global Player, Computer 


    letter = raw_input('Do you want to be X or O? \n') 

    if letter == "X": 
     print "You are now X's, you will go first" 
     Player = "X" 
     Computer = "O" 
    elif letter == "O": 
     print "You are now O's you will go second" 
     Player = "O" 
     Computer = "X" 

inputPlayerLetter() 

print Player 
print Computer 

希望它可以帮助