TypeError: argument van het type ‘NoneType’ kan niet worden herhaald

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 wordin op None, dus wordInputin getInputis None. Dit betekent dat:

if guess in wordInput:

is het equivalent van:

if guess in None:

en Noneis een instantie van NoneTypedie 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 wordInputgeen itereerbare -> het is van GeenType.

Als u wordInputafdrukt vóór de overtredende regel, ziet u dat wordInputNoneis.

Aangezien wordInputNoneis, betekent dit dat het argument dat aan de functie wordt doorgegeven ook Noneis. In dit geval word. Je wijst het resultaat van pickEasytoe aan word.

Het probleem is dat uw functie pickEasyniets teruggeeft. In Python retourneert een methode die niets retourneerde een NoneType.

Ik denk dat je een wordwilde 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

LEAVE A REPLY

Please enter your comment!
Please enter your name here

Other episodes