IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Python Discussion :

Probleme boucle et fonction


Sujet :

Python

  1. #1
    Candidat au Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Mars 2019
    Messages
    3
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Enseignement

    Informations forums :
    Inscription : Mars 2019
    Messages : 3
    Par défaut Probleme boucle et fonction
    Bonjour à tous, j'essaye de créer un programme (je suis débutant), où l'utilisateur donne des ingrédients, et le programme lui donne en réponse un cocktail avec. j'utilise alors une fonction où j'introduis deux boucles, sauf que cela marche que pour le 1er cocktail de la liste mais pas pour les autres, or avec les boucles il devrait me donner aussi les autres cocktails quand je mets les ingrédients corrects. Voila, j'éspère que vous pourrez m'aider. Merci
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
     
    def cock(Fruit,Alcool,Sirop,sucre):
        F=Fruit
        A=Alcool
        S=Sirop
        s=sucre
     
        for i in range(6):
            for j in range(4):
              if F==L[i][1] and A==L[i][2] and s==L[i][4] and (S==L[i][3] or L[i][3]=="0"):
                  a="Vous pouvez réaliser un "+ L[i][0] + ", sa liste d'ingrédients est : "+ eval(L[i][0])
              else:
                  a="aucun cocktail"
     
              return a
     
     
    F=input("quel fruit ou jus avez vous ? (citron, citron vert, orange, ananas)")
    A=input("quel alcool avez vous ? (rhum, tequila, vodka, gin)")
    S=input("quel sirop avez vous ? (grenadine, lait de coco, cointreau, curaçao bleu, sirop de sucre)")
    s=input("Avez vous du sucre(oui ou non)")
    L=[["mojito","citron vert","rhum","0","oui"],["tequilasunrise","orange","tequila","sirop de grenadine","non"],["pink lady","citron","gin","0","non"],["pina colada","ananas","rhum","lait de coco","non"],["margarita","citron","téquila","cointreau","non"],["Daïquiri","citron vert","rhum","sirop de sucre","non"]]
    print(cock(F,A,S,s))

  2. #2
    Membre chevronné
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Avril 2004
    Messages
    253
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 47
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Avril 2004
    Messages : 253
    Par défaut
    Bonjour,

    Effectivement, tu fais un return dans la boucle (à moins que ce ne soit qu'un pb de copier coller dans le message du forum), Tu sors donc, dès la 1ere itération.
    Comme ta fonction cock doit t'indiquer la liste des cocktails faisables à partir des ingrédients donnés, je ferai comme ça:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
     
    # Définition de la liste des cocktails
    cocktails= {....}
     
    def cock(....):
        liste_resultat = []
        pour chaque cocktail:
            si les ingrédients permettent de réaliser le cocktail:
                ajouter le cocktail à la liste résultat
        retourner la liste résultat
     
    ingrédients = demander ingrédients
    coktails_réalisables = cock(ingrédients)
    afficher(cocktaims_réalisables)

  3. #3
    Candidat au Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Mars 2019
    Messages
    3
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Enseignement

    Informations forums :
    Inscription : Mars 2019
    Messages : 3
    Par défaut
    ok merci beaucoup je vais essayer

  4. #4
    Membre prolifique
    Avatar de Sve@r
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Février 2006
    Messages
    12 815
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Oise (Picardie)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Février 2006
    Messages : 12 815
    Billets dans le blog
    1
    Par défaut
    Bonjour

    J'aime bien l'idée

    Fifan31 a donné l'essentiel. Moi je vois juste un truc dans ta liste de cockail: tout est au même niveau. Tu as d'abord le nom, puis deux ingrédients, puis le nom du sirop (avec "O" quand il n'y a pas de sirop) et enfin "oui"/"non" pour le sucre.
    Déjà, au lieu de "oui" ou "non", tu peux pas utiliser de vrais booléens ???
    Et enfin pourquoi séparer le sirop du reste ? C'est pas un ingrédient comme les autres ?

    Et comment vas-tu gérer des cocktails avec 3 ingrédients de ceux qui en ont 5/6/7 ?

    Voici comment moi j'organiserais le truc
    Code python : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    L=(
    	{
    		"nom" : "mojito",
    		"ingrédients" : ("citron vert", "rhum"),
    		"sucre" : True,
    	},
    	{
    		"nom" : "tequilasunrise",
    		"ingrédients" : ("orange", "tequila", "sirop de grenadine"),
    		"sucre" : False,
    	},
    	{
    		"nom" : "pink lady",
    		"ingrédients" : ("citron", "gin"),
    		"sucre" : False,
    	},
    	{
    		"nom" : "piña colada",
    		"ingrédients" : ("ananas", "rhum", "lait de coco"),
    		"sucre" : False,
    	},
    	{
    		"nom" : "margaritha",
    		"ingrédients" : ("citron", "tequila", "cointreau"),
    		"sucre" : False,
    	},
    	{
    		"nom" : "daïquiri",
    		"ingrédients" : ("citron vert", "rhum", "sirop de sucre"),
    		"sucre" : False,
    	},
    )
    Voilà. Un tuple de dico contenant tout ce qu'il faut de façon bien séparée. Avec des tuples pour les ingrédients car ils sont toujours variables. Bref un truc à la fois plus souple et à la fois plus évolutif quoi...

    Et évite les listes quand elles n'ont pas vocation à être modifiées dans le code. Si c'est juste du stockage, un tuple remplit les mêmes fonctions et est moins gourmand en mémoire.
    Mon Tutoriel sur la programmation «Python»
    Mon Tutoriel sur la programmation «Shell»
    Sinon il y en a pleins d'autres. N'oubliez pas non plus les différentes faq disponibles sur ce site
    Et on poste ses codes entre balises [code] et [/code]

  5. #5
    Candidat au Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Mars 2019
    Messages
    3
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Enseignement

    Informations forums :
    Inscription : Mars 2019
    Messages : 3
    Par défaut
    Merci de ta réponse, j'ai introduit le (S==L[i][3] or L[i][3]=="0") pour dire que si tu as un sirop mais que la recette ne contient pas de sirop, elle te donne quand même la recette. J'avoue que je n'avais pas étudié (ou peu) les tuples je vais essayer avec ! C'est vrai que du coté du nombre d'ingrédients, j'ai pris que des cocktails avec max 5 ingrédients car je ne sais pas trop comment faire après (quand il y a plusieurs alcools ou plusieurs fruit je suis bloqué); J'ai mis les "0" pour que chaque liste ait le même nombre de places qui est plus facile. Si tu as des solutions, je suis preneur !

  6. #6
    Membre prolifique
    Avatar de Sve@r
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Février 2006
    Messages
    12 815
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Oise (Picardie)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Février 2006
    Messages : 12 815
    Billets dans le blog
    1
    Par défaut
    Citation Envoyé par choobaouix Voir le message
    J'ai mis les "0" pour que chaque liste ait le même nombre de places qui est plus facile.
    Fausse idée. Ce n'est pas plus facile.
    Avec ma vision de L là c'est plus facile. Tu boucles sur chaque élément de L (que je vais appeler "x") et tu regardes si la totalité des items stockés dans x["ingrédients"] est présente dans la liste d'ingrédients reçue par ta fonction. Et comme Python sait comparer deux tuples ça devient franchement trivial quoi.
    Code python : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    def cock(ingredients, sucre, recette):
    	for x in recette:
    		if sorted(x["ingrédients"] == sorted(ingredients) and x["sucre"] == sucre:
    			# Le cocktail x["nom"] est possible
    	# for
    # cock()

    Et ça peut même se faire en une ligne: cock=lambda ingredients, sucre, recette: tuple(x["nom"] for x in recette if sorted(x["ingrédients"]) == sorted(ingredients) and x["sucre"] == sucre).

    Et tu appelles la fonction de cette façon: cock(("toto", "titi", "tata", ...), sucre, L) ("toto", "titi" et "tata" et la suite étant les ingrédients testés).

    Accessoirement le sucre pourrait même peut-être devenir un ingrédient comme un autre ce qui simplifierait encore le code (mais laisserait moins de marge de manoeuvre comme par exemple pouvoir demander que sortent les cocktails sans prendre en compte le critère "sucre").
    Mon Tutoriel sur la programmation «Python»
    Mon Tutoriel sur la programmation «Shell»
    Sinon il y en a pleins d'autres. N'oubliez pas non plus les différentes faq disponibles sur ce site
    Et on poste ses codes entre balises [code] et [/code]

Discussions similaires

  1. probleme de boucle avec fonction et appel
    Par Invité dans le forum Langage
    Réponses: 2
    Dernier message: 26/05/2011, 15h37
  2. Réponses: 26
    Dernier message: 16/07/2009, 10h41
  3. Réponses: 18
    Dernier message: 25/07/2007, 12h34
  4. [LG]Problême Boucle
    Par pierrOPSG dans le forum Langage
    Réponses: 1
    Dernier message: 29/04/2004, 16h48
  5. autre probleme pour deriver fonction
    Par voyageur dans le forum Mathématiques
    Réponses: 15
    Dernier message: 28/07/2003, 14h37

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo