Python: есть ли способ напечатать четные числа в неизвестном диапазоне и без оператора if? - PullRequest
2 голосов
/ 05 апреля 2019

У меня есть домашнее задание в классе Python, и мне задали этот вопрос:

Создайте программу, которая получает от пользователя 2 числа и печатает все четные числа в диапазоне этих 2 чисел., вы можете использовать только столько операторов, сколько хотите, но не можете использовать другие циклы или оператор if.

Я понимаю, что мне нужно использовать этот код:

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

, но без каких-либо операторов if я не могу проверить, является ли введенное значение x четным или нечетным, и если пользователь вставил число 5 как x, все отпечатки будут нечетными числами.

Я также пытался ввести каждое число в кортеж или массив, но я все еще не могу проверить, является ли первое число даже началом печати. ​​

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

Ответы [ 8 ]

1 голос
/ 05 апреля 2019

Вы можете использовать напоминание, чтобы получить правильный диапазон:

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 голос
/ 05 апреля 2019

один из способов - использование while, которое принимает начальный и конечный диапазон в

for each in range(int(input()),int(input())):
    while each%2 == 0:
       print (each)
       break; 
1 голос
/ 05 апреля 2019

Вы можете сделать 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

Второй, вероятно, больше подходит для вас

0 голосов
/ 05 апреля 2019

Хаки, но весело: умножение строк на ноль.

>>> 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 (действует как ноль).

0 голосов
/ 05 апреля 2019

Следующая функция будет делать то, что вы хотите.Я использую 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 голосов
/ 05 апреля 2019
def printEvenfor(x,y):
    return list(range(((x+1) // 2) * 2,y+1, 2))

printEvenfor(9,16)
0 голосов
/ 05 апреля 2019

Вы можете сделать это следующим образом:

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

Первый аргумент range заставляет его быть следующим четным числом, если оно нечетное.Последний аргумент увеличивается вдвое.

0 голосов
/ 05 апреля 2019

Попробуйте это:

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