【问题标题】:why argument of type 'NoneType' is not iterable is shown in my program [duplicate]为什么“NoneType”类型的参数不可迭代显示在我的程序中[重复]
【发布时间】:2025-11-30 00:15:02
【问题描述】:

我制作了这个刽子手程序,但每当我运行它时它都会给出“nonetype”错误 程序运行—— 每当我输入一个单词时,输出是这样的 挂人游戏 猜一个字 一个 ----- 一个字你猜对了

 -----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

【问题讨论】:

    标签: python python-2.7


    【解决方案1】:

    你不能这样做

    used = used.append(guess)
    

    append 函数返回None,它修改了used。因此,您基本上是在右侧附加guess,然后将None 分配给used。因此,while 循环的下一次迭代您将尝试迭代 None,这就是错误告诉您的内容。

    你只需要说

    used.append(guess)
    

    或者

    used += [guess]
    

    【讨论】:

    • 仍然报错
    • @ShubhamSharma 您是否修复了代码中出现的两次 append? (对我有用)
    • 是的,我这样做了,但是那个破折号循环 for i in range(len(correct)): if guess==correct[i]: new=new+guess else: new=new+so_far so_far=新出现的问题
    • @ShubhamSharma 如果不再是同一个问题,那么我认为您应该提出一个新问题(但请确保您在询问之前确实尝试过调试代码)。
    【解决方案2】:

    list 的成员函数append 就地修改列表,不返回任何内容。

    在第一次迭代中,used 是一个空列表,但是当您到达used=used.append(guess) 行时,used 首先按照您的预期被append 修改,然后 em> 您将append(即None)的返回值分配给used。因此,在第二次迭代中,usedNone

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

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

    【讨论】:

      最近更新 更多