为什么类型' NoneType'在我的程序中显示不可迭代

时间:2014-12-05 13:17:37

标签: python python-2.7

我制作了这个刽子手计划,但它正在给予#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

2 个答案:

答案 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修改为您期望的那样,然后您将appendNone)的返回值分配给used。因此,在第二次迭代中,usedNone

只需使用append used.append(guess)更改两行。

您的代码还有其他问题,其中一个问题是您只需要猜一次(您可以将guess = raw_input("Guess a word\n")放入循环中)。