使用while循环来计算用户输入列表的偶数整数?

时间:2017-07-17 04:43:50

标签: python

myList = []


size = int(input("How many integers do you want in your list? "))
for list in range(size):
    element = int(input("Enter an integer to add to your list: "))
    myList.append(element)
print(myList)

#a function that keeps count of all even integers using while loop
def count_evens_while(alist):
    evenIntegers = 0
    while range <= size:
        for element in range(size):
            if element % 2 == 0:
                evenIntegers = evenIntegers + 1
    print(evenIntegers)

这是我到目前为止所拥有的。我无法弄清楚我需要做什么! (我是初学者,如果这个问题看起来如此简单/容易解决,那就很抱歉)

4 个答案:

答案 0 :(得分:1)

def count_evens_while(alist):
    evenIntegers = 0
    idx = 0
    while idx < len(alist):
        if alist[idx] % 2 == 0:
            evenIntegers = evenIntegers + 1
        idx += 1
    print(evenIntegers)

使用for循环会更简单:

def count_evens_while(alist):
    evenIntegers = 0
    for el in alist:
        if el % 2 == 0:
            evenIntegers = evenIntegers + 1
    print(evenIntegers)

使用一些列表理解甚至更简单:

def count_evens_while(alist):
    evenIntegers = sum(1 for x in alist if (x%2 == 0))
    print(evenIntegers)

答案 1 :(得分:0)

您根本不需要while循环:

myList = []

size = int(input("How many integers do you want in your list? "))
for list in range(size):
    element = int(input("Enter an integer to add to your list: "))
    myList.append(element)
print(myList)

#a function that keeps count of all even integers using while loop
def count_evens_while(alist):
    evenIntegers = 0
    for element in alist:
        if element % 2 == 0:
            evenIntegers = evenIntegers + 1
    return evenIntegers

print(count_evens_while(myList))

如果您需要提前停止for循环,可以使用break语句来摆脱循环。否则,一旦到达列表末尾,它将自动停止。它不需要手动给出结束条件。

答案 2 :(得分:0)

这与你的节目非常不同,但我希望能用它教你一些东西......首先,如果你需要的只是&#34;继续计算&#34;你真的不必将整数自己保存在列表中。这意味着你真正需要的就是这样:

count = 0
while True:
    element = int(input("Enter an integer to add to your list: "))
    if element % 2 == 0:
        count += 1 # which is the same as count = count + 1
    elif element == 9999:
        break # user could enter 9999 to exit the loop
    print('I have counted ' + str(count) + ' even numbers so far')

我希望这只是为了向您展示您不必使简单的事情复杂化

答案 3 :(得分:0)

问题

这里有几个问题:

  • 您永远不会在size循环的头部定义while
  • 您正在使用range内置类作为整数值,这是没有意义的。
  • 您永远不会在您的函数中使用alist
  • for中不需要while循环,因为您并未尝试在1到{{1}之间找到每个数字的偶数},你试图找到element中的所有偶数(大概)。

以上修复内容如下:

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

我们告诉Python每次循环时将size < len(alist) 的值解析为size的长度。然后,我们每次在循环中将alist加1:

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表示我们在值alist[size]的位置获取整数的值。最后一部分:

size

意味着我们正在测试% 2 == 0 中位置size处的整数是否为偶数。如果是,我们增加偶数的数量,如果不是,我们什么都不做。

改进

您可以对当前的解决方案进行一些改进

  • 使用alist循环代替for循环。这将是更自然的解决方案。
  • 您不需要while。您可以使用增量运算符evenIntegers = evenIntegers + 1代替。

以下是适用于您的代码的上述改进:

+=

然而,这可以进一步改善!您不需要def count_evens_while(alist): evenIntegers = 0 for element in alist: if element % 2 == 0: evenIntegers += 1 print(evenIntegers) 循环。您可以使用generator comprehension结合sum()内置函数来计算for中偶数的所有元素:

alist

文体改进

我要批评你的代码的最后一件事是使用更好的变量名。使用准确描述变量代表内容的名称。例如,变量def count_evens_while(alist): return sum(1 for el in alist if el % 2) 最好重命名为myList