簡體   English   中英

TypeError:“函數”類型的參數不可迭代

[英]TypeError: argument of type 'function' is not iterable

錯誤:

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

問題是在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語句,所以發生了迭代。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM