我用python写了摇滚纸剪刀游戏,我有一些我无法解决的错误。请帮忙。
import random
p1 = random.randint(0, 2)
def choosing():
p = int(input("Rock: 0; Paper: 1; scissor: 2:"))
if p < 0 or p > 2:
print("\nPlease enter valid value")
choosing()
else:
return int(p)
p2 = choosing()
print ("\n" + str(p1))
if p1 == p2:
print("DRAW!!")
elif p2 - p1 == 1 or p1 - p2 == 2:
print("YOU WON!!")
elif p1 - p2 == 1 or p2 - p1 == 2:
print("YOU LOSE!!")
错误说
> Traceback (most recent call last):
File "python", line 15, in <module>
TypeError: unsupported operand type(s) for -: 'NoneType' and 'int'
并且只有在输入无效值
后输入有效值时才会出现错误答案 0 :(得分:2)
当您再次致电choosing()
时,您不会返回其值,因此会返回None
。改变这一行:
choosing()
为:
return choosing()
在我看来,这会像循环一样好,而不是递归调用。
答案 1 :(得分:0)
在Python中,如果您没有显式返回值,它将返回默认值None
类型。您可以通过添加返回函数调用choosing()
:
def choosing():
p = int(input("Rock: 0; Paper: 1; scissor: 2:"))
if p < 0 or p > 2:
print("\nPlease enter valid value")
return choosing()
else:
return int(p)
另外,我同意@Kindall,这里的递归对于简单地要求输入来说似乎有些过分。
答案 2 :(得分:0)
将非数字输入转换为int
时发生错误p = int(input("Rock: 0; Paper: 1; scissor: 2:"))
可以使用try-catch处理。在selection()函数中使用递归我也很奇怪。我会做这个功能
def choosing():
while True:
try:
p = int(input("Rock: 0; Paper: 1; scissor: 2:"))
if p < 0 or p > 2:
print("\nPlease enter valid value")
else:
return p
except ValueError:
print("\nPlease enter valid value")