我制作了这个刽子手计划,但它正在给予#nonetype'每当我运行它时都会出错 程序运行 - 每当我输入一个单词时,输出都是这样的 Hang Man游戏 猜一个字 一个 ----- 你正确地说了一个字
-----a---------------
Traceback (most recent call last):
File "F:/coding/python/python programming for absolute beginners/chapter 5/Hang Man Game.py", line 129, in <module>
if guess in used:
TypeError: argument of type 'NoneType' is not iterable
代码:
print("\t\t\tHang Man Game")
import random
set=("happy","australia","punjab","criclet","tennis")
choose=random.choice(set)
correct=choose
HANGMAN=('''
_______
|
|
|
|
|
|
|
|
|
|
|
___
''',
'''
______________
| |
|
|
|
|
|
|
|
|
|
___
''',
'''
______________
| |
| O
|
|
|
|
|
|
|
|
___
''',
'''
______________
| |
| O
| |
| |
| |
| |
|
|
|
|
___
''',
'''
______________
| |
| O
| |
| ---|
| |
| |
|
|
|
|
___
''',
'''
______________
| |
| O
| |
| ---|---
| |
| |
|
|
|
|
___
''',
'''
______________
| |
| O
| |
| ---|---
| |
| |
| /
| /
| /
|
___
''',
'''
______________
| |
| O
| |
| ---|---
| |
| |
| / \
| / \
| / \
|
___
'''
)
MAX_WRONG=(len(HANGMAN)-1)
wrong=0
new=""
used=[]
so_far="-"*len(correct)
guess=raw_input("Guess a word\n")
while(so_far!=correct and wrong<MAX_WRONG):
print(so_far)
if guess in used:
print("you have already used it")
else:
if guess in correct:
print("You gussed one word correctly\n")
used.append(guess)
for i in range(len(correct)):
if guess==correct[i]:
new=new+guess
else:
new=new+so_far
so_far=new
else:
used=used.append(guess)
wrong=wrong+1
答案 0 :(得分:4)
你不能这样做
used = used.append(guess)
append
函数返回None
,它会修改used
。因此,您基本上会在右侧附加guess
,但随后会将None
分配给used
。因此,您尝试迭代while
的{{1}}循环的下一次迭代,这就是错误告诉您的内容。
你只需要说
None
或者
used.append(guess)
答案 1 :(得分:0)
append
的成员函数list
修改了列表并且没有返回任何内容。
在第一次迭代时,used
是一个空列表,但是当您到达used=used.append(guess)
行时,used
首先被append
修改为您期望的那样,然后您将append
(None
)的返回值分配给used
。因此,在第二次迭代中,used
为None
。
只需使用append
used.append(guess)
更改两行。
您的代码还有其他问题,其中一个问题是您只需要猜一次(您可以将guess = raw_input("Guess a word\n")
放入循环中)。