python函数定义来查找列表中的所有值是不是都是奇数或都不是[关闭]

Posted

技术标签:

【中文标题】python函数定义来查找列表中的所有值是不是都是奇数或都不是[关闭]【英文标题】:python function definition to find if all values in a list are even odd or neither [closed]python函数定义来查找列表中的所有值是否都是奇数或都不是[关闭] 【发布时间】:2021-02-27 07:52:27 【问题描述】:

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

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

我的程序必须定义并调用以下两个函数。 def is_list_even() 如果列表中的所有整数都是偶数,则返回 true,否则返回 false。 def is_list_odd() 如果列表中的所有整数都是奇数,则返回 true,否则返回 false。如果列表全部是偶数,我还必须打印“全部偶数”。如果列表是奇数,我必须打印“全奇数”。如果列表两者都有,我必须打印 '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")

【问题讨论】:

return立即结束一个函数。您的 for 循环中有 return 保证它们永远不会遍历所有值。例如,IsListEven 开始很有希望,但随后在 for 循环的第一次迭代中返回 True 或 False,无论您打算查看多少项目。 您当前的代码有什么问题? 可以使用内置的all函数来检查所有数字是否为evenodd。例如,确定列表是否仅包含 odd 数字,可以这样做:all(map(lambda x: x%2, my_list)) 我需要程序生成输出“全偶数”、“全奇数”或“非偶数或奇数”。当我运行它时,不会产生任何输出。它没有向我显示任何错误。我将尝试绕过 return 语句,但对如何做到这一点有点困惑。 (我很抱歉,我的计算机科学老师并不擅长向全班解释事情。) 你有调试器吗?当您看到您的代码实际在做什么时,这是一个简单的问题。 【参考方案1】:

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

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 False,最后执行return True @Brian 不,这里它必须返回布尔标志,但最好是使用all() 这里的逻辑不对,应该是if my_list[i] % 2 != 0 @WasifHasan 不需要标志。查看接受的答案。 @Brian 接受的答案是我的!【参考方案2】:

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))

【讨论】:

最后一行可以简化为print(all(x % 2 == 1 for x in my_list))【参考方案3】:

有一个重大的逻辑错误,以及一些小的语法修复。

目前,IsListEven()IsListOdd() 函数将分别在找到偶数或奇数元素时立即返回。这会导致列表被标记为“偶数”,即使只有第一个元素是偶数(反之亦然)。解决此问题的一种方法是在找到相反的情况时返回 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

此外,由于返回值是布尔值,因此可以简化最终检查:

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

【讨论】:

【参考方案4】:

我认为你走在正确的轨道上,你只需要稍微简化 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

【讨论】:

以上是关于python函数定义来查找列表中的所有值是不是都是奇数或都不是[关闭]的主要内容,如果未能解决你的问题,请参考以下文章

测试列表中的所有值是不是都是唯一的

如果列表中的所有值都是 40,则 Python 返回成功 [重复]

Python二分搜索类函数,用于查找排序列表中大于特定值的第一个数字

在 python 中编写数值查找函数

查找:哈希表

Python Pandas 查找所有值为 NaN 的所有行