我是编程新手,但我喜欢自然语言(如你所见)。我想写一个简单的程序来帮助测试法语现在时动词。然而,在这段代码中,我一直收到错误消息,因为correctAnswers显然没有设置为全局变量。有什么主意!?在
import random
level1=["(manger)","je mange", "tu manges", "il mange", "elle mange", "nous mangeons", "vous mangez", "ils mangent", "elles mangent"]
level2=["(boire)", "je bois", "tu bois", "il boit", "elle boit", "nous buvons", "vous buvez", "ils boivent", "elles boivent"]
correctAnswers=0
blanks = '_' * 8
def getVerb():
verbIndex=random.randint(1,len(level1)-1)
print (level1[verbIndex].split()[0], blanks, level1[0])
ans=input()
while ans==level1[verbIndex].split()[1]:
correctAnswers=correctAnswers+1
print ("Nice one!")
print (correctAnswers)
getVerb()
else:
print ("Bad luck!")
getVerb()
getVerb()
我清理了你的代码,让它更像Python。现在就试试:
correctAnswers=0
超出范围。它们应该在getVerb
内。你也不需要递归。在假设你想测试每一个级别和每个问题一次:
如果您可以通过预拆分零件或使用dict控制level1/level2输入,则可以进一步优化此功能
正如@Cixate所提到的,可以通过设置
correctAnswers = 0
内部getVerb
并用while循环替换递归来解决这个问题:问题是Python实际上看到两个不同的变量,在两个不同的范围内,具有相同的名称。这会导致所谓的“阴影”发生。在
因此,Python只在}版本。而且这个变量从未被赋予值!所以Python抱怨说您试图在没有分配它的情况下使用它。在
getVerb
内部使用getVerb
的{但是。。。等待!我们没有赋值吗?好吧,我们分配了一个名为
correctAnswers
的变量,但它是一个不同的变量,具有不同的范围。在查看以下示例:
^{pr2}$所以,总结一下这种疯狂:
y1
看到来自外部作用域的x
——在第一行声明y2
创建自己的x
——不能看到或使用另一个y2
给它自己的x
分配了一个新值,外部的{outer 3
和{y3
还创建了自己的x
,但在它有值之前尝试使用它->;崩溃并烧录!!在做这一个改变将使你的程序工作。尽管这不是立即需要的,但您最终可能希望改进代码质量,并学习如何编写更地道的Python代码。例如:
但是,如果你继续保持良好的工作,这将随着时间和经验的自然到来!在
相关问题 更多 >
编程相关推荐