我想用python写一个函数,如果所有数字都是偶数,则返回true



函数是all_even,你输入一个int,它返回bool。如果所有数字都是偶数,则返回true。例如,all_even(2224)给出真值,all_even(1362)给出假值。

我写的代码,但它不能正常工作。

这是我的:

def is_very_even(num: int) -> bool: 
even = False
strnum = str(num)
for ch in strnum:
if int(ch)% 2==0:
even = True
return even

即使num中有一个偶数,而其余的都是奇数,代码也会给出true,例如all_even(231)为真,而它应该是假的。谁能告诉我它出了什么问题?

您可以使用递归方法(不转换为字符串):

def allEven(N): return True if N==0 else N%2==0 and allEven(N//10)

输出:

allEven(246) # True   
allEven(123) # False   

请注意,函数的问题是,一旦遇到偶数,就将even设置为True。如果有一个奇数之后,您的even变量仍然是True。它会告诉你"至少有一个"数字是偶数,而不是它们都是偶数。

您正在检查是否所有的数字都是偶数。所以首先假设它是真的,所有的数字都是偶数,并设置even = True。然后检查字符串中是否有奇数。如果有,则设置even = False

现在,如果字符串中有奇数,even将是False,因此我们可以验证它。

def is_very_even(num: int) -> bool: 
even = True

strnum = str(num)
for ch in strnum:
if int(ch)% 2 !=0:
even = False

return even

这段代码也可以像这样临时修改。我们不需要一直检查是否找到了一个奇数。我们可以立即返回false。如果所有的数字都符合要求,但没有一个返回false,那么它必须是一个全偶数字符串。

def is_very_even(num: int) -> bool: 
for ch in str(num):
if int(ch)% 2 !=0:
return False

return True

我会这样解决:

def is_very_even(s) -> bool:
return all(int(x) % 2 == 0 for x in str(s))

将每个字符转换为整数,并检查其是否偶取模。这是在所谓的generator expression中处理的。

然后我们使用内置的all方法来检查生成器是否只提供True值。

相关内容

最新更新