J'essaie d'écrire une équation à deux variables qui évalue une vitesse hypothétique et un opérateur booléen qui réduit la vitesse de 5 si elle est vraie. En fonction de la vitesse et de l'opérateur booléen, l'équation doit afficher «No Ticket», «Small Ticket» ou «Big Ticket».
J'ai d'abord essayé d'écrire ceci comme une expression lambda, mais j'ai découvert que les expressions lambda devaient être une seule ligne. J'ai ensuite écrit cela comme une expression normale, avec la seule variable x et cela a parfaitement fonctionné. Après avoir ajouté la variable Y, la fonction a cessé de fonctionner. Je ne sais pas si je définis mal x, si je ne peux pas faire des IF imbriquées comme j'essaye, ou si cela doit être deux fonctions. Toute aide à ce sujet serait grandement appréciée! :)
def caught_speeding(x,y):
if y == 1:
x = x - 5
else:
x = x
if x <= 60:
return print('No Ticket')
elif x > 60 or x <=80:
return print('Small Ticket')
elif x >= 81:
return print('Big Ticket')
caught_speeding(100,0)
Je ne reçois aucun message d'erreur. Si je règle y = 1, il renvoie toujours 'Small Ticket', si je fixe y = 0, il ne renvoie rien. : /
3 Réponses :
def caught_speeding(x,y):
if y == 1:
x = x - 5
if x <= 60:
print('No Ticket')
elif x > 60 and x <=80:
print('Small Ticket')
elif x >= 81:
print('Big Ticket')
caught_speeding(100,0)
est égal à:
def caught_speeding(x,y):
if y == 1:
x = x - 5
if x <= 60:
return print('No Ticket')
elif x > 60 or x <=80:
return print('Small Ticket')
elif x >= 81:
return print('Big Ticket')
def caught_speeding(x,y):
if y == 1:
x = x - 5
if x <= 60:
return print('No Ticket')
elif x > 60 or x <=80:
return print('Small Ticket')
elif x >= 81:
return print('Big Ticket')
vous devriez avoir ceci:
if y == 1:
x = x - 5
elif x> 60 ou x vous vérifiez que x> 60 OU x ou par et et cette instruction if aura du sens. return renvoie la valeur que vous écrivez après ce mot. Mais print (...) renvoie None donc la ligne return print (...) est inutile car elle retournera toujours Aucun s. Les fonctions Python n'ont pas besoin de return , vous ne pouvez utiliser que des print . OU vous pouvez utiliser uniquement des return et ensuite imprimer le résultat de la fonction. Cela dépend de vos besoins. Voici le code de résultat:
if y == 1:
x = x - 5
else:
x = x
Gros ticket
Vous pouvez également mentionner la différence entre l'utilisation de soit print ('... Ticket') , ou return '... Ticket '
Et, maintenant que j'y pense, le dernier elif est redondant.
Votre deuxième instruction if n'est exécutée que sur la clause else:, à cause de votre indentation (elle doit être du même niveau d'indentation que la première instruction if de la fonction). De plus, vous ne devriez pas retourner et imprimer sur la même ligne. Donc, dans ce cas, nous retournons une chaîne, puis nous imprimons la chaîne retournée à la fin, en dehors de la fonction où nous l'appelons.
Voici donc une version corrigée de votre code:
def caught_speeding(x,y):
if y == 1:
x = x - 5
else:
x = x
if x <= 60:
return 'No Ticket'
elif x > 60 or x <=80:
return 'Small Ticket'
elif x >= 81:
return 'Big Ticket'
print (caught_speeding(100,0))
print (caught_speeding(100,1))
btw votre: else: x = x est redondant.
Oui c'est très vrai! :)
Lou, je vous recommande d'écrire votre fonction comme ceci:
#Either by assignment: result = caught_speeding(100,0) #Or print the result: print(caught_speeding(100,0))
Et de l'appeler comme ceci:
def caught_speeding(x,y):
if y == 1:
x = x - 5
if x <= 60:
return 'No Ticket'
elif x > 60 and x <= 80:
return 'Small Ticket'
return 'Big Ticket'
Vous n'avez pas besoin de la ligne
else:et de votrecentral siest faux. Cela devrait être:elif x> 60 et x <= 80:Oh oui, et lesreturnne font rien pour vous. Utilisez simplementprint (), à moins que vous ne vouliez renvoyer des chaînes.Dans le formatage python et en particulier l'indentation est très important, assurez-vous donc d'insérer le code textuellement et de conserver le formatage.
return print ("string")renverraNone, donc je ne ferais probablement queprintSalut quamrana, merci pour vos modifications! J'ai changé mon code selon vos notes et il n'imprime plus les résultats pour moi.
Salut Roman, vous avez peut-être fait référence à la première instance de ce message. Je l'ai édité pour inclure la fonction entière. Ce que vous voyez en gris est la mise en forme exacte que j'ai dans Jupyter. :)
Salut C.Nivs, j'ai essayé toutes les variantes d'impression dans mon cahier jupyter. C'est-à-dire imprimer lou, imprimer `` lou '', imprimer (`` lou '') et seule la troisième itération imprime Lou
Oui,
print ('lou')est la syntaxe correcte pour python 3.Désolé, Lou, vous devez garder la question pratiquement intacte, sinon les futurs lecteurs ne pourront pas voir la différence entre ce que vous avez publié et ce que disent les commentaires et les réponses.
Salut tout le monde, je suis un NEWB ici et je n'ai pas vu les réponses sous la section des commentaires -.- Je vais continuer et modifier le code à ce qu'il était à l'origine! Et merci à tous pour l'aide, le parcours de vurmux a permis à mon code de fonctionner correctement. Je ne savais pas qu'assembler le retour et l'impression n'était pas correct en python. J'ai beaucoup appris de cela! :) Au plaisir d'être un membre actif ici, vous êtes tous rock!