我在python中进行算术测验。在测验开始时,它询问用户他们想要输入结果的类,这是在def classname()
中。测验结束后,如果用户不想重复测验,程序会将分数写入文本文件:
def classname():
class_name = input("Which class do you wish to input results for?")
# the rest of my code for my introduction
#
#
#
#
def askquestion():
# all of my code to ask the user the arithmetic question
#
#
#
# code to ask the user if they want to repeat the quiz
#if they dont want to repeat the quiz then this code is run
else:
filename = class_name + ".txt"
# code that will write the scores to a text file
当我运行此代码时,我收到此错误:
filename = class_name + ".txt"
NameError: name 'class_name' is not defined
我是否必须声明变量" classname"再次在askquestion()
或者有没有一种方法python可以识别我已经声明了变量?
答案 0 :(得分:1)
除非您将变量定义为全局变量,否则您必须重新定义它,或者将代码中的值作为参数传递给后续函数。
您可以将参数传递给askquestion
,因为它目前的情况是,变量class_name
超出了函数的范围。
因此,您的函数定义更改为
def askquestion(class_name):
...
...
现在,当您调用askquestion
函数时,您必须将class_name传递给它。
一个工作示例如下所示:
def classname():
class_name = input("Which class do you wish to input results for?")
...
...
return class_name
def askquestion(class_name):
...
else:
filename = class_name + ".txt"
# code that will write the scores to a text file
if __name__ == `__main__`:
class_name = classname()
askquestion(class_name)
答案 1 :(得分:0)
您的代码在class_name()
函数中声明了变量class_name,因此无法在外部访问它。如果您在class_name
函数之外声明变量class_name()
,则askquestion()
函数可以访问该变量。
答案 2 :(得分:0)
在函数内声明的变量是该函数的本地变量,需要传递或返回到其他方法,或者移出函数以使其全局化,在函数内部使用时需要显式声明:
所以你可以从classname()返回class_name并在askquestion()中使用classname():
def classname():
class_name = input("Which class do you wish to input results for?")
return class_name
def askquestion():
...
else:
filename = classname() + ".txt"
# code that will write the scores to a text file