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 console !


Sujet :

Python

  1. #1
    Membre régulier
    Homme Profil pro
    retraité
    Inscrit en
    Septembre 2010
    Messages
    102
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations professionnelles :
    Activité : retraité
    Secteur : Bâtiment Travaux Publics

    Informations forums :
    Inscription : Septembre 2010
    Messages : 102
    Points : 71
    Points
    71
    Par défaut Problème de console !
    Salut à tous,
    Apprentissage de Python 3.3.4 en cours, j'essaye de construire une application de roulette de casino.
    J'utilise IDLE 3.3.4 qui est fourni avec et mon code en cours développement correspond à ce que je souhaite obtenir car il a l'air de 'marcher' correctement. (même avec PyScripter)
    Toutefois, lorsque j'essaye de le lancer directement (double-click sur le fichier) il se lance bien sur la console mais s’arrête après les 'input' et la console se referme.
    Quelqu'un peut-il me dire où est l'erreur.
    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
    # -*- coding: utf-8 -*-
    import os
    from random import randrange
    def choix(tx,a,b):
        """ si renvoie 'r0' la saisie est alpha
    si 'r1' la saisie est conforme
    si 'r2' la saisie demande la sortie
    si 'r3' la saisie est numérique mais hors les bornes"""
        w='r0' ; message="! Numérique seulement et entre "\
        +str(a)+ " et "+str( b)
        x = input(tx)
        try:
            x=int(x)
            w='r1' # print("OK")
            if not(a <= x <= b):
                w='r3'
                message=" -> -> le choix doit être entre "\
                +str(a)+" et "+str(b)
                return w,x
            else:
                message=''
                return w,x
        except Exception as e:
    #        print("Erreur: ",e) # inutile ici mais pour voir
            if x=='':
                message=("......Vous avez demandé la sortie !")
                w='r2'
                return w,0
            else:
                return w,0
        finally:
            print(message+'\n')
    #----   
    msg1=' compris [Return Quit]: '
    i=1 ; ii=1 ; c1=0 ; c2=10 ;m1=1 ; m2=20
    while i:
        while ii:
            z=choix('Votre choix entre '+str(c1)+'..'+str(c2)+msg1,c1,c2)
            if z[0]=='r2':
                print("                      Donc c'est fini ! !.")
                ii=0 ; i=0
            elif z[0]=='r1':
                y=1 #;print('pas fini')
                while y:
                    w=choix('Quelle mise entre '+str(m1)+'..'+str(m2)+msg1,m1,m2)
                    if w[0]=='r1':
                        y=0 ; i=0
                        tirage=randrange(c2+1)
                        #print('la mise',z,w,'\n')
                        print('tirage ',tirage,'\n')
                        print("Vous avez misé",w[1],"€. sur le N°"\
                        ,z[1], "et c'est le",tirage,"qui est sorti.\n")
                        if z[1]==tirage:
                            print('  *** vous avez gagné ! !\n'.upper())
                        else:
                            print("....Vous avez perdu....\n")
                    elif w[0]=='r2':
                        print('..Fini, fini..')
                        y=0; ii=0; i=0
                    else:
                        print('re..miser ?   ',end='')

  2. #2
    Membre confirmé
    Homme Profil pro
    Développeur banc de test
    Inscrit en
    Mai 2014
    Messages
    199
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 36
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Développeur banc de test
    Secteur : High Tech - Électronique et micro-électronique

    Informations forums :
    Inscription : Mai 2014
    Messages : 199
    Points : 482
    Points
    482
    Par défaut Console
    Citation Envoyé par luc pic Voir le message
    Toutefois, lorsque j'essaye de le lancer directement (double-click sur le fichier) il se lance bien sur la console mais s’arrête après les 'input' et la console se referme.
    Bonjour,

    Par hasard est-ce que vous utilisez plusieurs versions?
    Il est possible que l'affectation sur les *.py n'est pas à la même version.

    De même si vous utilisez la console avec print et input il faut exécuter le fichier avec python.exe et non pythonw.exe qui masque la console et fait planter l'exécution si vous tentez une interaction I/O avec la console.

    Pour le savoir rajoutez un time.sleep au début et regardez dans le gestionnaire des tâches quelle application est lancée.

  3. #3
    Membre confirmé
    Homme Profil pro
    Développeur banc de test
    Inscrit en
    Mai 2014
    Messages
    199
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 36
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Développeur banc de test
    Secteur : High Tech - Électronique et micro-électronique

    Informations forums :
    Inscription : Mai 2014
    Messages : 199
    Points : 482
    Points
    482
    Par défaut Encoding
    Je viens d'essayer il y a effectivement une erreur, ça plante chez moi aussi, en version 3.3 et 3.4.

    C'est un problème d'encodage des caractères, pour se faire une idée:

    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
    # -*- coding: utf-8 -*-
    import os
    from random import randrange
    import traceback # Standard interface to extract, format and print stack traces of Python programs
    import time
    import sys
     
    def choix(tx,a,b):
        """ si renvoie 'r0' la saisie est alpha
    si 'r1' la saisie est conforme
    si 'r2' la saisie demande la sortie
    si 'r3' la saisie est numérique mais hors les bornes"""
        w='r0' ; message="! Numérique seulement et entre "\
        +str(a)+ " et "+str( b)
        x = input(tx)
        try:
            x=int(x)
            w='r1' # print("OK")
            if not(a <= x <= b):
                w='r3'
                message=" -> -> le choix doit être entre "\
                +str(a)+" et "+str(b)
                return w,x
            else:
                message=''
                return w,x
        except Exception:
            exc_type, exc_value, exc_traceback = sys.exc_info()
            print("Function error in line {:d}: {}".format(exc_traceback.tb_lineno, exc_value.args[0]))
            time.sleep(5)
        # except Exception as e:
        #    print("Erreur: ",e) # inutile ici mais pour voir
        #    if x=='':
        #        message=("......Vous avez demandé la sortie !")
        #        w='r2'
        #        return w,0
        #    else:
        #        return w,0
        #finally:
        #    print(message+'\n')
    #----   
    try:
        msg1=' compris [Return Quit]: '
        i=1 ; ii=1 ; c1=0 ; c2=10 ;m1=1 ; m2=20
        while i:
            while ii:
                z=choix('Votre choix entre '+str(c1)+'..'+str(c2)+msg1,c1,c2)
                if z[0]=='r2':
                    print("                      Donc c'est fini ! !.")
                    ii=0 ; i=0
                elif z[0]=='r1':
                    y=1 #;print('pas fini')
                    while y:
                        w=choix('Quelle mise entre '+str(m1)+'..'+str(m2)+msg1,m1,m2)
                        if w[0]=='r1':
                            y=0 ; i=0
                            tirage=randrange(c2+1)
                            #print('la mise',z,w,'\n')
                            print('tirage ',tirage,'\n')
                            print("Vous avez misé",w[1],"€. sur le N°"\
                            ,z[1], "et c'est le",tirage,"qui est sorti.\n")
                            if z[1]==tirage:
                                print('  *** vous avez gagné ! !\n'.upper())
                            else:
                                print("....Vous avez perdu....\n")
                        elif w[0]=='r2':
                            print('..Fini, fini..')
                            y=0; ii=0; i=0
                        else:
                            print('re..miser ?   ',end='')
    except Exception:
        exc_type, exc_value, exc_traceback = sys.exc_info()
        print("Function error in line {:d}: {}".format(exc_traceback.tb_lineno, exc_value.args[0]))
        time.sleep(5)
    time.sleep(5)
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
    Votre choix entre 0..10 compris [Return Quit]: 5
    Quelle mise entre 1..20 compris [Return Quit]: 1
    tirage  1
     
    Vous avez misé 1 Function error in line 61: charmap
    Le problème vient de cette ligne :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    ,z[1], "et c'est le",tirage,"qui est sorti.\n")
    Mais je n'ai pas encore la réponse à ça..

  4. #4
    Membre confirmé
    Homme Profil pro
    Développeur banc de test
    Inscrit en
    Mai 2014
    Messages
    199
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 36
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Développeur banc de test
    Secteur : High Tech - Électronique et micro-électronique

    Informations forums :
    Inscription : Mai 2014
    Messages : 199
    Points : 482
    Points
    482
    Par défaut Encodage
    C'est effectivement un problème d'encodage des caractères mais sur la ligne du dessus :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    print("Vous avez misé",w[1],"€. sur le N°"\
                            ,z[1], "et c'est le",tirage,"qui est sorti.\n")
    Le '€'

    et l'encodage n'est pas le même sous IDLE et la console, je pensais que c'était différent en version 3 mais c'est toujours le même problème !

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    print(sys.stdout.encoding)
    Dans l'IDLE:
    Dans la console:
    Le symbol € n'est pas géré par l'encodage cp850

    Le moyen d'éviter ce genre de problème est de le gérer à l'avance en convertissant tout le texte avec le bon encodage:

    Deux méthodes d'affichage:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    print("test€".encode(sys.stdout.encoding, errors='replace').decode(sys.stdout.encoding))
    >>> test?
    print("test€".encode(sys.stdout.encoding, errors='ignore').decode(sys.stdout.encoding))
    >>> test
    Source: S&M: L’encoding en Python, une bonne fois pour toute

  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
    Citation Envoyé par luc pic Voir le message
    Salut à tous,
    ...
    Toutefois, lorsque j'essaye de le lancer directement (double-click sur le fichier) il se lance bien sur la console mais s’arrête après les 'input' et la console se referme.
    Quelqu'un peut-il me dire où est l'erreur.
    Tu ne dois pas double-cliquer sur le fichier pour tester ton script, d'autant plus que tu n'y as pas mis de shebang, mais ouvrir un terminal et entrer le chemin de l'exécutable python suivit du chemin de ton script.

    Un truc comme ça:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    C:\blabla\python3.3.4\python.exe C:\chez\moi\monScript.py
    tu adaptes, bien sur.

    Je l'ai testé sous Linux:
    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
     
    vincent@tiemoko:~/Bureau$ python3 roulette.py 
    Votre choix entre 0..10 compris [Return Quit]: 5
     
     
    Quelle mise entre 1..20 compris [Return Quit]: 15
     
     
    tirage  4 
     
    Vous avez misé 15 €. sur le N° 5 et c'est le 4 qui est sorti.
     
    ....Vous avez perdu....
     
    Votre choix entre 0..10 compris [Return Quit]:
    ... tu me dois 15 € pour la consultation.

  6. #6
    Membre régulier
    Homme Profil pro
    retraité
    Inscrit en
    Septembre 2010
    Messages
    102
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations professionnelles :
    Activité : retraité
    Secteur : Bâtiment Travaux Publics

    Informations forums :
    Inscription : Septembre 2010
    Messages : 102
    Points : 71
    Points
    71
    Par défaut console et €
    Salut à tous,

    Merci d'abord à YCL-1 car c'est bien le symbole € qui coince.
    Je l'ai remplacé par des jetons et depuis pas de problème...
    Par contre, je n'ai pas compris le code «*print(sys.stdout.encoding)*»
    Il me renvoie une erreur.

    >>> print(sys.stdout.encoding)
    Traceback (most recent call last):
    File "<pyshell#0>", line 1, in <module>
    print(sys.stdout.encoding)
    NameError: name 'sys' is not defined
    >>>
    Je chercherai à comprendre plus tard.

    Pour VinsS que je remercie aussi, rien que pour avoir bien voulu se pencher sur le problème, mais vu que maintenant ce sont des jetons.....

    Par contre, j'ai, par curiosité essayé de le changer en exécutable avec cxfreeze mais ça n'a pas marché.
    A plus donc,

  7. #7
    Invité
    Invité(e)
    Par défaut
    Citation Envoyé par luc pic Voir le message
    Salut à tous,

    Par contre, je n'ai pas compris le code «*print(sys.stdout.encoding)*»
    Il me renvoie une erreur.

    >>> print(sys.stdout.encoding)
    Traceback (most recent call last):
    File "<pyshell#0>", line 1, in <module>
    print(sys.stdout.encoding)
    NameError: name 'sys' is not defined
    >>>
    Je chercherai à comprendre plus tard.

    A plus donc,
    Bonjour,

    Il suffit d'importer le module sys :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    >>> import sys
    >>> print(sys.stdout.encoding)
    @+.

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

Discussions similaires

  1. problème wifi console
    Par Fruzim dans le forum Matériel
    Réponses: 2
    Dernier message: 19/07/2008, 10h01
  2. probléme avc console.readline()
    Par dv-2008 dans le forum VB.NET
    Réponses: 7
    Dernier message: 10/03/2008, 00h33
  3. Probléme de console Oracle 10g
    Par lorain dans le forum Oracle
    Réponses: 6
    Dernier message: 22/10/2007, 10h08
  4. Problème appli console et .jar
    Par Royd938 dans le forum NetBeans
    Réponses: 5
    Dernier message: 21/08/2006, 12h48

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