Python:有没有办法打印未知范围内的偶数数字而没有if语句?

问题描述 投票:2回答:8

我有一个在Python课上做的功课,并给出了这个问题:

创建一个从用户获取2个数字的程序,并打印这2个数字范围内的所有偶数,您只能使用任意数量的语句,但不能使用其他循环或if语句。

我知道我需要使用这段代码:

for num in range (x,y+1,2):
    print (num)

但没有任何if语句,我无法检查插入的x值是偶数还是奇数,如果用户插入数字5x,则所有打印都是奇数。

我也尝试将每个数字输入一个元组或一个数组,但我仍然无法检查第一个数字是否开始打印。

def printEvenFor(x,y):
    evenNumbers =[]
    for i in range (x,y+1):
        evenNumbers.append(i)
    print (evenNumbers[::2])

要么

def printEvenFor(x,y):
    for i in range (x,y+1,2):
        print(i,",")

我希望printEvenFor(5,12)的输出是6,8,10,12,但它是5,7,9,11

python loops for-loop if-statement conditional
8个回答
1
投票

您可以通过使用楼层划分然后乘法来使x均匀:

x = (x // 2) * 2

然后,x将四舍五入到前一个偶数整数,或者如果它甚至之前保持不变。

如果要将其舍入为以下偶数整数,则需要执行以下操作:

x = ((x + 1) // 2) * 2

这可以通过使用移位运算符进一步改进:

x = (x >> 1) << 1         #Alternative 1
x = ((x + 1) >> 1) << 1   #Alternative 2

例子:

#Alternative 1
x = 9
x = (x >> 1) << 1
#x is now 8

#Alternative 2
x = 9
x = ((x + 1) >> 1) << 1
#x is now 10

第二个可能更适合你


1
投票

您可以使用提醒来获取正确的范围:

def print_event_for(min_, max_):
    reminder = min_ % 2
    for i in range(min_+reminder, max_+reminder, 2):
        print(i)

print_event_for(5, 12)

输出:

6
8
10
12

1
投票

一种方法是使用while,它采用开始和结束范围

for each in range(int(input()),int(input())):
    while each%2 == 0:
       print (each)
       break; 

0
投票

试试这个:

x = x+x%2
for num in range (x,y+1,2):
    print (num)

0
投票

你可以这样做:

>>> for n in range((x + 1) // 2 * 2, y+1, 2):
        print(n)

range的第一个参数强制它成为下一个偶数,如果它是奇数。最后一个论点上升了两个。


0
投票

以下功能可以满足您的需求。我使用round强制边界是偶数,以便在偶数上开始范围。

def print_even_between(x, y):
    x = round(x / 2) * 2
    y = round(y / 2) * 2

    for i in range(x, y, 2):
        print(i)  
    print(y)

0
投票

Hacky但很有趣:将字符串乘以零。

>>> low, high = int(input()), int(input())
5
13
>>> for n in range(low, high + 1):
...     print('{}\n'.format(n)*(not n%2), end='')
... 
6
8
10
12

不打印奇数,因为字符串乘以qazxsw poi(作为零)。


0
投票
False
© www.soinside.com 2019 - 2024. All rights reserved.