错误信息:'type' 类型的参数不可迭代

Error message: argument of type 'type' is not iterable

我刚开始 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

我做错了什么?

您正试图从另一个函数 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()

您将列表命名为列表。 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()