python 函数定义,用于查找列表中的所有值是否为偶数或都不是

python function definition to find if all values in a list are even odd or neither

我在大学初学者的计算机科学课程中苦苦挣扎,只需要简单的家庭作业帮助。

现在,我们正在研究函数定义,我必须编写一个程序来读取整数列表,并输出该列表是否包含所有偶数、奇数或两者都不包含。输入以一个整数开始,表示列表中整数的数量。第一个整数不在列表中(它只是告诉列表的长度)。

我的程序必须定义并调用以下两个函数。 def is_list_even() returns 如果列表中的所有整数都是偶数则为真,否则为假。 def is_list_odd() returns 如果列表中的所有整数都是奇数则为真,否则为假。如果列表全部为偶数,我还必须打印 'all even'。如果列表是奇数,我必须打印 'all odd'。如果列表有两者,我必须打印 'not even or odd'.

我已经能够将我需要的所有整数放入列表中,但是定义是我正在努力解决的问题(格式化、返回它等)。我已经将到目前为止的代码粘贴到下面(该网站已经更改了它的格式)但是我的程序没有产生任何输出。任何帮助,将不胜感激。谢谢。

n = int(input())

my_list =[]

for i in range(n):

    num = int(input())

    my_list.append(num)

def IsListEven(my_list):

    for i in range(len(my_list)):

        if my_list[i] % 2 == 0:

            return True

        else:

            return False

def IsListOdd(my_list):

    for i in range(len(my_list)):

        if my_list[i] % 2 == 1:

            return True

        else:

            return False

def GetUserValues():

    if IsListOdd(my_list) == True:

        print("all odd")

    elif IsListEven(my_list) == True:

        print("all Even")

    else:

        print("not even or odd")

使用标志检查是否所有值都满足条件。 示例:

def IsListEven(my_list):

    answer = True

    for i in range(len(my_list)):

        if my_list[i] % 2 == 0: # As pointed in comment, use != for isEven

            answer = False
            break

    return answer

return 将立即中断循环,因此使用一个保持布尔变量,如:

def IsListEven(my_list):

    allEven = True

    for i in range(len(my_list)):

        if my_list[i] % 2 != 0:

            allEven = False
     
    return allEven

def IsListOdd(my_list):
    
    allOdd = True

    for i in range(len(my_list)):

        if my_list[i] % 2 != 1:

            allOdd = False

    return allOdd

def GetUserValues():

    if IsListOdd(my_list) == True:

        print("all odd")

    elif IsListEven(my_list) == True:

        print("all Even")

但是如果你使用all(),你的函数可以是一个衬里,一个检查是否都是奇数的例子

my_list = [1,3,5]
print(all(x % 2 == 1 for x in my_list))

存在一个主要的逻辑错误,以及一些次要的语法修正。

目前,IsListEven()IsListOdd() 函数在分别找到偶数或奇数元素时会立即 return。这导致列表被标记为“偶数”,即使只有第一个元素是偶数(反之亦然)。解决这个问题的一种方法是 return 发现相反的情况时为 false,否则为 true:

def IsListEven(my_list):
    for i in range(len(my_list)):
        if my_list[i] % 2 == 1:
            return False
    return True

def IsListOdd(my_list):
    for i in range(len(my_list)):
        if my_list[i] % 2 == 0:
            return False
    return True

更明确地说,这可以用 for-else 语句定义(尽管这里不是完全必要的):

def IsListEven(my_list):
    for i in range(len(my_list)):
        if my_list[i] % 2 == 0:
            return False
    else:
        return True

就语法而言,没有太多理由在 for 循环中使用列表索引。更简单的方法是直接访问数字:

def IsListEven(my_list):
    for i in my_list:
        if i % 2 == 1:
            return False
    else:
        return True

此外,可以简化最终检查,因为 returned 值是布尔值:

if IsListOdd(my_list):
    print("all odd")
elif IsListEven(my_list):
    print("all Even")
else:
    print("not even or odd")

我认为您的方向是正确的,您只需要稍微简化一下 for 循环中的逻辑即可:

def get_int_input(prompt: str) -> int:
    num = -1
    while True:
        try:
            num = int(input(prompt))
            break
        except ValueError:
            print("Error: Enter an integer, try again...")
    return num

def is_list_even(lst: list[int]) -> bool:
    for x in lst:
        if x % 2 != 0:
            return False
    return True

def is_list_odd(lst: list[int]) -> bool:
    for x in lst:
        if x % 2 == 0:
            return False
    return True

def main():
    num_elements = get_int_input("Enter the number of elements: ")

    my_list = []
    for i in range(num_elements):
        my_list.append(get_int_input(f"Enter element {i + 1}: "))

    print(my_list)

    if is_list_even(my_list):
        print("all even")
    elif is_list_odd(my_list):
        print("all odd")
    else:
        print("mix of evens and odds")

if __name__ == "__main__":
    main()

示例用法 1:

Enter the number of elements: 5
Enter element 1: 1
Enter element 2: 1
Enter element 3: 1
Enter element 4: 1
Enter element 5: 1
[1, 1, 1, 1, 1]
all odd

示例用法 2:

Enter the number of elements: 3
Enter element 1: 2
Enter element 2: 2
Enter element 3: 2
[2, 2, 2]
all even

用法示例 3:

Enter the number of elements: 4
Enter element 1: 1
Enter element 2: a
Error: Enter an integer, try again...
Enter element 2: 2
Enter element 3: 1
Enter element 4: 7
[1, 2, 1, 7]
mix of evens and odds