循环问题甚至计数

时间:2014-05-02 16:01:51

标签: python-2.7

我有一个初学者的问题。循环对我来说非常难以理解,所以我来寻求帮助。

我正在尝试创建一个函数来计算用户输入列表中偶数的数量,最后用负数表示列表的结尾。我知道我需要使用while循环,但是我无法弄清楚如何遍历输入列表的索引。这就是我到目前为止,有人可以帮我一把吗?

def find_even_count(numlist):
count = 0
numlist.split()
while numlist > 0:
    if numlist % 2 == 0:
        count += 1
return count        

numlist = raw_input("Please enter a list of numbers, with a negative at the end: ")
print find_even_count(numlist)

我使用拆分来分离列表的索引,但我知道我做错了什么。任何人都可以指出我做错了什么,或者指点一步一步解释这里要做什么? 非常感谢你们,我知道你们的技能水平可能还有更多,但感谢你的帮助!

2 个答案:

答案 0 :(得分:1)

你非常接近,只是几个更正:

def find_even_count(numlist):
    count = 0
    lst = numlist.split()
    for num in lst:
        if int(num) % 2 == 0:
            count += 1
    return count        

numlist = raw_input("Please enter a list of numbers, with a negative at the end: ")
print find_even_count(numlist)

我使用了for循环而不是while循环,将numlist.split()的结果存储到变量(lst)中,然后迭代了它。

答案 1 :(得分:1)

你有几个问题:

  1. split numlist,但不要将结果列表分配给任何内容。
  2. 然后,您尝试对numlist进行操作,这仍然是所有数字的字符串。
  3. 您永远不会尝试将任何内容转换为数字。
  4. 相反,请尝试:

    def find_even_count(numlist):
        count = 0
        for numstr in numlist.split(): # iterate over the list
            num = int(numstr) # convert each item to an integer
            if num < 0:
                break # stop when we hit a negative
            elif num % 2 == 0:
                count += 1 # increment count for even numbers
        return count # return the total
    

    或者,在一行中完成整个事情:

    def find_even_count(numlist):
        return sum(num % 2 for num in map(int, numlist.split()) if num > 0)
    

    (注意:如果用户试图通过在“最终”负数之后添加更多数字来欺骗您,例如使用numlist = "1 2 -1 3 4"

    如果你必须使用while循环(这不是最好的工具),它看起来像:

    def find_even_count(numlist):
        index = count = 0
        numlist = list(map(int, numlist.split()))
        while numlist[index] > 0:
            if numlist[index] % 2 == 0:
                count += 1
            index += 1
        return count