我是python的新手。我尝试创建剪刀石头布游戏,但收到错误:
TypeError:-:“ NoneType”和不支持的操作数类型 'NoneType'
在线: dif = a-b
我尝试在Google和Stackoverflow上搜索解决方案,发现的几乎所有答案都表明它必须要更改打印才能返回。我尝试在多个地方这样做,但最终出现了更多错误,因此我要问这个问题。
有人知道如何解决此特定代码的错误吗? 谢谢!
代码:
while True:
dictionary = {"steen": 1, "papier": 2, "schaar": 3}
p1 = raw_input("Maak een keuze: steen, papier of schaar:")
p2 = raw_input("Maak een keuze: steen, papier of schaar:")
a = dictionary.get(p1)
b = dictionary.get(p2)
dif = a - b
if dif in [1, -2]:
print ("Speler 1 heeft gewonnen")
if str(input("Wilt u nog een keer spelen, ja of nee?")) == "Ja":
continue
else:
print ("Game over")
break
elif dif in [-1, 2]:
print ("Speler 2 heeft gewonnen")
if str(input("Wilt u nog een keer spelem, ja of nee?")) == "Ja":
continue
else:
print ("Game over")
break
else:
print ("Gelijkspel")
if str(input("Wilt u nog een keer spelen, ja of nee?")) == "Ja":
continue
else:
print ("Game over")
break
答案 0 :(得分:1)
第a = dictionary.get(p1)
行可能返回None。或之后的那一行。
我建议使用调试器,并在出现故障的线路上暂停。
答案 1 :(得分:0)
因此,我尝试了更多操作,并且我想知道为什么会收到该错误。 我想我在答案前留出一个空格作为输入。因此,我没有回答“ rock”,而是回答了“ rock”。因此,由于字典中没有“ rock”,因此没有分配给输入的整数值,这使dif行给了我一个错误。
对于可能遇到相同问题的任何人,这就是我所做的,因此,如果输入略有偏离,我不会收到错误提示(现在它将告诉用户输入不正确,他们应该尝试其他):
while True:
dictionary = {"steen": 1, "papier": 2, "schaar": 3}
p1 = raw_input("Speler 1, maak een keuze: steen, papier of schaar: ")
p2 = raw_input("Speler 2, maak een keuze: steen, papier of schaar: ")
a = dictionary.get(p1)
b = dictionary.get(p2)
antwOpties = ["steen", "papier", "schaar"]
if p1 not in antwOpties or p2 not in antwOpties:
print ("U heeft een ongeldig antwoord ingevuld, kies schaar, steen of papier")
continue
dif = a - b
if dif in [1, -2]:
print ("Speler 1 heeft gewonnen")
if str(input("Wilt u nog een keer spelen, ja of nee?")) == "Ja":
continue
else:
print ("Game over")
break
elif dif in [-1, 2]:
print ("Speler 2 heeft gewonnen")
if raw_input("Wilt u nog een keer spelem, ja of nee?") == "Ja":
continue
else:
print ("Game over")
break
else:
print ("Gelijkspel")
if raw_input("Wilt u nog een keer spelen, ja of nee?") == "Ja":
continue
else:
print ("Game over")
break
因此,首先,我创建了一个包含可能答案的列表,称为antwOpties。然后,我创建了一段代码,用于检查播放器1和2的输入是否在该列表中。如果不是这种情况,它将打印出来并要求其他输入,然后由于“ continue”而返回到循环的开头。最后,我将“ dif = a-b”移到该代码段的下方,该代码段检查输入是否有效。我这样做是为了避免输入无效(因为如果输入在答案中并因此对应于整数,那么它只会经过“继续”)。
答案 2 :(得分:0)
代码实际上在正确的输入下工作。使用输入[“ steen,” papier“,” schaar“]
中的任何人进行输入