如果数字可以被2整除,然后打印出该列表,我试图将值(x
)附加到列表中。看起来很简单。以下运行但返回None
:
x = []
def test():
while x in range(0,100):
if x % 2 == 0:
x.append()
print(test())
答案 0 :(得分:4)
使用for
来迭代范围 - 而不是while
。
你对x
有不明确的含义 - 作为迭代变量和列表。
您需要将值传递给append
。
您需要返回一个值,以便通过print语句打印 - 否则None
是默认值。
修正:
x = []
def test():
for i in range(0,100):
if i % 2 == 0:
x.append(i)
return x
print(test())
其他说明:
您只能使用一次。对test
的下一次调用会返回两倍大小的列表,因为x
是一个全局变量。我相信这是无意的,可以通过将x = []
置于函数内来解决。
像[x for x in range(100) if x % 2 == 0]
这样的列表理解会好得多。
答案 1 :(得分:2)
您的代码有几个问题:
x
和您的迭代变量x
命名为。test
返回列表。而不是append
到全局列表,在test
中创建一个本地列表并返回 列表。while
循环时,您正在使用for
循环。完成上述更改后,您的代码看起来像:
def test():
even_numbers = []
for number in range(0, 100):
if number % 2 == 0:
even_numbers.append(number)
return even_numbers
print(test())
请注意,有更好的方法可以做到这一点。在这种情况下,列表理解是更好的选择。列表推导可用于避免构建值列表的常见模式 - 例如您的情况:
def test():
return [n for n in range(0, 100) if n % 2 == 0]
print(test())
答案 2 :(得分:2)
通常你应该将变量传递给函数并从函数返回它而不是依赖于全局变量:
def test(x):
...
return x
但while x in range(0, 100)
无法正常工作,因为它会检查x
对象中是否包含range
(空列表)。但是range
只包含数字,因此while
循环体永远不会执行。所以你可以使用for
- 循环代替:
def test(x):
for i in range(0, 100):
if i % 2 == 0:
x.append(i)
return x
但您也可以使用range
支持step
的事实,并使用if
删除step=2
:
def test(x):
for i in range(0, 100, 2):
x.append(i)
return x
此时你甚至可以extend
(追加一个可迭代的)列表:
def test(x):
x.extend(range(0, 100, 2))
return x
答案 3 :(得分:1)
您还可以使用2的步骤来避免测试:
x = []
def test():
for i in range(0,100,2):
x.append(i)
return x
或使用列表理解:
x = []
def test():
x = [i for i in range(0,100,2)]
return x
或者将自己的范围用作列表:
x = []
def test()
x = list(range(0,100,2))
return x
答案 4 :(得分:0)
为简单起见,重命名内部x变量。使用x.append(n)而不是x.append()。最后,打印变量而不是方法。
答案 5 :(得分:0)
您应该更改列表变量或迭代变量(while循环中的x)。和append函数的工作方式如下list.append(value)
。