Contenu | Rechercher | Menus

Annonce

Si vous avez des soucis pour rester connecté, déconnectez-vous puis reconnectez-vous depuis ce lien en cochant la case
Me connecter automatiquement lors de mes prochaines visites.

À propos de l'équipe du forum.

#1 Le 25/03/2019, à 22:22

piter42

blocage sur exo python

bonsoir , j ai beau chercher en long et en travers quelque chose m échappe ? pouvez vous m aiguiller ?,je vous met le script et l erreur

#!/usr/bin/env python3.6
# -*-coding = utf8 -*-

from random import randrange


class Jeudecarte(object):
    "creer le jeu"
    valeur = [2,3,4,5,6,7,8,9,10,"valet","dame","roi","as"]
    couleur = ["coeur","carreau","trefle","pique"]
    def __init__(self):
        self.carte = [] # création d une liste vide
        for val in range(13): 
            for coul in range (4): 
                self.carte.append((val+2, coul)) # on commence à 2 pour les valeurs
                
    def nom_de_carte(self,c):
        "on retourne le nom de la carte c en clair"
        return "{0} de {1}".format(self.valeur[c[0]] , self.couleur[c[1]])
        
    def battre(self):
        "on bat les cartes restantes"
        nbr = len(self.carte)# nombre de carte restantes
        # pour melanger on procede à un nbr équivalent
        for i in range(nbr):  
            #tirage au hasard de 2 emplacements dans la liste
            h1 , h2 = randrange(nbr), randrange(nbr)
            # échange des cartes situes à ces emplacements
            self.carte[h1], self.carte[h2]= self.carte[h2], self.carte[h1]
            
    def tirer(self):
        "on tire la premiere carte"
        nbr = len(self.carte) #[code] nbr de cartes restantes
        if nbr > 0 :
            carte = self.carte[0] # on tire la carte du dessus
            del(self.carte[0]) # on l enleve de la liste
            return carte
        else:
            return None

if __name__=="__main__"[/code]:
            
    jeu = Jeudecarte() # instanciation d un objet
    jeu.battre()      # mélange des cartes
    for n in range (53): # tirage des 52 cartes
        c = jeu.tirer()  
        if c == None:   # il ne reste plus aucune carte dans la liste
            print("terminé")
        else:
            print(jeu.nom_de_carte(c))  # valeur et couleur de la carte

défaut :

    import apport.fileutils
  File "/usr/lib/python3/dist-packages/apport/fileutils.py", line 23, in <module>
    from apport.packaging_impl import impl as packaging
  File "/usr/lib/python3/dist-packages/apport/packaging_impl.py", line 23, in <module>
    import apt
  File "/usr/lib/python3/dist-packages/apt/__init__.py", line 23, in <module>
    import apt_pkg
ModuleNotFoundError: No module named 'apt_pkg'

Original exception was:
Traceback (most recent call last):
  File "12.7.py", line 50, in <module>
    print(jeu.nom_de_carte(c))  # valeur et couleur de la carte
  File "12.7.py", line 19, in nom_de_carte
    return "{0} de {1}".format(self.valeur[c[0]] , self.couleur[c[1]])
IndexError: list index out of range

j ai essayer  d enlever les argument c de partout mais en vain,je supprime le défaut mais j ai 52 fois la même carte ?

merci pierre

Hors ligne

#2 Le 25/03/2019, à 22:50

pingouinux

Re : blocage sur exo python

Bonsoir,
Je ne sais pas à quoi correspond le début de ton message d'erreur.
Pour celui-ci

IndexError: list index out of range

c'est parce que tu commences à 2, et tu débordes

                self.carte.append((val+2, coul)) # on commence à 2 pour les valeurs

Tu tires aussi 53 cartes (de 0 à 52), alors que tu n'en as que 52, mais ça ne provoque pas d'erreur, car tu testes si la liste restante est vide

    for n in range (53): # tirage des 52 cartes

Hors ligne

#3 Le 26/03/2019, à 07:56

kholo

Re : blocage sur exo python

salut,
tu as une erreur de liste
astuces :
pour ta valeur val autant créer un range(début, fin) plutôt qu'utiliser val+2

dans la fonction tirer

            carte = self.carte[0] # on tire la carte du dessus
            del(self.carte[0]) # on l enleve de la liste

tu peux utiliser pop

carte = self.carte.pop(0)

wink

bizarre ton début d'erreur !
sans doute tes bidouilles pour imposer 3.6 et ou 3.7

Hors ligne

#4 Le 26/03/2019, à 08:25

piter42

Re : blocage sur exo python

kholo a écrit :

salut,
tu as une erreur de liste
astuces :
pour ta valeur val autant créer un range(début, fin) plutôt qu'utiliser val+2

dans la fonction tirer

            carte = self.carte[0] # on tire la carte du dessus
            del(self.carte[0]) # on l enleve de la liste

tu peux utiliser pop

carte = self.carte.pop(0)

wink

bizarre ton début d'erreur !
sans doute tes bidouilles pour imposer 3.6 et ou 3.7

alors j ai remodifié dans "definir les commandes de construction"j ai remis 5.7 et là ?

/tmp/geany_run_script_8M68YZ.sh: 7: /tmp/geany_run_script_8M68YZ.sh: python3.5.212.7.py: not found


------------------
(program exited with code: 127)
Press return to continue

En notant 52 au lieu de 53 dans le script, je me suis aperçu que j avais le résultat mais tout suite apres ça m inscrit le défaut alors j ai voulu remettre 5.7.2 et maintenant j ai ce défaut..

Hors ligne

#5 Le 26/03/2019, à 08:37

kholo

Re : blocage sur exo python

si tu glisses et ne t'en sort plus, tu peux toujours remettre python3 en valeur d'exécution dans la config de geany.
tu vas perdre les fstrings mais c'est pas un mal pour le moment

si tu veux avancer, tu peux aussi ouvrir un terminal depuis le dossier de ton script avec un clic droit (pour éviter de courir après à grands coups de cd) et lancer tes scripts à la main :

./un_script.py

voire

python un_script.py

ou encore

python3 un_script.py

...
NB tu noteras que le nom de mon script dans mes exemples est sans espace sinon il faut le quotter

Hors ligne

#6 Le 26/03/2019, à 08:58

pingouinux

Re : blocage sur exo python

Pour battre les cartes, tu peux aussi utiliser random.shuffle :

from random import shuffle
..............................
    def battre(self):
        "on bat les cartes restantes"
        shuffle(self.carte)

Hors ligne

#7 Le 26/03/2019, à 10:24

piter42

Re : blocage sur exo python

c est bon j ai remis python 3 et enlever la valeur(2) et mis valeur() et tout est ok ,encore merci à vous 2
pierre

Hors ligne