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
8 Réponses :
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
Essayez ceci:
x = x+x%2 for num in range (x,y+1,2): print (num)
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.
def printEvenfor(x,y): return list(range(((x+1) // 2) * 2,y+1, 2)) printEvenfor(9,16)
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)
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)
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;
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>
il vous manque la vérification principale
i% 2 == 0
:list (range (5 + 1,12 + 1, 2))
(ou plus génériquementlist (range (x + x% 2, y + y% 2, 2)) code>)