我是Python的新手,你可以从代码中看出来。首先,我试图让用户输入他们的名字并将其存储在一个全局变量中,我可以在我的代码中访问所有代码...最好命名为uName
。
在循环周期中发生了什么,它会询问用户“这是你的名字吗?'在他们输入第一个回复之后。如果我点击类型,但是'是'或者'是',它将重新要求他们输入名称。但是,当他们最终点击“是”时,程序会打印出他们输入的第一个名字。
此外,有关代码结构或措辞的任何提示都很有用......
game.py
from decisions import *
import decisions
global globalname
globalname = ''
def gameEngine(uName):
looper = 0
while looper == 0:
print ('You said your name is, ') + uName + ('...')
clarifier = raw_input('Is that correct?\n')
if clarifier == 'yes' or clarifier == 'Yes':
namePrinter(answer)
else:
decisions.userDecisions(username)
def namePrinter(uName):
print uName
gameEngine(answer)
decisions.py
username = ''
def userDecisions(inputs):
response = raw_input("Please enter your name...\n>>> ")
return response
answer = userDecisions(username)
答案 0 :(得分:1)
您遇到的具体问题是您首先通过game.py中的import语句运行decisions.py的内容。通过这个,你已经设置了变量" answer"等于用户输入的第一个名字。
然后你在game.py中调用gameEngine函数,提供"答案"来自decisions.py的变量作为参数,存储在" uName"中。当用户输入另一个名称时,该名称不会存储在任何地方,并且会被以下行引出。
decisions.userDecisions(username)
您可以将该语句的返回值分配给变量,例如" uName",这样可以让您更接近您想要做的事情。
uName = decisions.userDecisions(username)
下一个问题是,当您打印出名称时,您正在打印变量"回答"而不是" uName"。这主要是导致始终打印出名字的问题。
namePrinter(answer)
这可以通过传入" uName"来解决。变量而不是。
namePrinter(uName)
此外,如果您希望最终选择的名称存储在全局变量中,您可以在用户确认名称正确后,将最终用户选择的名称分配给gloabl变量。
globalname = uName
但是,您可能需要注意代码结构的一些部分。
首先,您可能想尝试不使用全局变量。相反,你应该通过使用它的函数传递名称。如果您有其他需要经常访问的播放器信息,您可以创建一个Player类和对象,将该信息存储在一个对象中,该对象可以根据需要传递给函数。
其次,由于userDecisions函数不使用其争论"输入",您可以删除该争论,因为它没有被使用。
第三,您可能需要注意仅通过import语句运行代码。通常,在导入源文件时,应该导入函数,而不是依赖导入来直接运行代码。例如,您可以删除decisions.py的非功能行,而只需在game.py中运行以下命令。
gameEngine(decisions.userDecisions())
我建议您在Python中查找函数和传递参数的一些资源,因为它们可能能够更好地解释基础概念。
答案 1 :(得分:0)
你搞砸了变量及其范围。详细了解他们here。
为了简明扼要地提供关于变量范围的观点,请查看以下代码片段:
# This is a global variable
a = 0
if a == 0:
# This is still a global variable
b = 1
def my_function(c):
# this is a local variable
d = 3
print(c)
print(d)
# Now we call the function, passing the value 7 as the first and only parameter
my_function(7)
# a and b still exist
print(a)
print(b)
# c and d don't exist anymore -- these statements will give us name errors!
print(c)
print(d)
关于您的代码,您可能希望了解这些问题:
answer
变量。username
来电中的decisions.userDecisions(username)
变量就是这种情况。decisions.userDecisions(username)
方法中的gameEngine(uName)
调用不会将响应存储到任何变量,因此响应将会丢失。globalname
但不为其分配任何值(当然不是''
)。<小时/> P.S。:我很想为你做功课,但是这可能足以让你了解更多信息。 ;)