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 :

Noms de variables valides


Sujet :

Python

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre habitué
    Homme Profil pro
    Webmaster
    Inscrit en
    Mars 2018
    Messages
    11
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 58
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Webmaster

    Informations forums :
    Inscription : Mars 2018
    Messages : 11
    Par défaut Noms de variables valides
    Bonjour

    Je suis vraiment débutant en Python bien que je ne sois pas vraiment un débutant en programmation sans vraiment maîtriser un langage (JScript notamment)

    Je suis en train de préparer une sélection en vue d'une formation professionnelle et je me heurte à un petit problème

    Lors de la création de variables, le nom de la variable doit toujours commencer par une lettre et ne peut pas contenir d’espaces, bien que des chiffres et des traits de soulignement puissent également y figurer.

    Je dois créer une fonction qui renvoie true si un nom de variable donné est valide, sinon elle renvoie false

    Ci dessous mon code

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    def variable_valid(var):
        str = 'MonNom'
    print(str.isidentifier())
     
    str = 'Mon Nom'
    print(str.isidentifier())
     
    str = 'Mes2noms'
    print(str.isidentifier())
     
    str = ''
    print(str.isidentifier())
    Je travaille sur le site EDABIT

    et j'ai cela comme résultat

    ERREUR : Retraçage :
    dans <module>
    TypeError : le descripteur 'isidentifier' de l’objet 'str' a besoin d’un argument


    Ce que je n'arrive pas à comprendre c'est pourquoi mon code fonctionne pourtant dans un compilateur en ligne (https://www.onlinegdb.com/) mais seulement si je retire la première ligne

    def variable_valid(var):

    En vous remerciant par avance si vous pouvez me donner une piste

    Cordialement

  2. #2
    Membre Expert
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Février 2003
    Messages
    1 603
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Industrie

    Informations forums :
    Inscription : Février 2003
    Messages : 1 603
    Par défaut
    Bonjour,

    éditez votre message SVP pour que le code soit correctement encapsulé dans un véritable bloc de code.

    Là, c'est impossible de voir où peut se nicher l'erreur.

  3. #3
    Expert confirmé Avatar de papajoker
    Homme Profil pro
    Développeur Web
    Inscrit en
    Septembre 2013
    Messages
    2 323
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Nièvre (Bourgogne)

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Septembre 2013
    Messages : 2 323
    Par défaut
    bonjour

    il faut bien fermer la balise CODE avec un slah [/CODE]Sans le formatage, on ne comprend même pas ce qu'est ta fonction variable_valid(var):, son corps ne semble pas défini et elle n'est jamais appelée ?
    Si, le code fonctionne sans cette ligne, c'est que tu n'as pas défini le corps de cette fonction

    ps: on utilise les tabulations pour définir un block en python {...} en js

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    def variable_valid(var):
        if var.isidentifier():
            print(var, "est valide")
        else:
            print(var, "pas bon")
     
    variable_valid("nom@truc")
    variable_valid("nom_truc")
     
    machaine = 'Mon Nom'   # ps: ne pas utiliser "str" comme nom de variable, c'est une classe déjà définie
    print(machaine.isidentifier())

  4. #4
    Membre habitué
    Homme Profil pro
    Webmaster
    Inscrit en
    Mars 2018
    Messages
    11
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 58
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Webmaster

    Informations forums :
    Inscription : Mars 2018
    Messages : 11
    Par défaut
    Citation Envoyé par papajoker Voir le message
    bonjour

    il faut bien fermer la balise CODE avec un slah [/CODE]Sans le formatage, on ne comprend même pas ce qu'est ta fonction variable_valid(var):, son corps ne semble pas défini et elle n'est jamais appelée ?
    Si, le code fonctionne sans cette ligne, c'est que tu n'as pas défini le corps de cette fonction

    ps: on utilise les tabulations pour définir un block en python {...} en js

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    def variable_valid(var):
        if var.isidentifier():
            print(var, "est valide")
        else:
            print(var, "pas bon")
     
    variable_valid("nom@truc")
    variable_valid("nom_truc")
     
    machaine = 'Mon Nom'   # ps: ne pas utiliser "str" comme nom de variable, c'est une classe déjà définie
    print(machaine.isidentifier())

    Merci de votre réponse

    Evidemment cela fonctionne mieux dans le compilateur

    Mais sur EDABIT non car il faut juste retourner false ou true

    Mais je vais m'inspirer de votre code pour arriver à comprendre

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    def variable_valid(var):
        var=0
    var = "MonNom"
    print(var.isidentifier())
     
    var = "Mon Nom"
    print(var.isidentifier())
     
    var = "Mes2noms"
    print(var.isidentifier())
     
    var = " "
    print(var.isidentifier())
    En faisant cela, cela marche dans le compilateur mais pas encore sur EDABIT où le résultat est le suivant

    Vrai
    Faux
    Vrai
    Faux
    ÉCHEC : Aucun ne doit être égal à True
    ERREUR : Retraçage :
    dans <module>
    Fichier « ./frameworks/python/cw-2.py », ligne 28, dans assert_equals
    expect(actual == expected, message, allow_raise)
    Fichier « ./frameworks/python/cw-2.py », ligne 18, dans expect
    raise AssertException(message)
    cw-2. AssertException : Aucun ne doit être égal à True


    Encore merci

    Cordialement

  5. #5
    Membre habitué
    Homme Profil pro
    Webmaster
    Inscrit en
    Mars 2018
    Messages
    11
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 58
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Webmaster

    Informations forums :
    Inscription : Mars 2018
    Messages : 11
    Par défaut
    Citation Envoyé par Arioch Voir le message
    Bonjour,

    éditez votre message SVP pour que le code soit correctement encapsulé dans un véritable bloc de code.

    Là, c'est impossible de voir où peut se nicher l'erreur.
    Merci de votre réponse
    , je vais essayer de faire le nécessaire
    CDLT

  6. #6
    Membre habitué
    Homme Profil pro
    Webmaster
    Inscrit en
    Mars 2018
    Messages
    11
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 58
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Webmaster

    Informations forums :
    Inscription : Mars 2018
    Messages : 11
    Par défaut Nom de variable valide
    Bonjour

    Je suis vraiment débutant en Python bien que je ne sois pas vraiment un débutant en programmation sans vraiment maîtriser un langage (JScript notamment)

    Je suis en train de préparer une sélection en vue d'une formation professionnelle et je me heurte à un petit problème

    Lors de la création de variables, le nom de la variable doit toujours commencer par une lettre et ne peut pas contenir d’espaces, bien que des chiffres et des traits de soulignement puissent également y figurer.

    Je dois créer une fonction qui renvoie true si un nom de variable donné est valide, sinon elle renvoie false

    Ci dessous mon code

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    def variable_valid(var):
        str = 'MonNom'
    print(str.isidentifier())
     
    str = 'Mon Nom'
    print(str.isidentifier())
     
    str = 'Mes2noms'
    print(str.isidentifier())
     
    str = ''
    print(str.isidentifier())
    Je travaille sur le site EDABIT

    et j'ai cela comme résultat

    ERREUR : Retraçage :
    dans <module>
    TypeError : le descripteur 'isidentifier' de l’objet 'str' a besoin d’un argument
    Ce que je n'arrive pas à comprendre c'est pourquoi mon code fonctionne pourtant dans un compilateur en ligne (https://www.onlinegdb.com/) mais seulement si je retire la première ligne

    def variable_valid(var):

    En vous remerciant par avance si vous pouvez me donner une piste

    Cordialement

  7. #7
    Expert confirmé Avatar de papajoker
    Homme Profil pro
    Développeur Web
    Inscrit en
    Septembre 2013
    Messages
    2 323
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Nièvre (Bourgogne)

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Septembre 2013
    Messages : 2 323
    Par défaut
    Tu pouvais simplement ré-éditer ton premier message

    Comme dit plus haut :
    - str est une classe en python donc ce nom de variable est invalide (en js on ne va pas utiliser String comme nom de variable)
    - ta fonction n'a aucun sens

    Tu fais du js ? j'ai un doute. Tu as écris

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    function variable_valid(var){
        str = 'MonNom'   // ici, la variable est LOCALE à la fonction
        // On n'utilise JAMAIS le paramètre "var" ?????
        // accessoirement une fonction qui ne fait rien (mais, pourquoi pas)
    }
     
    // du code qui n'utilise jamais la fonction ...
    String = 'untruc'
    String.toUpperCase()
    Donc, il faut que tu te fasses un tuto grand débutant

    Je dois créer une fonction qui renvoie true si un nom de variable donné est valide, sinon elle renvoie false
    créer une fonction qui existe déjà ????

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    def variable_valid(var):
        return var.isidentifier())
     
    # aucun intéret
     
    print(variable_valid("mon@truc"))
    print("mon@truc".isidentifier())

  8. #8
    Membre habitué
    Homme Profil pro
    Webmaster
    Inscrit en
    Mars 2018
    Messages
    11
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 58
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Webmaster

    Informations forums :
    Inscription : Mars 2018
    Messages : 11
    Par défaut
    Citation Envoyé par papajoker Voir le message
    Tu pouvais simplement ré-éditer ton premier message

    Comme dit plus haut :
    - str est une classe en python donc ce nom de variable est invalide (en js on ne va pas utiliser String comme nom de variable)
    - ta fonction n'a aucun sens

    Tu fais du js ? j'ai un doute. Tu as écris

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    function variable_valid(var){
        str = 'MonNom'   // ici, la variable est LOCALE à la fonction
        // On n'utilise JAMAIS le paramètre "var" ?????
        // accessoirement une fonction qui ne fait rien (mais, pourquoi pas)
    }
     
    // du code qui n'utilise jamais la fonction ...
    String = 'untruc'
    String.toUpperCase()
    Donc, il faut que tu te fasses un tuto grand débutant


    créer une fonction qui existe déjà ????

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    def variable_valid(var):
        return var.isidentifier())
     
    # aucun intéret
     
    print(variable_valid("mon@truc"))
    print("mon@truc".isidentifier())
    la première ligne m'est "imposée"

    C'est un test pour accéder à une formation professionnelle.

    J'ai déjà fait un tutoriel rapide (https://edabit.com/tutorial/python) (tellement rapide qu'il ne parlait pas des indentations !
    Je n'ai pas vraiment le temps d'aller plus loin mais si je n'y arrive pas, je vais devoir m'y résoudre

    J'ai déjà fait du JS mais il y a longtemps et quand on pratique pas on peut oublier même les bases (en plus, il y a des variantes selon les langages)

    Merci de tes réponses

  9. #9
    Expert confirmé Avatar de papajoker
    Homme Profil pro
    Développeur Web
    Inscrit en
    Septembre 2013
    Messages
    2 323
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Nièvre (Bourgogne)

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Septembre 2013
    Messages : 2 323
    Par défaut
    Ici, tu n'as corrigé qu'une seule chose : le nom de ta variable OK
    Mais pour le reste, toujours la même chose, ici c'est une base de la programmation (comme en JS)

    - Tu définis une fonction qui ne fait rien (donc à 100km de ce qui est demandé)
    - "var" dans ta fonction est local , donc pas la même variable qu'en dehors de cette fonction (voir cours portée des variables)
    - jamais tu ne testes ta fonction dans ton code ? donc tu ne risques pas d'avancer

  10. #10
    Membre Expert
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Février 2003
    Messages
    1 603
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Industrie

    Informations forums :
    Inscription : Février 2003
    Messages : 1 603
    Par défaut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    for val in ('Toto','toto','T0T0','To To', 'To_To', 'to-to', ''):
        print(f'"{val}" -> {val.isidentifier()}')
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
     
    "Toto" -> True
    "toto" -> True
    "T0T0" -> True
    "To To" -> False
    "To_To" -> True
    "to-to" -> False
    "" -> False

  11. #11
    Membre habitué
    Homme Profil pro
    Webmaster
    Inscrit en
    Mars 2018
    Messages
    11
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 58
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Webmaster

    Informations forums :
    Inscription : Mars 2018
    Messages : 11
    Par défaut
    Citation Envoyé par papajoker Voir le message
    Ici, tu n'as corrigé qu'une seule chose : le nom de ta variable OK
    Mais pour le reste, toujours la même chose, ici c'est une base de la programmation (comme en JS)

    - Tu définis une fonction qui ne fait rien (donc à 100km de ce qui est demandé)
    - "var" dans ta fonction est local , donc pas la même variable qu'en dehors de cette fonction (voir cours portée des variables)
    - jamais tu ne testes ta fonction dans ton code ? donc tu ne risques pas d'avancer
    comme je l'ai dit plus haut la première ligne m'imposée : ce devrait être une indication mais cela m'empêche d'avancer

    si je supprime le var dans la première ligne
    voici le résultat

    Vrai
    Faux
    Vrai
    Faux
    ERREUR : Retraçage :
    dans <module>
    TypeError : variable_valid() prend 0 argument positionnel mais 1 a été donné


    j'ai bien le résulta que j'attends mais ce n'est pas validé par EDABIT

Discussions similaires

  1. [DATA] Transformer un texte en nom de variable valide
    Par RemiBousquet dans le forum SAS Base
    Réponses: 5
    Dernier message: 07/01/2013, 14h18
  2. Réponses: 1
    Dernier message: 08/07/2007, 17h31
  3. [SQL SERVER 2000] Noms de variables dynamiques
    Par cassoulet dans le forum MS SQL Server
    Réponses: 9
    Dernier message: 08/09/2004, 11h44
  4. Nom de variable
    Par lilia dans le forum Flash
    Réponses: 4
    Dernier message: 07/08/2004, 13h11
  5. Generer des noms de variables avec une boucle
    Par moutanakid dans le forum MS SQL Server
    Réponses: 4
    Dernier message: 28/07/2004, 17h45

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