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