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 de type renvoyé


Sujet :

Python

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Nouveau candidat au Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Décembre 2019
    Messages
    2
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 25
    Localisation : France, Manche (Basse Normandie)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Décembre 2019
    Messages : 2
    Par défaut Problème de type renvoyé
    Bonsoir, je développe un code pour ma mère suivant un algorithme précis mais ça n'est pas l'important.
    J'ai fini toutes les fonctions et maintenant je dois associer une chaine de caractères à un nombre(int) mais il y a problème, ça me renvoie à la fin un 'NoneType'.
    Je bûche sur le problème depuis + d'une journée sans trouver de solution et l'origine du problème (je suis très débutant), merci à vous de m'aiguiller
    Voici le code en question :
    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
     
    def converter(letter): ##convertisseur lettre => nombre
        alphabet = {
        "a":1,"b":2,"c":3,"d":4,"e":5,"f":6,"g":7,"h":8,"i":9,"j":10,"k":11,"l":12,"m":13,"n":14,"o":15,"p":16,"q":17,"r":18,"s":19,"t":20,"u":21,"v":22,"w":23,"x":24,"y":25,"z":26
        }
        for i in alphabet:
            if letter == i:
                return(alphabet[i])
            else:
                pass
     
    def pierre_nombre(nombre):  #Fonction qui passera le chiffre au nom
        alphabete = {
        "1":"Quartz Rose","2":"Japse rouge","3":"Calcédoine","4":"Jade","5":"Émeraude","6":"Grenat","7":"Citrine","8":"Obsidienne","9":"Aigue marine","10":"Rhodocrosite","11":"Cornaline","12":"Ambre","13":"Hématite","14":"Améthyste","15":"Malachite","16":"Opale","17":"Turquoise","18":"Pierre de lune","19":"Topaze","20":"Lapis Lazuli","21":"Tourmaline","22":"Cristal de roche","23":"Azurite","24":"Amazonite","25":"Oeil de tigre","26":"Pyrite","27":"Fluorine","28":"Perle","29":"Sodalite","30":"Quartz fumé","31":"Pierre de lune","32":"Mookaite","33":"Quartz tourmaline"
        }
        for j in alphabete:
            if nombre == j:
                return(alphabete[j])
            else:
                pass
     
     
    def pierre_sommet(prenomuser1,prenomuser2,prenomuser3,nommere,nompere): #Fonction qui associe un nombre qui correspond à une certaine pierre (en fonction de l'algorithme de base)
            somme = converter(prenomuser1[len(prenomuser1)-1]) + converter(prenomuser2[len(prenomuser2)-1]) + converter(prenomuser3[len(prenomuser3)-1]) + converter(nompere[len(nompere)-1]) + converter(nommere[len(nommere)-1])
            if somme > 33:
                somme = [int(i) for i in str(somme)]
                #print('La pierre de sommet est : ')
                somme = sum(somme)
                #print(somme)
            else:
                print(somme)
     
            return somme
     
    pierre_sommet("jules","yves","jean","akkeb","goyat")
     
    def resultats(sommet): #Fonction qui est censé me donner le nom de la pierre
        print('La pierre de sommet est : ')
        resultat_sommet = pierre_nombre(sommet)
        print(type(resultat_sommet))
        print(resultat_sommet)
     
    resultats(pierre_sommet("jules","yves","jean","akkeb","goyat"))
    Voilà la réponse que me donne le script :
    La pierre de sommet est :
    <class 'NoneType'>
    None

  2. #2
    Membre prolifique
    Avatar de Sve@r
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Février 2006
    Messages
    12 832
    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 832
    Billets dans le blog
    1
    Par défaut
    Bonjour

    Ta fonction "pierre_nombre" reçoit un nombre (int) et elle compare ce nombre avec les clefs de "alphabete" qui sont des strings.
    Or en Python, tout comme dans la majorité des langages, 11 == "11" est faux. Donc elle ne trouve rien, ne renvoie rien et une fonction qui ne renvoie rien renvoie quand-même None.

    Sinon tu pourrais nous expliquer ce else: pass situé dans cette même fonction ?
    Citation Envoyé par Ruliooo Voir le message
    Je bûche sur le problème depuis + d'une journée sans trouver de solution et l'origine du problème (je suis très débutant),
    Pense à print(). C'est ultra pratique pour comprendre ce qui se passe quand ça se passe mal. Ex print(nombre, j, nombre == j) dans la boucle t'aurait évité de perdre + d'une journée (ça t'aurait même évité de perdre + de 3 minutes).

    Accessoirement un dictionnaire dont les clefs sont des nombres qui se suivent (ou des strings représentant des nombres qui se suivent) c'est juste un tuple ou une liste en plus compliqué et sans plus-value.
    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
    Nouveau candidat au Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Décembre 2019
    Messages
    2
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 25
    Localisation : France, Manche (Basse Normandie)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Décembre 2019
    Messages : 2
    Par défaut
    Citation Envoyé par Sve@r Voir le message
    Bonjour

    Ta fonction "pierre_nombre" reçoit un nombre (int) et elle compare ce nombre avec les clefs de "alphabete" qui sont des strings.
    Or en Python, tout comme dans la majorité des langages, 11 == "11" est faux. Donc elle ne trouve rien, ne renvoie rien et une fonction qui ne renvoie rien renvoie quand-même None.

    Sinon tu pourrais nous expliquer ce else: pass situé dans cette même fonction ?

    Pense à print(). C'est ultra pratique pour comprendre ce qui se passe quand ça se passe mal. Ex print(nombre, j, nombre == j) dans la boucle t'aurait évité de perdre + d'une journée (ça t'aurait même évité de perdre + de 3 minutes).

    Accessoirement un dictionnaire dont les clefs sont des nombres qui se suivent (ou des strings représentant des nombres qui se suivent) c'est juste un tuple ou une liste en plus compliqué et sans plus-value.
    Salut, merci pour ta réponse, effectivement le problème venait des " " dans les clés de alphabete, alors que j'avais essayé sans mais il devait y avoir un autre problème et j'ai tout tourné mais bref maintenant tout fonctionne !
    Sinon pour le print() j'ai pris cette habitude mais là je ne voyais pas d'où venais le problème (j'avais du oublier de print 1 élément), mais merci encore

    La pierre de base est :
    H�matite
    La pierre de sommet est :
    Rhodocrosite
    La pierre d'appel est :
    Azurite
    La pierre de chemin de vie est :
    Cornaline
    La pierre de personnalite est :
    Cristal de roche
    La pierre d'expression est :
    Aigue marine
    La pierre de voeux est :
    Obsidienne
    La pierre de touche est :
    H�matite

  4. #4
    Expert confirmé

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

    Informations forums :
    Inscription : Octobre 2008
    Messages : 4 307
    Par défaut
    Salut,

    Je te donne le début.

    Pas bon:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
     
    def converter(letter): ##convertisseur lettre => nombre
        alphabet = {
        "a":1,"b":2,"c":3,"d":4,"e":5,"f":6,"g":7,"h":8,"i":9,"j":10,"k":11,"l":12,"m":13,"n":14,"o":15,"p":16,"q":17,"r":18,"s":19,"t":20,"u":21,"v":22,"w":23,"x":24,"y":25,"z":26
        }
        for i in alphabet:
            if letter == i:
                return(alphabet[i])
            else:
                pass
    OK:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    import string
    def converter(letter):
        return string.ascii_lowercase.index(letter)
    Pas bon:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
     
    def pierre_nombre(nombre):  #Fonction qui passera le chiffre au nom
        alphabete = {
        "1":"Quartz Rose","2":"Japse rouge","3":"Calcédoine","4":"Jade","5":"Émeraude","6":"Grenat","7":"Citrine","8":"Obsidienne","9":"Aigue marine","10":"Rhodocrosite","11":"Cornaline","12":"Ambre","13":"Hématite","14":"Améthyste","15":"Malachite","16":"Opale","17":"Turquoise","18":"Pierre de lune","19":"Topaze","20":"Lapis Lazuli","21":"Tourmaline","22":"Cristal de roche","23":"Azurite","24":"Amazonite","25":"Oeil de tigre","26":"Pyrite","27":"Fluorine","28":"Perle","29":"Sodalite","30":"Quartz fumé","31":"Pierre de lune","32":"Mookaite","33":"Quartz tourmaline"
        }
        for j in alphabete:
            if nombre == j:
                return(alphabete[j])
            else:
                pass
    OK:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
    def pierre_nombre(nombre):
        cailloux = (None, "Quartz Rose", "Japse rouge", "Calcédoine", "Jade", "Émeraude", 
                    "Grenat", "Citrine", "Obsidienne", "Aigue marine", "Rhodocrosite", 
                    "Cornaline", ".....", "Quartz tourmaline")
        return cailloux[nombre]
    Tu devrais pouvoir faire la suite avec cela.

Discussions similaires

  1. [ tinyint et char ] problème de type
    Par shirya dans le forum Installation
    Réponses: 3
    Dernier message: 05/11/2005, 07h08
  2. [debutant] problème avec type à utiliser
    Par mlequim dans le forum Autres SGBD
    Réponses: 2
    Dernier message: 15/07/2005, 16h08
  3. Problème de type chaîne
    Par champijulie dans le forum PostgreSQL
    Réponses: 4
    Dernier message: 12/05/2005, 20h23
  4. Réponses: 4
    Dernier message: 30/01/2005, 14h23
  5. [Sybase] Problème de type sous ASE
    Par Hotchotte dans le forum Sybase
    Réponses: 1
    Dernier message: 18/12/2004, 11h04

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