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 :

Aucune interaction possible avec les arguments d'une fonction


Sujet :

Python

  1. #1
    Futur Membre du Club
    Homme Profil pro
    camillelecourt
    Inscrit en
    Décembre 2019
    Messages
    3
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 22
    Localisation : France, Sarthe (Pays de la Loire)

    Informations professionnelles :
    Activité : camillelecourt

    Informations forums :
    Inscription : Décembre 2019
    Messages : 3
    Par défaut Aucune interaction possible avec les arguments d'une fonction
    Bonjour je doit réaliser un programme qui simule basiquement une course de chevaux et un pari dessus. 10 numéros sont tirés au sort entre 1 et 100 sans numéro identique possible; là-dessus pas de problème. C'est ensuite quand je dois déterminer si toutes les conditions du pari sont remplies (avoir des numéros présents dans les 10 chevaux qui vont courir et ne pas mettre 2 fois le même numéro).

    Pour vérifier que les numéros pariés sont bien sur la liste je fais ça :

    Tout cela est compris dans une fonction d'ailleurs je pense que le problème vient de là

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    x,y,z=input("1"),input("2"),input("3")
     
     
     
    b=liste_des_cheveaux.count(x)
    c=liste_des_cheveaux.count(y)
    d=liste_des_cheveaux.count(z)
     
     
     
    print(b,c,d)
    Or ça me donne constamment 0 alors que pourtant il y a bien les bonnes conditions

    J'ai donc essayé une autre méthode qui consistait à comparer les termes de la suite (au nombre de 10) 1 par 1 avec

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    for i in range(len(liste_des_cheveaux)):
           if(x==liste_des_cheveaux[i]
                   b=1
    Mais là toujours le même problème


    J'ai également plus loin un "if" de test juste pour voir et

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    if(x==1):
            print("X=1")
    quand je rentre x=1 avant dans l'appel de ma fonction ça n'affiche rien

    Voici ma fonction complète avec les déclarations avant

    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
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    liste_des_cheveaux=[]                                  #géré par une autre fonction termine avec 10 termes
    liste_des_cheveaux_apres_la_course=[]
     
    b=0
    c=0
    d=0
     
     
    def pari_et_course(x,y,z):
     
        print(liste_des_cheveaux)
     
     
        if(x==1):           #test
            print("X=1")
     
     
     
        b=liste_des_cheveaux.count(x)
        c=liste_des_cheveaux.count(y)
        d=liste_des_cheveaux.count(z)
     
     
     
        print(b,c,d)
     
        if((x!=y) & (y!=z) & (z!=x) & (d==0) & (b==0) & (c==0)):
     
            for w in range(len(liste_des_cheveaux_apres_la_course)):
                liste_des_cheveaux_apres_la_course.pop()                                                                 ##
            for m in range(len(liste_des_cheveaux)):
                liste_des_cheveaux_apres_la_course.insert(random.randint(0,m),liste_des_cheveaux[m])
     
     
            if((x==liste_des_cheveaux_apres_la_course[7])&(y==liste_des_cheveaux_apres_la_course[8])&(z==liste_des_cheveaux_apres_la_course[9])):
     
                print("Tiercé dans l'ordre")
     
     
            elif(((x==liste_des_cheveaux_apres_la_course[7])|(x==liste_des_cheveaux_apres_la_course[8])|(x==liste_des_cheveaux_apres_la_course[9]))&                                                                     ((y==liste_des_cheveaux_apres_la_course[7])|(y==liste_des_cheveaux_apres_la_course[8])|(y==liste_des_cheveaux_apres_la_course[9]))&((z==liste_des_cheveaux_apres_la_course[7])|(z==liste_des_cheveaux_apres_la_course[8])|(z==liste_des_cheveaux_apres_la_course[9]))):
     
                print("tiercé dans le désordre")
     
            else:
     
                print("Perdu")
     
        else:
     
            print("Mauvaise saisie")
     
     
     
    aa,bb,cc=input("1"),input("2"),input("3")
    pari_et_course(aa,bb,cc)
    Merci de votre aide et du site qui m'a été utile plus d'une fois

  2. #2
    Membre chevronné
    Homme Profil pro
    BTS SN IR
    Inscrit en
    Mai 2017
    Messages
    514
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 26
    Localisation : France, Saône et Loire (Bourgogne)

    Informations professionnelles :
    Activité : BTS SN IR

    Informations forums :
    Inscription : Mai 2017
    Messages : 514
    Par défaut
    Je n'ais pas très bien compris votre problématique étant donné que en lisant en diagonale j'ai l'impression que tout est décousu.

    Vous parlez de tiré au sort mais je ne vous rien de la sorte,en espérant que ceci vous aide
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    >>> import random
    >>> random.sample(range(1, 101), 10)
    [40, 11, 49, 74, 33, 35, 86, 23, 58, 53]
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    if((x!=y) & (y!=z) & (z!=x) & (d==0) & (b==0) & (c==0)):
    je dirais que c'est faux, je pense que vous voulez un un "ET logique" et non un "ET binaire"

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    >>> 3&4
    0
    >>> 3 and 4
    4

  3. #3
    Futur Membre du Club
    Homme Profil pro
    camillelecourt
    Inscrit en
    Décembre 2019
    Messages
    3
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 22
    Localisation : France, Sarthe (Pays de la Loire)

    Informations professionnelles :
    Activité : camillelecourt

    Informations forums :
    Inscription : Décembre 2019
    Messages : 3
    Par défaut
    Avant merci de votre aide :

    Désolé pour votre confusion c'était de ma faute. Le tirage au sort est géré précédament dans une fonction que je n'est pas montré.
    La fonction de Tirage au sort marche bien; Je compte par contre la modifier avec votre méthode bien plus optimisé.
    voici tout le programme :

    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
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    88
    89
    90
    91
    92
    93
    94
    95
    96
    97
    98
    99
    100
    101
     
    import random
    liste_des_cheveaux=[]
    liste_des_cheveaux_apres_la_course=[]
    b,c,d=0,0,0
     
    def tirage_de_nouveau_cheveaux():
        validation_de_numeros_differents=1
        for l in range(len(liste_des_cheveaux)):
            liste_des_cheveaux.pop()
        while(validation_de_numeros_differents==1):
            validation_de_numeros_differents=0
     
     
            for i in range(0,10):
                liste_des_cheveaux.append(random.randint(1,100))
     
     
            for j in range(0,10):
     
                for k in range(0,10):
     
                    if(j!=k):
                            if(liste_des_cheveaux[j]==liste_des_cheveaux[k]):
                                validation_de_numeros_differents=1
            if(validation_de_numeros_differents==1):
                for l in range(len(liste_des_cheveaux)):
     
                    liste_des_cheveaux.pop()
     
     
        nombre_de_terme=len(liste_des_cheveaux)
        for l in range(nombre_de_terme) :
            a=l
            for j in range(nombre_de_terme) :
                if liste_des_cheveaux[a]<liste_des_cheveaux[j] :
                    liste_des_cheveaux[a],liste_des_cheveaux[j]= liste_des_cheveaux[j],liste_des_cheveaux[a]
        print(liste_des_cheveaux)
    #Tire 10 nouveau cheveaux sans numeros identiques
    #et les met danas l'ordre
     
     
    def pari_et_course(x,y,z):
     
        print(liste_des_cheveaux)
     
     
        if(x==1):           #test
            print("X=1")
     
     
     
        b=liste_des_cheveaux.count(x)
        c=liste_des_cheveaux.count(y)
        d=liste_des_cheveaux.count(z)
     
     
     
        print(b,c,d) #####           Avec l'execution b;c;d sont toujours égal à 0
     
        if((x!=y) & (y!=z) & (z!=x) & (d==0) & (b==0) & (c==0)):
     
            for w in range(len(liste_des_cheveaux_apres_la_course)):
                liste_des_cheveaux_apres_la_course.pop()
     
            for m in range(len(liste_des_cheveaux)):
                liste_des_cheveaux_apres_la_course.insert(random.randint(0,m),liste_des_cheveaux[m])
     
            if((x==liste_des_cheveaux_apres_la_course[7])&(y==liste_des_cheveaux_apres_la_course[8])&(z==liste_des_cheveaux_apres_la_course[9])):
     
                print("Tiercé dans l'ordre")
     
            elif(((x==liste_des_cheveaux_apres_la_course[7])|(x==liste_des_cheveaux_apres_la_course[8])|(x==liste_des_cheveaux_apres_la_course[9]))&((y==liste_des_cheveaux_apres_la_course[7])|(y==liste_des_cheveaux_apres_la_course[8])|(y==liste_des_cheveaux_apres_la_course[9]))&((z==liste_des_cheveaux_apres_la_course[7])|(z==liste_des_cheveaux_apres_la_course[8])|(z==liste_des_cheveaux_apres_la_course[9]))):
     
                print("tiercé dans le désordre")
     
            else:
     
                print("Perdu")
     
        else:
     
            print("Mauvaise saisie")
     
     
     
     
     
     
     
     
    tirage_de_nouveau_cheveaux()
     
    aa,bb,cc=input("1"),input("2"),input("3")
     
    pari_et_course(aa,bb,cc)
     
     
     
    print(liste_des_cheveaux)
    print(liste_des_cheveaux_apres_la_course)
    Je pense donc que le "count" ne marche pas
    Mais je ne suis pas du tout à l'abri d'une erreur bête je suis débutant sur python.

  4. #4
    Membre prolifique
    Avatar de Sve@r
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Février 2006
    Messages
    12 840
    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 840
    Billets dans le blog
    1
    Par défaut
    Bonjour
    C'est bien compliqué ce code. Par exemple pour vider la liste, pourquoi boucler sur une liste_des_chevaux.pop() alors qu'on peut écrire directement liste_des_chevaux.clear() ou bien del liste_des_chevaux[:] ou bien encore plus simple liste_des_chevaux=list() (la création d'un nouveau truc sur une variable contenant un ancien truc libère automatiquement l'ancien truc) ?
    Et pour avoir 10 (ou n) n° de chevaux (sans "e") différents, plutôt que de recommencer p fois jusqu'à obtenir une liste composée de n° différents (on dirait le test du singe qui tape sur une machine à écrire de façon infinie jusqu'à ce qu'il réécrive Hamlet) on peut (si on ne peut pas utiliser le random.sample()) utiliser un set(). Un set c'est un ensemble d'éléments tous différents. Si on lui ajoute un élément qui existe déjà il l'ignore.
    Ainsi la création de cette liste pourrait-être tout simplement
    Code python : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    liste_des_chevaux=set()
    while len(liste_des_chevaux) < 10:
        liste_des_chevaux.add(random.randint(1, 100))
    liste_des_chevaux=sorted(liste_des_chevaux)
    Et si on peut utiliser random.sample alors toute la fonction s'écrit liste_des_chevaux=sorted(random.sample(range(1, 100), 10)).

    Et plutôt que ces boucles imbriquées, il existe l'opérateur "in" pour détecter si un truc est/n'est pas dans un itérable. N'oublions pas qu'en Python, "simple is better"

    Citation Envoyé par camillelecourt Voir le message
    Je pense donc que le "count" ne marche pas
    Bien vu. Effectivement cette fonction utilisée probablement des milliers de fois dans des milliers de codes Python ne fonctionne pas et tu es le premier qui s'en aperçoit depuis 1993. Tu es le plus perspicace de tous les dev Python du monde

    Citation Envoyé par camillelecourt Voir le message
    Mais je ne suis pas du tout à l'abri d'une erreur bête je suis débutant sur python.
    Oui, c'est mieux de dire directement ça plutôt que d'affirmer qu'une fonction native Python ne fonctionne pas.
    Au-lieu d'écrire if(x==1): print("X=1") qui, effectivement, est déjà l'ébauche d'une première idée mais bien incomplète (manifestement si tu ne vois pas le message c'est que "x" ne vaut pas 1), pourquoi ne pas écrire directement print("x=", x) pour voir ce qui entre. Et même print("x=", x, type(x)) pour mieux voir ce qui entre ?

    Citation Envoyé par flapili Voir le message
    "bool" est plus visuel
    Code python : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    >>> bool(3 and 4)
    True
    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
    Futur Membre du Club
    Homme Profil pro
    camillelecourt
    Inscrit en
    Décembre 2019
    Messages
    3
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 22
    Localisation : France, Sarthe (Pays de la Loire)

    Informations professionnelles :
    Activité : camillelecourt

    Informations forums :
    Inscription : Décembre 2019
    Messages : 3
    Par défaut
    Merci de votr aide j'ai finalement compris
    ça vennait des argument de ma fonction qui était 'str' il suffisait de le metre en 'int et c 'était bon
    Voici mon programme

    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
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    88
    89
    90
    91
    92
    93
    94
    95
    96
    import random
    liste_des_chevaux=[]
    liste_des_chevaux_apres_la_course=[]
    text="Course de cheveaux"
     
     
    def tirage_de_nouveau_chevaux():
        validation_de_numeros_differents=1
     
     
     
        while(validation_de_numeros_differents==1):
            validation_de_numeros_differents=0
            liste_des_chevaux.clear()
     
            for i in range(0,10):
                liste_des_chevaux.append(random.randint(1,100))
     
     
            for j in range(0,10):
     
                for k in range(0,10):
     
                    if(j!=k):
                            if(liste_des_chevaux[j]==liste_des_chevaux[k]):
                                validation_de_numeros_differents=1
     
     
     
        nombre_de_terme=len(liste_des_chevaux)
        for l in range(nombre_de_terme) :
            a=l
            for j in range(nombre_de_terme) :
                if liste_des_chevaux[a]<liste_des_chevaux[j] :
                    liste_des_chevaux[a],liste_des_chevaux[j]= liste_des_chevaux[j],liste_des_chevaux[a]
        print(liste_des_chevaux)
    #Tire 10 nouveau cheveaux sans numeros identiques
    #et les met danas l'ordre
     
     
    def pari_et_course(x,y,z):
        global b,c,d,liste_des_chevaux,liste_des_chevaux_apres_la_course
        print(liste_des_chevaux)
        x,y,z=int(x),int(y),int(z)
     
        b=liste_des_chevaux.count(x)
        c=liste_des_chevaux.count(y)
        d=liste_des_chevaux.count(z)
     
     
     
        if((x!=y) & (y!=z) & (z!=x) & (d!=0) & (b!=0) & (c!=0)):
     
     
            liste_des_chevaux_apres_la_course.clear()
     
     
            #for m in range(len(liste_des_chevaux)):
               #liste_des_chevaux_apres_la_course.insert(random.randint(0,m),liste_des_chevaux[m])
            liste_des_chevaux_apres_la_course=liste_des_chevaux
     
     
     
            if((x==liste_des_chevaux_apres_la_course[7])&(y==liste_des_chevaux_apres_la_course[8])&(z==liste_des_chevaux_apres_la_course[9])):
                text="Tiercé dans l'ordre"
                print("Tiercé dans l'ordre")
     
            elif(((x==liste_des_chevaux_apres_la_course[7])|(x==liste_des_chevaux_apres_la_course[8])|(x==liste_des_chevaux_apres_la_course[9]))&((y==liste_des_chevaux_apres_la_course[7])|(y==liste_des_chevaux_apres_la_course[8])|(y==liste_des_chevaux_apres_la_course[9]))&((z==liste_des_chevaux_apres_la_course[7])|(z==liste_des_chevaux_apres_la_course[8])|(z==liste_des_chevaux_apres_la_course[9]))):
                text="Tiercé dans le désordre"
                print("tiercé dans le désordre")
     
            else:
                text="Perdu"
                print("Perdu")
     
        else:
            text="Mauvaise saisie"
            print("Mauvaise saisie")
     
     
     
     
     
     
     
     
    tirage_de_nouveau_chevaux()
     
    aa,bb,cc=input("1"),input("2"),input("3")
     
    pari_et_course(aa,bb,cc)
     
     
     
    print(liste_des_chevaux)
    print(liste_des_chevaux_apres_la_course)
    Tout marche et c'est grâce à vous que je l'ai comprit
    Et c'était bien une erreur bête


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

Discussions similaires

  1. Soucis avec les arguments d'une fonction
    Par SRV33 dans le forum Général Python
    Réponses: 4
    Dernier message: 15/08/2016, 19h53
  2. Réponses: 4
    Dernier message: 14/03/2009, 19h56
  3. Connaitre les arguments d'une fonction d'une DLL
    Par dhoorens dans le forum C++
    Réponses: 3
    Dernier message: 26/03/2008, 15h49
  4. [Langage][Classe][Methode]Comment récuperer les arguments d'une fonction ?
    Par FremyCompany dans le forum Général JavaScript
    Réponses: 2
    Dernier message: 24/07/2006, 16h06
  5. [VBA-E] Lister les arguments d'une fonction
    Par laloune dans le forum Macros et VBA Excel
    Réponses: 3
    Dernier message: 26/02/2006, 12h04

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