2014-09-27 123 views
1

错误:类型错误:类型的参数“功能”不是可迭代

Traceback (most recent call last): 
    File "ex36.py", line 100, in <module> 
    start() 
    File "ex36.py", line 16, in start 
    giant() 
    File "ex36.py", line 59, in giant 
    dead() 
    File "ex36.py", line 70, in dead 
    try_again()  
    File "ex36.py", line 85, in try_again 
    if "y" in user_input or "yes" in user_input: 
TypeError: argument of type 'function' is not iterable 

这是代码块中得到的错误:

def try_again(): 
    print "Would you like to try again?" 
    user_input = uput 
    if "y" in user_input or "yes" in user_input: 
     start() 
    elif "n" in user_input or "no" in user_input: 
     sys.exit() 
    else: 
     try_again() 

我想我得到,因为它的误差是递归函数,但我通过游戏使用它们,直到我添加了try_again()。

下面是代码的情况下,其余它可以帮助:

# Role Playing Game I made to practice my Python skills! 
import sys 

def uput(): # get user input and make it all lowercase 
    return raw_input("> ").lower() 

def start(): #Starts the game 
    print "You are in room with a left and right door." 
    print "Which do you choose?" 
    user_input = uput() 
    if user_input == "left": 
     print "You open the door..." 
     lavapit() 
    elif user_input == "right": 
     print "You open the door..." 
     giant() 
    else: 
     print "Try again." + "\n" * 3 
     start() 

def lavapit(): 
    print "Your on the edge of valcano." 
    mountain(10) 
    print "One wrong step and you fall into the volcano!" 
    print "You can walk along the edge to the other side and take the path down to the base" 
    print "Or return to the room!" 
    user_input = uput() 
    if "walk" in user_input or "along" in user_input or "edge" in user_input: 
     print "You stumble." 
     print "And fall off into the lava!" 
     dead() 
    elif "return" in user_input or "door" in user_input or "go back" in user_input: 
     start() 
    else: 
     print "Try again." + "\n" * 3 
     lavapit() 

def giant(): 
    print "You enter a dark musty room." 
    print "With very high ceilings." 
    print "Then you hear... heavy breathing." 
    print "Do you walk slowly and quitely to your right or left." 

    right = 0 
    left = 0 
    while right <= 4 or left <= 5: 
     user_input = uput() 
     if "right" in user_input and right < 3: 
      print "You edge slowly to the right." 
      right += 1 
      left -= 1 
     elif "left" in user_input and left < 4: 
      print "You edge closer to the left." 
      right -= 1 
      left += 1 
     elif "right" in user_input and right > 2: 
      print "You bump into the giant and get eaten alive." 
      print "The giant says, 'Yum'." 
      dead() 
     elif "left" in user_input and left > 3: 
      print "You reach a dark hole in the wall the size of giant mouse." 
      print "Do you enter it?" 
      hole() 
     else: 
      print "Try again." + "\n" * 3 
      giant() 
def dead(): 
    print "-" * 30 
    print "Sorry you loose!" 
    try_again()  

def hole(): 
    user_input = uput() 
    if "yes" in user_input or "y" in user_input: 
     print "Congratulations! You won nothing!" 
     try_again() 
    elif "no" in user_input or "n" in user_input: 
     return 
    else: 
     hole() 

def try_again(): 
    print "Would you like to try again?" 
    user_input = uput 
    if "y" in user_input or "yes" in user_input: 
     start() 
    elif "n" in user_input or "no" in user_input: 
     sys.exit() 
    else: 
     try_again() 


def mountain(x): 
    i = 2 
    while x > 0: 
     print " " * x + "@" * i 
     x -= 1 
     i += 2 

start() 

回答

1

的问题是,在try_again你不调用uput的函数体的第二行,你给它分配到user_input。你忘了括号,如果你改变它:

def try_again(): 
    print "Would you like to try again?" 
    user_input = uput() 
    if "y" in user_input or "yes" in user_input: 
     start() 
    elif "n" in user_input or "no" in user_input: 
     sys.exit() 
    else: 
     try_again() 

它会工作。

读回溯:

TypeError: argument of type 'function' is not iterable 

的消息告诉你,你尝试了user_input做一个迭代,迭代发生,因为in声明。

+0

谢谢。现在我感到很蠢,那是一个非常简单的错误。感谢您的有用的职位。你的男人拉斐尔! – Grouchy 2014-09-27 15:45:12

+0

@ user3583194嘿,简单的错误发生!这完全是关于阅读有时不明显的回溯。 – 2014-09-27 22:54:11

相关问题