0
votes

Comment écrire une fonction à deux variables avec une instruction IF

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. : /


9 commentaires

Vous n'avez pas besoin de la ligne else: et de votre central si est faux. Cela devrait être: elif x> 60 et x <= 80: Oh oui, et les return ne font rien pour vous. Utilisez simplement print () , à 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") renverra None , donc je ne ferais probablement que print


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


3 Réponses :


2
votes
  1. Vous n'avez pas besoin de la première instruction else. Ceci:
  2. 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')
    

    1. Il semble que vous ayez une mise en retrait incorrecte. Python en dépend fortement, vous devez donc toujours vérifier l'indentation de votre code. Au lieu de ceci:
    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
    

    1. Erreur de logique. Ici: elif x> 60 ou x vous vérifiez que x> 60 OU x ou par et et cette instruction if aura du sens.

      L'instruction
    1. 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


2 commentaires

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.



2
votes

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


2 commentaires

btw votre: else: x = x est redondant.


Oui c'est très vrai! :)



2
votes

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'


0 commentaires