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 :

Problème avec fonction tuple sur Python 3.4.1


Sujet :

Python

  1. #1
    Candidat au Club
    Homme Profil pro
    Lycéen
    Inscrit en
    Décembre 2014
    Messages
    3
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Lycéen

    Informations forums :
    Inscription : Décembre 2014
    Messages : 3
    Points : 3
    Points
    3
    Par défaut Problème avec fonction tuple sur Python 3.4.1
    Je dois faire un mastermind pour mon projet de terminale S mais en réinstallant python j'ai eu un problème avec mon programme à la ligne 67. Python affiche "TypeError: 'NoneType' object is not iterable".

    Désolé d'avoir mis ce post dans ce topic mais il m'était impossible de le post dans Général.

    Merci de votre aide.

    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
    # Voici la fonction qui présente le jeu et qui propose au joueur de voir les règles.
    def Present():
        print("Le Mastermind est un jeu de société, de réflexion, et de déduction, inventé par Mordecai Meirowitz en 1962")
        print("Voulez-vous voir les règles? Si oui ecrivez 'ok', si non tapez sur une touche quelconque, puis appuyez sur la touche 'Entrée'.")
        Ouiounon = input()
        if Ouiounon == 'ok':
            print("L'ordinateur choisit une combinaison de quatre chiffres allant de 1 à 4")
            print("Le joueur doit ensuite découvrir cette combinaison en proposant des combinaisons de chiffres qu'il crées,")
            print("Pour l'aider, l'ordinateur indiquera le nombre de chiffres bien et mal positionnés de la combinaison,")
            print("Le nombre de chiffres absents de la combinaison ne sera en revanche pas donné.")
            print("")
     
    #Voici la fonction qui gère les erreurs de saisie.
    def Erreur(Liste):
        try:
            Numero = int(input())
            while (Numero < 1) or (Numero > 4) or (Numero != int(Numero)):
                Numero = int(input("Tu dois entrer un entier naturel compris entre 1 et 4, entre un autre chiffre: "))
        except (ValueError, TypeError):
            print("Erreur lors de la lecture de ton chiffre,")
            print("Tu dois entrer un entier naturel compris entre 1 et 4, entre un autre chiffre: ")
            Erreur(Liste)
     
     
    # A l'intérieur de la boucle principale, on insère une fonction qui compte et affiche les chiffres bien placés.
    def Bienplaces():
        Bien = 0
        for b in range(Nombre):
            if Reponse[b] == Code_bis[b]:
                Bien += 1
                Code_bis[b] = -98
                Reponse[b] = -38
        print("Appuie" , Bien, "fois sur le bouton du bas de la brique (Nombre de biens placés).")
        return Bien
     
    # Ainsi qu'une fonction qui compte et affiche les chiffres mal placés.
    def Malplaces():
        Mal = 0
        for i in range(0, 4, 1):
            for j in range(0, 4, 1):
                if (Code_bis[i] == Reponse[j]) and (i != j): 
                    Mal += 1
                    Code_bis[i] = -27
                    Reponse[j] = -12  
        print("Appuie" , Mal, "fois sur le bouton du milieu de la brique (Nombre de mal placés).")
        return Mal
     
     
     
    # Corps du Programme:
    # On importe les fonctions "Aléatoire" pour que l'ordinateur génère le code à trouver.
    from random import *
    Present()
    Compteur = 0
    Nombre = 4
    Nbmax = 4
    Essaismax = int(input("Entrez le nombre d'essais maximum pour trouver une combinaison : "))
    x = 0
    print("")
    print("Entrez votre combinaison.")
     
    # Ceci est la boucle qui génère le Code, en prévoyant les erreurs.
    Code = [0] * 4
    for x in range(0, 4 ,1):
        Code = Erreur(Code)
     
    # Ceci est la fonction "tuple" qui rend invariable le Code.
    tupCode = tuple(Code)
    print("")
    print("Vous devez trouver la combinaison du joueur en" , Essaismax, " essais maximum.")
    print("")
     
    # Ceci est la boucle des propositions du joueur, c'est la boucle principale du programme.
    while Compteur < Essaismax :
        print("Entrez une combinaison.")
        Code_bis = list(tupCode)
     
    # Ceci est la boucle qui génère la Reponse du joueur, en prévoyant les erreurs.    
        Reponse = [0] * 4
        for x in range(0, 4 ,1):
            Reponse = Erreur(Reponse)
        print(Reponse)
     
    # On appelle les fonctions qui "diagnostiquent" la Reponse.
        Bien = Bienplaces()
        Mal = Malplaces()
     
    # Enfin, voici le compteur d'essais et le  message de réponse qui s'affichent en fin de boucle.
        Trouve = (Bien == Nombre)
        if Trouve:
            print("Bravo, tu as trouvé la bonne combinaison! En seulement" , Compteur + 1, "essais!")
            Compteur = 1000
        elif (Essaismax - Compteur - 1 != 0):
            print("Essaie encore, il te reste encore" , Essaismax - Compteur - 1, "essais.")
        Compteur +=  1
    if (Essaismax - Compteur == 0) and (not Trouve):
        print("Tu as épuisé tous tes essais -----> Perdu! La bonne combinaison était:" , Code, "!  Dommage!")

  2. #2
    Membre expérimenté Avatar de plxpy
    Homme Profil pro
    Ingénieur géographe
    Inscrit en
    Janvier 2009
    Messages
    792
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 59
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Ingénieur géographe
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Janvier 2009
    Messages : 792
    Points : 1 481
    Points
    1 481
    Par défaut
    Bonjour

    ta fonction Erreur ne retourne rien explicitement donc c'est None qui est retourné.

    Comme le dit clairement le message d'erreur, tuple(qqch) fonctionne si qqch est un "iterable" (exemple une chaine ou une liste) :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    >>> tuple('developpez')
    ('d', 'e', 'v', 'e', 'l', 'o', 'p', 'p', 'e', 'z')
    >>> tuple([1,2,3])
    (1, 2, 3)
    mais avec None, ça coince :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    >>> tuple(None)
    Traceback (most recent call last):
      File "<stdin>", line 1, in <module>
    TypeError: 'NoneType' object is not iterable
    >>>
    "La simplicité ne précède pas la complexité, elle la suit." - Alan J. Perlis
    DVP ? Pensez aux cours et tutos, ainsi qu'à la FAQ !

  3. #3
    Expert éminent

    Homme Profil pro
    Inscrit en
    Octobre 2008
    Messages
    4 300
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations forums :
    Inscription : Octobre 2008
    Messages : 4 300
    Points : 6 780
    Points
    6 780
    Par défaut
    Rien à voir avec la réinstalle de Python.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
    Code = [0] * 4
    for x in range(0, 4 ,1):
        Code = Erreur(Code)
     
    tupCode = tuple(Code)
    Erreur() est une fonction qui retourne None, donc tuple(Code) lève une erreur.

  4. #4
    Candidat au Club
    Homme Profil pro
    Lycéen
    Inscrit en
    Décembre 2014
    Messages
    3
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Lycéen

    Informations forums :
    Inscription : Décembre 2014
    Messages : 3
    Points : 3
    Points
    3
    Par défaut
    Je suis vraiment désolé mais que dois-je modifier dans mon programme?

  5. #5
    Expert éminent

    Homme Profil pro
    Inscrit en
    Octobre 2008
    Messages
    4 300
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations forums :
    Inscription : Octobre 2008
    Messages : 4 300
    Points : 6 780
    Points
    6 780
    Par défaut
    On ne comprend pas ce que tu veux faire avec ceci:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
    Code = [0] * 4
    for x in range(0, 4 ,1):
        Code = Erreur(Code)
     
    tupCode = tuple(Code)
    alors que plus loin tu as encore ceci:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
    # Ceci est la boucle qui génère la Reponse du joueur, en prévoyant les erreurs.    
        Reponse = [0] * 4
        for x in range(0, 4 ,1):
            Reponse = Erreur(Reponse)
        print(Reponse)

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

Discussions similaires

  1. Réponses: 4
    Dernier message: 20/06/2008, 12h56
  2. Problème avec fonction
    Par Goundy dans le forum C
    Réponses: 24
    Dernier message: 01/10/2005, 20h17
  3. [MFC][WINSOCK] Problème avec fonction recv
    Par Le Farfadet dans le forum MFC
    Réponses: 4
    Dernier message: 23/09/2005, 11h00
  4. Problème avec fonction d'envoie de mail
    Par zyg dans le forum Réseau/Web
    Réponses: 1
    Dernier message: 23/02/2005, 08h48
  5. [Requête] Problème avec fonction "DATE_FORMAT()"
    Par sekiryou dans le forum Requêtes
    Réponses: 4
    Dernier message: 11/01/2005, 21h52

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