Pages : 1
#1 Le 25/03/2019, à 21: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, à 21: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, à 06: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)
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, à 07:25
- piter42
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+2dans 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)
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, à 07: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, à 07: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, à 09: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
Pages : 1