错误信息:类型为“type”的参数不可迭代。

4

我刚开始学习Python,有一个简短的问题。

import sys

# Function creates a list [1,3,5..99]
def createlist():
    list = []
    for i in range(1, 100, 2):
        list.append(i)
    return(list)

# Function asks for an odd integer between 1..100
def numberinsert():
    n = int(input("Please enter an odd number between 1 and 100: "))
    if n in list:
        return(n)
    else:
        sys.exit("Number does not match requirements!")

def main():
    createlist()
    numberinsert()
这是我的错误提示:TypeError: argument of type 'type' is not iterable 我错在哪里了?

1
你的代码运行良好。错误在哪里? - Mayank Porwal
list 是一种类型。所以 if n in list 没有意义。你还在 createlist 中调用了一个局部变量 list。但是该局部变量在其他函数中不可见。 - khelwood
@MayankPorwal,不是的(if n in list:)。 - Austin
2个回答

阿里云服务器只需要99元/年,新老用户同享,点击查看详情
4

您正在试图从另一个函数numberinsert访问函数createlist的局部变量,这是不可能的(局部变量只能在定义它们的作用域内访问)。

我建议您按照以下方式更改代码:

import sys

# Function creates a list [1,3,5..99]
def createlist():
    odd_list = []
    for i in range(1, 100, 2):
        odd_list.append(i)
    return(odd_list)

# Function asks for an odd integer between 1..100
def numberinsert():
    num_list = createlist()
    n = int(input("Please enter an odd number between 1 and 100: "))
    if n in num_list:
        return(n)
    else:
        sys.exit("Number does not match requirements!")

def main():
    numberinsert()

顺便提一下,尽量避免用内置函数的名字来命名变量(比如像list)。

你也可以更紧凑地编写代码,在numberinsert函数中直接使用range(1, 100, 2)

# Function asks for an odd integer between 1..100
def numberinsert():
    n = int(input("Please enter an odd number between 1 and 100: "))
    if n in range(1, 100, 2):
        return(n)
    else:
        sys.exit("Number does not match requirements!")

def main():
    numberinsert()

1
你将列表命名为list。List是一种数据类型名称(我的意思是它是一个关键字)。list1或其他名称可以解决该错误。我将list1变量全局化。我不确定全局化部分是否正确,如果我错了请警告我。这是我的第一个回复。
import sys

# Function creates a list [1,3,5..99]


def createlist():
    global list1
    list1 = []
    for i in range(1, 100, 2):
        list1.append(i)
    return list1


# Function asks for an odd integer between 1..100


def numberinsert():
    n = int(input("Please enter an odd number between 1 and 100: "))
    if n in list1:
        return n
    else:
        sys.exit("Number does not match requirements!")


def main():
    createlist()
    numberinsert()


main()

我认为只需要全局化就可以了,不需要使用list1或其他东西。 - Cloaaker

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,