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
函数来检查所有数字是否为even
或odd
。例如,确定列表是否仅包含 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 返回成功 [重复]