python 函数定义,用于查找列表中的所有值是否为奇数或都不是奇数 [关闭]

问题描述 投票:0回答:4

我在大学初学者计算机科学课程中遇到困难,只需要简单的作业帮助。

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

我的程序必须定义并调用以下两个函数。如果列表中的所有整数都是偶数,则

def is_list_even()
返回 true,否则返回 false。如果列表中的所有整数都是奇数,则
def is_list_odd()
返回 true,否则返回 false。如果列表全是偶数,我还必须打印“全偶数”。如果列表是奇数,我必须打印“全部奇数”。如果列表两者都有,我必须打印“非偶数或奇数”。

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

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")
python python-3.x function return-value definition
4个回答
2
投票

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

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

1
投票

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

1
投票

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

目前,

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

1
投票

我认为您走在正确的道路上,您可能只想通过利用 compressions

all
来稍微简化 for 循环中的逻辑:

from typed_input import int_input  # pip install typed_input

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

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

def main():
  num_elements = int_input('Enter the number of elements: ')
  my_list = [int_input(f'Enter element {i + 1}: ') for i in range(num_elements)]
  print('Input list:', my_list)
  if is_list_even(my_list):
    print('All elements are even.')
  elif is_list_odd(my_list):
    print('All elements are 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: 5
Enter element 3: 9
Enter element 4: 7
Enter element 5: 1
[1, 5, 9, 7, 1]
All elements are odd.

用法示例2:

Enter the number of elements: 3
Enter element 1: 2
Enter element 2: 4
Enter element 3: 8
[2, 4, 8]
All elements are even.

用法示例3:

Enter the number of elements: 4
Enter element 1: 1
Enter element 2: a
Error: You must enter a valid integer.
Enter element 2: 2
Enter element 3: 5
Enter element 4: 7
[1, 2, 5, 7]
Mix of evens and odds.
© www.soinside.com 2019 - 2024. All rights reserved.