Ik ben een Galgje-spel aan het maken in Python. In het spel heeft één python-bestand een functie die een willekeurige reeks uit een array selecteert en opslaat in een variabele. Die variabele wordt dan doorgegeven aan een functie in een ander bestand. Die functie slaat een gok van een gebruiker op als een tekenreeks in een variabele en controleert vervolgens of die gok in het woord zit. Wanneer ik echter een letter typ en op enter druk, krijg ik de foutmelding in de titel van deze vraag. Zodat je het weet, ik gebruik Python 2.7. Hier is de code voor de functie die een woord nodig heeft:
import random
easyWords = ["car", "dog", "apple", "door", "drum"]
mediumWords = ["airplane", "monkey", "bananana", "window", "guitar"]
hardWords = ["motorcycle", "chuckwalla", "strawberry", "insulation", "didgeridoo"]
wordCount = []
#is called if the player chooses an easy game.
#The words in the array it chooses are the shortest.
#the following three functions are the ones that
#choose the word randomly from their respective arrays.
def pickEasy():
word = random.choice(easyWords)
word = str(word)
for i in range(1, len(word) + 1):
wordCount.append("_")
#is called when the player chooses a medium game.
def pickMedium():
word = random.choice(mediumWords)
for i in range(1, len(word) + 1):
wordCount.append("_")
#is called when the player chooses a hard game.
def pickHard():
word = random.choice(hardWords)
for i in range(1, len(word) + 1):
wordCount.append("_")
Hier is nu de code die de gebruiker laat raden en bepaalt of het al dan niet in het woord staat dat voor het spel is gekozen (Let niet op de variabele wordCount. Ook is “woorden” de naam van het bestand met de code hierboven.)):
from words import *
from art import *
def gamePlay(difficulty):
if difficulty == 1:
word = pickEasy()
print start
print wordCount
getInput(word)
elif difficulty == 2:
word = pickMedium()
print start
print wordCount
elif difficulty == 3:
word = pickHard()
print start
print wordCount
def getInput(wordInput):
wrong = 0
guess = raw_input("Type a letter to see if it is in the word: \n").lower()
if guess in wordInput:
print "letter is in word"
else:
print "letter is not in word"
Tot nu toe heb ik geprobeerd de variabele “guess” in de gamePlay-functie te converteren naar een tekenreeks met str(), ik heb geprobeerd deze in kleine letters te maken met .lower(), en ik heb soortgelijke dingen gedaan in het woordenbestand . Hier is de volledige foutmelding die ik krijg als ik dit uitvoer:
File "main.py", line 42, in <module>
main()
File "main.py", line 32, in main
diff()
File "main.py", line 17, in diff
gamePlay(difficulty)
File "/Users/Nathan/Desktop/Hangman/gameplay.py", line 9, in gamePlay
getInput(word)
File "/Users/Nathan/Desktop/Hangman/gameplay.py", line 25, in getInput
if guess in wordInput:
De “main.py” die je ziet is een ander python-bestand dat ik heb geschreven. Als je de anderen wilt zien, laat het me weten. Ik heb echter het gevoel dat degene die ik heb laten zien de enige belangrijke zijn. Bedankt voor je tijd! Laat het me weten als ik belangrijke details heb weggelaten.
Antwoord 1, autoriteit 100%
Als een functie niets teruggeeft, bijvoorbeeld:
def test():
pass
het heeft een impliciete retourwaarde van None
.
Dus, aangezien uw pick*
-methoden niets opleveren, bijvoorbeeld:
def pickEasy():
word = random.choice(easyWords)
word = str(word)
for i in range(1, len(word) + 1):
wordCount.append("_")
de regels die ze noemen, bijvoorbeeld:
word = pickEasy()
stel word
in op None
, dus wordInput
in getInput
is None
. Dit betekent dat:
if guess in wordInput:
is het equivalent van:
if guess in None:
en None
is een instantie van NoneType
die geen iterator-/iteratiefunctionaliteit biedt, dus je krijgt die typefout.
De oplossing is om het retourtype toe te voegen:
def pickEasy():
word = random.choice(easyWords)
word = str(word)
for i in range(1, len(word) + 1):
wordCount.append("_")
return word
Antwoord 2, autoriteit 4%
De python-fout zegt dat wordInput
geen itereerbare -> het is van GeenType.
Als u wordInput
afdrukt vóór de overtredende regel, ziet u dat wordInput
None
is.
Aangezien wordInput
None
is, betekent dit dat het argument dat aan de functie wordt doorgegeven ook None
is. In dit geval word
. Je wijst het resultaat van pickEasy
toe aan word
.
Het probleem is dat uw functie pickEasy
niets teruggeeft. In Python retourneert een methode die niets retourneerde een NoneType.
Ik denk dat je een word
wilde teruggeven, dus dit is voldoende:
def pickEasy():
word = random.choice(easyWords)
word = str(word)
for i in range(1, len(word) + 1):
wordCount.append("_")
return word