1

我必须创建两个函数。一个可以通过返回 t/f 来判断一个数是奇数还是偶数,另一个将调用第一个函数然后返回有多少偶数。

到目前为止,这是我的代码:

    Even = [0,2,4,6,8]
    IsEvenInput = int(input("Please enter a number: "))

    def IsEvenDigit(a):
        if a in Even:
            return True
        else:
            return False

    y = IsEvenDigit(IsEvenInput)
    print(y)


    def CountEven(b):
        count = 0
        for a in b:
            if IsEvenDigit(a):
                count+=1
        return count
    d = input("Please enter more than one number: ")
    y = CountEven(d)
    print(y)

这一直输出 0 并且实际上并不计数。我现在做错了什么?

4

5 回答 5

1
d = input("Please enter more than one number: ")

这将返回一串数字,可能用空格分隔。您需要split()将字符串转换为文本数字序列,然后将其转换为整数。


使用模数/余数运算符确定数字是奇数还是偶数的一般方法是%:如果除以后的余数2是,0则该数是偶数。

于 2013-08-08T08:26:57.400 回答
0

一个可能的解决方案:

def is_even(n):
    return not n % 2

def count_even(numbers)
    return sum(map(is_even, numbers))

nums = input("Enter numbers separated by spaces: ")
nums = map(int, nums.split())
print(count_even(nums))
于 2013-08-08T08:52:44.477 回答
0

这是另一种方法:

def is_even(number):
    return number % 2 == 0

def even_count(numbers_list):
    count = 0

    for number in numbers_list:
        if is_even(number): count += 1

    return count

raw_numbers = input("Please enter more than one number: ")
numbers_list = [int(i) for i in raw_numbers.split()]

count = even_count(numbers_list)
print(count)

这也将处理所有其他数字。

于 2013-08-08T08:37:12.470 回答
0

因此,通过在函数 CountEven 范围之外调用 CountEvent(d),您并没有使用递归,您只是在定义函数后调用该函数。

尝试减少函数之外的代码量。

    #Start by declaring your functions:
    def isEven(n):
        return n % 2 == 0

    def countEven():
        count = 0
        string_of_numbers = input("Please enter numbers separated by spaces: ")
        list_of_number_characters = string_of_numbers.split(' ')
        for number in list_of_number_characters:
            number_as_int = int(number)
            if isEven(number_as_int) == True:
                count = count + 1
        print("There were " + str(count) + " even numbers found.")


    countEven() #Call the function that runs your program
于 2013-08-08T08:41:32.373 回答
0

您正在计算整数 - [0, 2, 4, 6, 8] 等 - 是否是字符串中的字符 - “0”、“2”、“4”、“6”、“8”等。目前, IsEvenDigit(a) 永远不会为真,因为字符串中的字符不会出现在偶数列表中,所以 if 语句下面的代码永远不会被执行。您需要IsEvenDigit(int(a))在 CountEven 函数中。

在另一个主题上,您帖子的评论者建议阅读 PEP 8。您的代码实际上格式很好,它只是在 Python 中,CamelCase 仅用于类,而 words_seperated_by_underscores 用于变量和函数名称。

或者如果你想要简洁和不可读,一些代码:

main = lambda: sum(map(lambda x: int(x) % 2 == 0, (i for i in input("Enter a number: "))))
main()

它确实定义了 2 个(匿名)函数!

于 2013-08-08T08:24:39.530 回答