python终端打印变量
问题描述:
即时通讯使用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语句中得到我想要的效果。
答
您正在分配的播放器和计算机的值是本地函数。你应该从你的函数返回值,因此,他们在主要适用范围入店:
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'。
虽然起初有点令人惊讶,但一时的考虑解释了 这个。一方面,要求分配变量的全局值可提供针对意外副作用的 。另一方面,如果所有全局引用都需要全局参数 ,那么您将使用全局全部 时间。您必须声明为全局引用内置的 函数或导入模块的组件。这种混乱使 击败了全球声明识别 副作用的用处。
你也可以使变量全局,但这通常被认为是不好的做法,因为它打开了意想不到的副作用的大门。
答
您的播放器,计算机变量不在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
希望它可以帮助
这是一个范围问题 – keyser 2014-12-13 15:44:07