问题
这里有几个问题:您永远不会在while循环的头部定义size。在
您将range内置类用作一个没有意义的整数值。在
您永远不会在函数中使用alist。在
您不需要在while中使用for循环,因为您并不是要为1到{}之间的每个数找到偶数的数量,而是要寻找alist中的所有偶数(大概是这样)。在
下面是上面的修复方法:def count_evens_while(alist):
evenIntegers = 0
size = 0
while size < len(alist):
if alist[size] % 2 == 0:
evenIntegers = evenIntegers + 1
size = size + 1
print(evenIntegers)
在while循环的第一部分中:
^{pr2}$
我们告诉Python每次循环时都要比较size的值与{}的长度。然后,我们在循环中每次递增rmenet size:size = size + 1
这基本上意味着循环的每次迭代,size的值将对应于alist的索引。当size达到alist的最后一个索引时,循环将停止。下面是一个直观的例子来帮助解释。假设alist是[1, 2, 3],并且size最初等于0:First iteration
alist = [1, 2, 3]
^
|
+--- size = 0
Second iteration
alist = [1, 2, 3]
^
|
+--- size = 1
Third (and last) iteration
alist = [1, 2, 3]
^
|
+--- size = 2
下一个重要部分:alist[size] % 2 == 0
意味着我们正在索引列表。索引列表时,使用整数从整数对应的位置获取值。在本例中,alist[size]意味着我们在size值的位置得到整数的值。最后一部分:% 2 == 0
意味着我们正在测试alist中位置size处的整数是否为偶数。如果是,我们增加偶数的计数,否则我们什么也不做。在
改进
您可以对当前的解决方案进行一些改进使用for循环而不是while循环。这将是更自然的解决方案。在
你不需要做evenIntegers = evenIntegers + 1。您可以使用递增运算符+=。在
以下是应用于代码的上述改进:def count_evens_while(alist):
evenIntegers = 0
for element in alist:
if element % 2 == 0:
evenIntegers += 1
print(evenIntegers)
不过,这还可以改进得更多!您不需要for循环。您可以使用一个generator comprehension和^{}内置函数来计算alist中所有偶数的元素:def count_evens_while(alist):
return sum(1 for el in alist if el % 2)
文体改进
最后一件事我会批评你的代码是使用更好的变量名。使用准确描述变量的名称代表。代表例如,变量myList最好重命名为user_input_numbers。在