from random import random
def computer():
computer = 0
while computer < 21:
val = int(random()*10)+1
if (computer + val) > 21:
break
else:
computer += val
print "Ich habe ", computer, "!"
return computer
def player():
player = 0
loss = 0
while player < 21:
hval = int(random()*10)+1
print "Du hast ", hval, "...\nNoch eine mit y..."
if raw_input == "y":
player += hval
if player > 21:
print "Du hast verloren!"
loss = 1
break
else:
continue
else:
player += hval
break
return player
return loss
if __name__ == "__main__":
player()
if loss == 1: #This is where I get the NameError.
pass
else:
computer()
if computer > player:
print "Ich habe gewonnen!"
else:
print "Du hast gewonnen"
我在播放器()中返回了丢失,所以我不知道为什么我一直得到这个NameError。
答案 0 :(得分:3)
让我们清理那些混乱,看看所有错误是什么:
from random import random # tip, check out randint (the function in the random module)
def computer():
computer = 0
while computer < 21:
val = int(random()*10)+1 # please use some whitespace around operators
if (computer + val) > 21:
break
else:
computer += val
print "Ich habe ", computer, "!"
return computer
def player():
player = 0
loss = 0
while player < 21:
hval = int(random()*10)+1 # again, whitespace improves readability
print "Du hast ", hval, "...\nNoch eine mit y..."
if raw_input == "y": # raw_input is a function (hint you need to call the function)
# you're comparing the object against a string
# that will always yield false, therefore the player
# never gets the chance to enter another number
# this never gets executed
player += hval
if player > 21:
print "Du hast verloren!"
loss = 1
break
else:
continue
# always gets executed
else:
player += hval
break
return player # this returns the value of player
return loss # never reached, dead code, the return above has already left the function
if __name__ == "__main__":
player() # returns the integer, but doesn't assign it to any name
if loss == 1: # loss is not defined in this scope
pass
else:
computer() # again, this doesn't assign the returned value
if computer > player: # if this would get reached, it would fail yet again
# no name error this time, but you're comparing the function object
# against the player object, this will (at least in CPython)
# compare the memory addresses
print "Ich habe gewonnen!"
else:
print "Du hast gewonnen"
现在您知道所有错误,由您来解决它们:)
但我还要注意,你的缩进是一个 REAL 混乱,每个缩进从1个空间到16个。
特别是在Python中,缩进是语法的一个重要部分,这绝不是可以容忍的。
请阅读PEP8有关如何设置代码样式的信息。
答案 1 :(得分:1)
当你写return loss
时,它会返回损失的值,而不是变量。因此,调用范围中不存在名称loss
。
您需要将结果分配给局部变量(也称为丢失),如下所示:
loss = player()
答案 2 :(得分:0)
在你的脚本中没有定义丢失,发布整个脚本以便我们可以跟进它,可能是你试图引用你在player中使用的变量()
答案 3 :(得分:0)
您应该修改格式,但除此之外,如果您从loss
返回player()
,则不会将其保存在任何位置。
if __name__ == "__main__":
loss = player() # the loss returned by player is now within the local loss
if loss == 1: #This is where I get the NameError.
pass