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



我刚开始学习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。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()

最新更新