2

我在 Python 课上有一个作业要做,并被问到这个问题:

制作一个程序,从用户那里获取 2 个数字,并打印这 2 个数字范围内的所有偶数,您只能使用任意数量的 for 语句,但不能使用其他循环或 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

4

8 回答 8

1

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

for each in range(int(input()),int(input())):
    while each%2 == 0:
       print (each)
       break; 
于 2019-04-05T12:31:09.337 回答
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

第二个可能更适合你

于 2019-04-05T12:20:10.533 回答
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
于 2019-04-05T12:29:02.553 回答
0

哈克但有趣:将字符串与零相乘。

>>> 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

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

于 2019-04-05T12:37:37.647 回答
0

尝试这个:

x = x+x%2
for num in range (x,y+1,2):
    print (num)
于 2019-04-05T12:21:39.307 回答
0

你可以这样做:

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

如果它是奇数,第一个参数range强制它成为下一个偶数。最后一个论点成对出现。

于 2019-04-05T12:22:46.033 回答
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)
于 2019-04-05T12:28:47.310 回答
0
def printEvenfor(x,y):
    return list(range(((x+1) // 2) * 2,y+1, 2))

printEvenfor(9,16)
于 2019-04-05T12:26:08.273 回答