我在大学初学者计算机科学课程中遇到困难,只需要简单的作业帮助。
现在,我们正在处理函数定义,我必须编写一个程序来读取整数列表,并输出该列表是否包含所有偶数、奇数或都不包含。输入以一个整数开头,指示列表中整数的数量。第一个整数不在列表中(它只是告诉列表的长度)。
我的程序必须定义并调用以下两个函数。如果列表中的所有整数都是偶数,则
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")
使用标志来检查所有值是否满足条件。 示例:
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()
函数分别在找到偶数或奇数元素时立即返回。这会导致列表被标记为“偶数”,即使只有第一个元素是偶数(反之亦然)。解决这个问题的一种方法是当找到相反的情况时返回 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")
我认为您走在正确的道路上,您可能只想通过利用 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.