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 :

[len()] valeur fausse


Sujet :

Python

  1. #1
    Membre du Club
    Inscrit en
    Mars 2011
    Messages
    9
    Détails du profil
    Informations forums :
    Inscription : Mars 2011
    Messages : 9
    Par défaut [len()] valeur fausse
    Bonjour,
    je débute avec Python32.
    j'ai 2 réponses pour une même ligne de script .
    C.A.D. sous idle j'ai une réponse juste et lorsque je teste sous DOS la réponse est fausse .
    la ligne est #mesure = len(ch)
    Avec le shell d'idle réponse exacte, mais sous DOS la valeur est supérieure de 1.

    D'avance merci pour vos bons conseils.
    amista...

  2. #2
    Membre émérite
    Homme Profil pro
    Inscrit en
    Décembre 2007
    Messages
    758
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 46
    Localisation : France

    Informations professionnelles :
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Décembre 2007
    Messages : 758
    Par défaut
    bonjour,

    tu pourrais poster ton script en entier stp ?

  3. #3
    Membre du Club
    Inscrit en
    Mars 2011
    Messages
    9
    Détails du profil
    Informations forums :
    Inscription : Mars 2011
    Messages : 9
    Par défaut
    Bonjour,
    juste ceci :

    /*
    mot = input("mot de test : ")
    nb = len("mot")
    print(nb)
    */

    3 lignes et déjà une erreur

  4. #4
    Membre du Club
    Inscrit en
    Mars 2011
    Messages
    9
    Détails du profil
    Informations forums :
    Inscription : Mars 2011
    Messages : 9
    Par défaut suite
    le problème était avec :

    /*
    mot = input("mot de test : ")
    nb = len(mot)
    print(nb)
    */

    mais comme écrit bien plus haut j'ai fait un test pour voir la réponse fourni lorsque la chaine se trouvait elle-meme entre les parenthèses et guillemets, là par contre la valeur renvoyé est la bonne.
    Alors que dans celle immédiatement ci-dessus, la valeur renvoyée vaut 1 de + que la réalité

    d'avance merci

  5. #5
    Expert éminent
    Homme Profil pro
    Architecte technique retraité
    Inscrit en
    Juin 2008
    Messages
    21 765
    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 765
    Par défaut
    nb = len("mot") vous retournera la longeur de la chaine de caractère "mot" et non celle contenue dans la variable mot.
    - W
    Architectures post-modernes.
    Python sur DVP c'est aussi des FAQs, des cours et tutoriels

  6. #6
    Membre du Club
    Inscrit en
    Mars 2011
    Messages
    9
    Détails du profil
    Informations forums :
    Inscription : Mars 2011
    Messages : 9
    Par défaut
    Ok Wiztriks,
    avec les " ", c'est la chaine entre les " " qui est testé.
    lorsqu'il n'y a pas de " " c'est la longueur de la chaine mais là, le résultat affiché est supérieur de '1' à la réalité, pour exemple 'cheval' va donner '7' et 'chevaux '8'.

    Pour test, je viens d'installer python32 sur le portable (Vista) et c'est le même défaut

  7. #7
    Expert éminent
    Homme Profil pro
    Architecte technique retraité
    Inscrit en
    Juin 2008
    Messages
    21 765
    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 765
    Par défaut
    Un exemple de code reproduisant le problème serait bienvenu car chez moi len('cheval') est 6.
    - W
    Architectures post-modernes.
    Python sur DVP c'est aussi des FAQs, des cours et tutoriels

  8. #8
    Membre Expert
    Homme Profil pro
    Inscrit en
    Septembre 2006
    Messages
    2 963
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations forums :
    Inscription : Septembre 2006
    Messages : 2 963
    Par défaut
    Ce genre de différence de comportement entre environnement est souvent causé par :

    - la façon dont les fins de ligne sont gérées (CR LF sous DOS… le premier peut être compté dans la longueur de la chaîne)
    - l'encoding des chaînes : la longueur en bytes != longueur en caractères pour l'UTF-8 par exemple dès qu'un caractère accentué est entré

    Un dump des bytes des chaînes saisies donne immédiatement la réponse.

  9. #9
    Membre du Club
    Inscrit en
    Mars 2011
    Messages
    9
    Détails du profil
    Informations forums :
    Inscription : Mars 2011
    Messages : 9
    Par défaut
    ci-dessous, écran DOS du code et du test




    l'ordi est avec windows 7, le portable avec Vista, le defaut est pareil

  10. #10
    Membre Expert
    Homme Profil pro
    Inscrit en
    Septembre 2006
    Messages
    2 963
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations forums :
    Inscription : Septembre 2006
    Messages : 2 963
    Par défaut
    input([prompt])
    Equivalent to eval(raw_input(prompt)).

    Warning This function is not safe from user errors! It expects a valid Python expression as input; if the input is not syntactically valid, a SyntaxError will be raised. Other exceptions may be raised if there is an error during evaluation. (On the other hand, sometimes this is exactly what you need when writing a quick script for expert use.)
    If the readline module was loaded, then input() will use it to provide elaborate line editing and history features.

    Consider using the raw_input() function for general input from users.

  11. #11
    Expert éminent
    Homme Profil pro
    Architecte technique retraité
    Inscrit en
    Juin 2008
    Messages
    21 765
    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 765
    Par défaut
    Non, c'est python3 et input équivant à raw_input.

    Essayez d'ajouter un print du mot lu dans votre script style:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    mot = input("mot de test : ")
    print (mot.encode('utf-8'))
    nb = len(mot)
    print(nb)
    Note: len ne compte pas 'rien', donc il y a du bruit mais quoi et d'où il vient... Pas d'idée, d'autant que Python 3 fait que mot est unicode...
    - W
    Architectures post-modernes.
    Python sur DVP c'est aussi des FAQs, des cours et tutoriels

  12. #12
    Membre du Club
    Inscrit en
    Mars 2011
    Messages
    9
    Détails du profil
    Informations forums :
    Inscription : Mars 2011
    Messages : 9
    Par défaut
    eh! oui Wiztricks, la chaine n'est pas seule, avec l'encodage, voilà ce qui s'affiche:
    b'machaine\r'
    si \r est le retour chariot, ce serait le b qui serait facturé !

  13. #13
    Expert éminent
    Homme Profil pro
    Architecte technique retraité
    Inscrit en
    Juin 2008
    Messages
    21 765
    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 765
    Par défaut
    Citation Envoyé par khrysty Voir le message
    eh! oui Wiztricks, la chaine n'est pas seule, avec l'encodage, voilà ce qui s'affiche:
    b'machaine\r'
    si \r est le retour chariot, ce serait le b qui serait facturé !
    Non le b'...' dit qu'il s'agit d'une représentation en bytes.
    Le caractère "exotique" est '\r' -- mais je ne le récupère pas chez moi
    - W
    Architectures post-modernes.
    Python sur DVP c'est aussi des FAQs, des cours et tutoriels

  14. #14
    Expert confirmé
    Avatar de tyrtamos
    Homme Profil pro
    Retraité
    Inscrit en
    Décembre 2007
    Messages
    4 486
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Var (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Retraité

    Informations forums :
    Inscription : Décembre 2007
    Messages : 4 486
    Billets dans le blog
    6
    Par défaut
    Bonjour,

    Je viens d'essayer, et effectivement:

    - sous idle, input récupère bien le mot avec le bon nombre de lettres

    - sous la console, input ajoute un retour chariot (13).

    Donc: si on veut que ça marche dans tous les cas, il faut faire:

    ce qui supprime la fin de ligne quand il y en a une.

    Tyrtamos

  15. #15
    Expert éminent
    Homme Profil pro
    Architecte technique retraité
    Inscrit en
    Juin 2008
    Messages
    21 765
    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 765
    Par défaut
    Salut,
    Oui, faire rstrip() fonctionnera mais je ne comprends pas pourquoi je ne reproduis pas cela chez moi. Mais c'est un détail.
    - W
    Architectures post-modernes.
    Python sur DVP c'est aussi des FAQs, des cours et tutoriels

  16. #16
    Membre du Club
    Inscrit en
    Mars 2011
    Messages
    9
    Détails du profil
    Informations forums :
    Inscription : Mars 2011
    Messages : 9
    Par défaut
    Extra !
    merci bien,
    je vais pouvoir recommencer à barboter tranquillement.
    Mon intérêt pour Python repart à la hausse.

    amista à tóuti ...

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

Discussions similaires

  1. mon programme donne une valeur fausse
    Par domxaline dans le forum Débuter avec Java
    Réponses: 17
    Dernier message: 20/08/2009, 14h50
  2. valeurs fausses des DateTimePickers
    Par ned_kelly dans le forum VB.NET
    Réponses: 5
    Dernier message: 28/05/2009, 00h41
  3. Réponses: 2
    Dernier message: 08/10/2007, 10h35
  4. Valeurs fausses ou manquantes
    Par FranT dans le forum JDBC
    Réponses: 2
    Dernier message: 24/09/2007, 10h21
  5. [DEBUTANT] Valeur fausse
    Par bdaboah dans le forum C
    Réponses: 2
    Dernier message: 18/09/2005, 15h44

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