2
votes

Python: existe-t-il un moyen d'imprimer des nombres pairs dans une plage inconnue et sans instruction if?

J'ai un devoir à faire en classe Python et on m'a posé cette question:

Créez un programme qui obtient 2 nombres de l'utilisateur et imprime tous nombres compris entre ces 2 nombres, vous ne pouvez en utiliser autant que pour instructions que vous voulez, mais vous ne pouvez pas utiliser d’autres boucles ou une instruction if.

Je comprends que je dois utiliser ce code:

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

mais sans aucune instruction if , je ne peux pas vérifier si la valeur x insérée est paire ou impaire, et si l'utilisateur a inséré le nombre 5 comme x , toutes les impressions seront des nombres impairs.

J'ai également essayé d'entrer chaque nombre dans un tuple ou un tableau, mais je ne peux toujours pas vérifier si le premier nombre est pair pour commencer l'impression.

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

ou

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

Je m'attends à ce que la sortie de printEvenFor (5,12) soit 6,8,10,12 mais c'est 5,7,9,11


2 commentaires

il vous manque la vérification principale i% 2 == 0 :


list (range (5 + 1,12 + 1, 2)) (ou plus génériquement list (range (x + x% 2, y + y% 2, 2)) )


8 Réponses :


1
votes

Vous pouvez rendre x pair, en utilisant la division par étage, puis la multiplication:

#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

x sera alors arrondi à l'entier pair précédent ou restera le même s'il l'était même avant. p>

Si vous voulez l'arrondir à l'entier pair suivant, vous devez faire:

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

Ceci peut être amélioré en utilisant des opérateurs de décalage:

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

Exemples:

x = (x // 2) * 2

Le second est probablement plus adapté pour vous


0 commentaires

0
votes

Essayez ceci:

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


0 commentaires

0
votes

Vous pouvez le faire de cette façon:

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

Le premier argument de range le force à être le prochain nombre pair s'il est impair. Le dernier argument monte par deux.


0 commentaires

0
votes
def printEvenfor(x,y):
    return list(range(((x+1) // 2) * 2,y+1, 2))

printEvenfor(9,16)

0 commentaires

0
votes

La fonction suivante fera ce que vous voulez. J'utilise round pour forcer les limites à être paires afin de commencer la plage sur un nombre pair.

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 commentaires

1
votes

Vous pouvez utiliser le rappel pour obtenir la plage correcte:

6
8
10
12

Sortie:

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)


0 commentaires

1
votes

une façon consiste à utiliser while, qui prend la plage de début et de fin dans

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


0 commentaires

0
votes

Hacky mais amusant: multiplier les chaînes par zéro.

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

Les nombres impairs ne sont pas affichés car la chaîne est multipliée par False (faisant office de zéro). p>


0 commentaires