在python

时间:2017-08-06 09:32:40

标签: python python-3.x printing

如果输入参数中有奇数,则下面的代码效果很好,但是当所有数字都是偶数时,它就不会打印出所有偶数'有什么想法吗?我使用的是Python3.6

#Find largest odd number from the given list

x,y,z=2,4,12
if x%2==0:
    x=0
else:
    x=x  
if y%2==0:
    y=0
else:
    y=y
if z%2==0:
    z=0
else:
    z=z
    t=x+y+z
    if t==0:
        print('all even')
    else:
        print(max(x,y,z))

4 个答案:

答案 0 :(得分:0)

12%2 == 0所以它只是初始化z = 0并且什么都不打印。

if z%2==0:
    z=0
else:
    z=z
    t=x+y+z

答案 1 :(得分:0)

此代码段:

>>> x, y, z = 2, 4, 12
>>> x%2, y%2, z%2
(0, 0, 0)

表示偶数的mod 2始终为0.

因此,if语句中的条件在所有情况下都会评估为True,因此不会输入最终的else分支,也不会进行打印。

您可以尝试使用此代码:

x, y, z = 2, 4, 12
numbers = (x, y, z)
if any(i%2 for i in numbers):
    print(max(numbers))
else:
    print('all even')

或者,更简洁:

print(max(numbers) if any(i%2 for i in numbers) else 'all even')

答案 2 :(得分:0)

也许这可以很好地运作

x,y,z=2,4,12
if x%2==0:
   x=0 
if y%2==0:
   y=0
if z%2==0:
   z=0
t=x+y+z
if t==0:
   print('all even')
else:
   print(max(x,y,z))

答案 3 :(得分:0)

为清楚起见,我重新格式化了其中一些行并删除了多余的行(即else x=x

x, y, z = 2, 4, 12

if x % 2 == 0:
    x = 0
if y % 2 == 0:
    y = 0
if z % 2 == 0:
    z = 0

这条线没有正确缩进,这意味着它从未跑过。

t = x + y + z

if t == 0:
    print('all even')
else:
    print(max(x,y,z))

正如评论者所指出的,这可以用一些稍微更多的Pythonic代码替换:

numbers = [2, 4, 12]
results = max(0 if i % 2 == 0 else i for i in numbers)

以下代码基本上说......如果results不是零,则打印results OTHERWISE打印'全部均匀'

if results:          
    print(results)
else:
    print('all even')