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 :

Besoin d'aide pour des combinaisons sur Python


Sujet :

Python

  1. #1
    Candidat au Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Novembre 2022
    Messages
    6
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 23
    Localisation : France, Calvados (Basse Normandie)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Novembre 2022
    Messages : 6
    Points : 3
    Points
    3
    Par défaut Besoin d'aide pour des combinaisons sur Python
    Bonjour,
    je suis étudiant en première année de prépa et n'ai jamais fait d'informatique avant. Je suis un peu perdu et j'ai un exercice à faire sur un jeu de fléchettes. Voici l'énoncé:
    Un jeu de fléchettes est constitué de 3 zones : La zone1 qui rapporte 50 points , la zone2 qui rapporte 20 points et la zone 3 qui rapporte 10 points. On dispose de 10 fléchettes et on souhaite obtenir exactement 300points en lançant nécessairement les 10 fléchettes.
    Le programme à écrire devra renvoyer une liste contenant des sous listes du type [a,b,c] où a,b,c sont les nombres de fléchettes respectivement dans les zones 3,2 et 1.
    Je dois écrire le programme évidemment.
    Pour l'instant j'ai deux relations: a+b+c=10 et 10a+20b+50c=300.
    pour le code je suis complétement perdu auriez-vous des pistes s'il vous plaît ? Merci d'avance

  2. #2
    Expert éminent sénior
    Avatar de Sve@r
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Février 2006
    Messages
    12 678
    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 678
    Points : 30 965
    Points
    30 965
    Billets dans le blog
    1
    Par défaut
    Bonjour

    As-tu le droit d'utiliser des outils déjà tout faits, comme par exemple des fonctions mathématiques d'arrangements et combinaisons, ou bien dois-tu tout faire tout seul?

    Si c'est tout seul, alors déjà l'algo dit "algo brute force" (ce qu'on nomme généralement "algo con") est le plus simple
    • une boucle sur a variant de 1 à 10
    • une boucle sur b variant de 1 à 10
    • c vaut alors fatalement (10-a-b). De là tu ne stockes le triplet (a, b, c) que si 10a+20b+50c=300 (et c'est là qu'on se rend compte de l'importance des relations)

    Quand les boucles sont finies, tu affiches les triplets stockés.

    Si t'as le droit d'utiliser les outils déjà tout faits, alors c'est réglé en une ligne (plus la ligne qui importe l'outil évidemment !!!)
    Code python : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    import itertools
    print(tuple(x for x in itertools.product(range(1, 11), repeat=3) if sum(x) == 10 and (10*x[0]+20*x[1]+50*x[2]) == 300))
    PS: mais comme j'ai l'impression que tu n'y auras pas droit, c'est pour ça que je te donne cette solution: pour te montrer les possibilités sympa de Python (et aussi pour te permettre de vérifier ton résultat quand tu auras codé le programme)
    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]

  3. #3
    Candidat au Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Novembre 2022
    Messages
    6
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 23
    Localisation : France, Calvados (Basse Normandie)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Novembre 2022
    Messages : 6
    Points : 3
    Points
    3
    Par défaut
    D'abord merci beaucoup pour votre réponse. J'ai plusieurs questions : pourquoi a et b ne peuvent-ils pas prendre 0 comme valeur ? Il peut y avoir 0 fléchette dans une zone tout en atteignant bien 300points avec les autres zones non ?
    Effectivement je ne peux pas utiliser d'autres outils que ceux de base donc je vais utiliser la méthode que vous m'avez donnée mais merci quand même de m'avoir montré la méthode la plus simple.
    Voici mon code et le résultat donné par Python, cela me semble correct. Qu'en pensez-vous ?

    Nom : CODE PYTHON.JPG
Affichages : 95
Taille : 13,1 Ko

    Nom : resultat.JPG
Affichages : 96
Taille : 8,3 Ko

  4. #4
    Candidat au Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Novembre 2022
    Messages
    6
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 23
    Localisation : France, Calvados (Basse Normandie)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Novembre 2022
    Messages : 6
    Points : 3
    Points
    3
    Par défaut
    Il faudrait que je présente le résultat comme ceci :
    Combinaisons_possibles=[[5,0,5],[2,4,4]]
    C'est-à-dire avec une liste de sous-listes représentant chacune une combinaison possible.
    Je parviens à former la liste avec tous les éléments ensemble mais pas à former deux sous-listes et à les réunir dans la liste Combinaisons_possibles.
    Comment pourrais-je m'y prendre s'il vous plaît ?

  5. #5
    Membre expérimenté
    Avatar de MPython Alaplancha
    Homme Profil pro
    Paysan à 3 francs six sous
    Inscrit en
    Juin 2018
    Messages
    869
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Pyrénées Orientales (Languedoc Roussillon)

    Informations professionnelles :
    Activité : Paysan à 3 francs six sous
    Secteur : Agroalimentaire - Agriculture

    Informations forums :
    Inscription : Juin 2018
    Messages : 869
    Points : 1 521
    Points
    1 521
    Billets dans le blog
    4
    Par défaut
    Bonjour,

    Si tu sais utiliser append() pour ajouter un élément à une liste, je ne saisis pas ton souci. Il te suffit que cet élément soit une liste:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    >>> l = []
    >>> l.append([5,0,5])
    >>> l
    [[5, 0, 5]]
    >>>
    #Rien de nouveau sous le soleil, tout est vanité comme courir après le vent!
    Developpement pour Android avec Python3/Kivy/Buildozer

  6. #6
    Candidat au Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Novembre 2022
    Messages
    6
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 23
    Localisation : France, Calvados (Basse Normandie)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Novembre 2022
    Messages : 6
    Points : 3
    Points
    3
    Par défaut
    Oui je connais cet outil mais n'est-ce pas de la triche que de directement ajouter le résultat demandé dans la liste? Il faudrait que ce soit avec a,b,c qui sont supposés inconnus au moment où je code je pense. Je ne sais pas si ce que je dis est clair

  7. #7
    Expert éminent sénior
    Homme Profil pro
    Architecte technique retraité
    Inscrit en
    Juin 2008
    Messages
    21 276
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Manche (Basse Normandie)

    Informations professionnelles :
    Activité : Architecte technique retraité
    Secteur : Industrie

    Informations forums :
    Inscription : Juin 2008
    Messages : 21 276
    Points : 36 761
    Points
    36 761
    Par défaut
    Citation Envoyé par AntonT Voir le message
    Oui je connais cet outil mais n'est-ce pas de la triche que de directement ajouter le résultat demandé dans la liste?
    Si vous ne voyez pas la ressemblance entre [5,0,5] et [a, b, c], c'est que vous n'avez pas encore assimilé la notion de variable... et fait les exercices qui vont bien pour ça.

    - W
    Architectures post-modernes.
    Python sur DVP c'est aussi des FAQs, des cours et tutoriels

  8. #8
    Candidat au Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Novembre 2022
    Messages
    6
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 23
    Localisation : France, Calvados (Basse Normandie)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Novembre 2022
    Messages : 6
    Points : 3
    Points
    3
    Par défaut
    J'ai bien compris que ça correspondait au triplet a,b,c mais ce que je n'arrive pas à faire c'est écrire la partie du code qui permet directement de présenter la liste résultat comme ça :
    A=[[2,4,4],[5,0,5]]

  9. #9
    Membre expérimenté
    Avatar de MPython Alaplancha
    Homme Profil pro
    Paysan à 3 francs six sous
    Inscrit en
    Juin 2018
    Messages
    869
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Pyrénées Orientales (Languedoc Roussillon)

    Informations professionnelles :
    Activité : Paysan à 3 francs six sous
    Secteur : Agroalimentaire - Agriculture

    Informations forums :
    Inscription : Juin 2018
    Messages : 869
    Points : 1 521
    Points
    1 521
    Billets dans le blog
    4
    Par défaut
    Citation Envoyé par AntonT Voir le message
    J'ai bien compris que ça correspondait au triplet a,b,c mais ce que je n'arrive pas à faire c'est écrire la partie du code qui permet directement de présenter la liste résultat comme ça :
    A=[[2,4,4],[5,0,5]]
    Déjà répondu en #5
    Que comprends tu pas?
    #Rien de nouveau sous le soleil, tout est vanité comme courir après le vent!
    Developpement pour Android avec Python3/Kivy/Buildozer

  10. #10
    Candidat au Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Novembre 2022
    Messages
    6
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 23
    Localisation : France, Calvados (Basse Normandie)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Novembre 2022
    Messages : 6
    Points : 3
    Points
    3
    Par défaut
    Pardon j'ai mal compris votre précédente réponse mais maintenant c'est bon ça fonctionne merci à tous pour vos précieuses réponses

  11. #11
    Expert éminent sénior
    Avatar de Sve@r
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Février 2006
    Messages
    12 678
    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 678
    Points : 30 965
    Points
    30 965
    Billets dans le blog
    1
    Par défaut
    Citation Envoyé par AntonT Voir le message
    pourquoi a et b ne peuvent-ils pas prendre 0 comme valeur ? Il peut y avoir 0 fléchette dans une zone tout en atteignant bien 300points avec les autres zones non ?
    Exact, je n'y avais pas pensé. Et pour la solution via itertools.product on remplace alors range(1, 11) par range(11)
    Citation Envoyé par AntonT Voir le message
    Voici mon code et le résultat donné par Python, cela me semble correct. Qu'en pensez-vous ?
    Ben voilà. Pas si compliqué que ça au final...

    Citation Envoyé par AntonT Voir le message
    Oui je connais cet outil mais n'est-ce pas de la triche que de directement ajouter le résultat demandé dans la liste?
    Absolument pas. C'est justement là le travail de traitement automatisé de l'information : tu as une info que tu ne veux pas utiliser immédiatement, tu la stockes alors afin de pouvoir l'utiliser plus tard au moment où tu en auras besoin. C'est parfaitement licite, autorisé, recommandé même. La triche ce serait d'utliser mon code via product() pour te débarasser de cet exercice alors qu'il a été donné exprès pour t'habituer à créer des algos et des traitements pour évaluer les choses. Ben oui, concrètement tout le monde s'en balance de où mettre les flêches pour faire 300 (et ton prof le premier).

    Il faudrait que ce soit avec a,b,c qui sont supposés inconnus au moment où je code je pense.
    Là effectivement tu rates un truc important. a, b et c ne sont pas inconnus, ce sont des variables de travail. Au moment où le code s'exécutera, elles prendront des valeurs qui sont parfaitement connues et qu'en plus tu dois pouvoir reproduire dans ton esprit quand tu réfléchis à ton algo. Tu dois en effet être capable de te dire "ok, a vaut 3, b vaut 4 donc c vaut 3". Tu as aussi le droit de prendre un papier et écrire tes valeurs puis faire tes calculs pour contrôler que ton algo est (ou sera) fonctionel. Mais à aucun moment tu ne dois ignorer les valeurs de a, b et c.
    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]

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Besoin d'aide pour un calcul sur un site
    Par barre dans le forum Général JavaScript
    Réponses: 1
    Dernier message: 23/02/2007, 08h36
  2. Réponses: 2
    Dernier message: 21/12/2006, 20h12
  3. Besoin d'aide pour des jointures de tables
    Par supersmoos dans le forum Requêtes
    Réponses: 4
    Dernier message: 14/12/2006, 15h38
  4. Besoin d'aide pour un exercice sur les registres
    Par zakuza dans le forum Assembleur
    Réponses: 5
    Dernier message: 14/04/2006, 14h23
  5. besoin d'aide pour des algos
    Par mathieu77 dans le forum Algorithmes et structures de données
    Réponses: 23
    Dernier message: 08/11/2005, 18h33

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