我正在用Python制作一个Hangman游戏。在游戏中,一个python文件具有从数组中选择随机字符串并将其存储在变量中的函数。然后将该变量传递给另一个文件中的函数。该函数将用户猜测存储为变量中的字符串,然后检查该猜测是否在单词中。但是,每当我输入一个字母并按回车键时,我会在此问题的标题中收到错误。你知道,我正在使用Python 2.7。这是一个单词的函数代码:
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("_")
现在这里是用户猜测的代码,并确定它是否在为游戏选择的单词中(不要注意wordCount变量。另外,“words”是带有代码的文件的名称上文)):
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"
到目前为止,我已经尝试将gamePlay函数中的“guess”变量转换为带有str()的字符串,我尝试使用.lower()将其设置为小写,并且我在单词文件中做了类似的事情。这是我运行时得到的完整错误:
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:
你看到的“main.py”是我写的另一个python文件。如果你想看到其他人让我知道。但是,我觉得我展示的是唯一重要的。感谢您的时间!如果我遗漏了任何重要细节,请告诉我。
答案 0 :(得分:15)
如果函数没有返回任何内容,例如:
def test():
pass
它的隐含返回值为None
。
因此,由于您的pick*
方法不返回任何内容,例如:
def pickEasy():
word = random.choice(easyWords)
word = str(word)
for i in range(1, len(word) + 1):
wordCount.append("_")
调用它们的行,例如:
word = pickEasy()
将word
设置为None
,因此wordInput
中的getInput
为None
。这意味着:
if guess in wordInput:
相当于:
if guess in None:
和None
是NoneType
的一个实例,它不提供迭代器/迭代功能,因此您会得到该类型错误。
修复是添加返回类型:
def pickEasy():
word = random.choice(easyWords)
word = str(word)
for i in range(1, len(word) + 1):
wordCount.append("_")
return word
答案 1 :(得分:0)
python错误表明wordInput
不是可迭代的 - &gt;它是NoneType。
如果您在违规行前打印wordInput
,则会看到wordInput
为None
。
由于wordInput
是None
,这意味着传递给函数的参数也是None
。在这种情况下word
。您将pickEasy
的结果分配给word
。
问题是你的pickEasy
函数没有返回任何内容。在Python中,一个没有返回任何内容的方法会返回一个NoneType。
我认为您想要返回word
,这样就足够了:
def pickEasy():
word = random.choice(easyWords)
word = str(word)
for i in range(1, len(word) + 1):
wordCount.append("_")
return word