Yahtzee python

Résolu/Fermé
Utilisateur anonyme - 22 sept. 2021 à 16:31
Phil_1857 Messages postés 1883 Date d'inscription lundi 23 mars 2020 Statut Membre Dernière intervention 28 février 2024 - 22 sept. 2021 à 17:45
le code contenu dans le fichier yahtzee.py contient une vilaine erreur à que je n'arrive pas à trouver

from random import randint

grille_vide = {
"As": None,
"Deux": None,
"Trois": None,
"Quatre": None,
"Cinq": None,
"Six": None,
"Brelan": None,
"PetiteSuite": None,
"GrandeSuite": None,
"Full": None,
"Carré": None,
"Yahtzee": None,
"Chance": None,
}

grille_test_00 = {
"As": [1, 1, 1, 1, 2],
"Deux": [2, 2, 2, 2, 3],
"Trois": [3, 3, 3, 3, 4],
"Quatre": [4, 4, 4, 4, 5],
"Cinq": [5, 5, 5, 5, 6],
"Six": [6, 6, 6, 6, 1],
"Brelan": [1, 1, 4, 1, 5],
"PetiteSuite": [1, 2, 1, 3, 5],
"GrandeSuite": [6, 2, 3, 4, 5],
"Full": [3, 3, 1, 3, 1],
"Carré": [3, 3, 3, 3, 2],
"Yahtzee": [4, 4, 4, 4, 4],
"Chance": [2, 5, 3, 6, 1],
}

def calcul_points_grille(grille):
points_as = calcul_points_as(grille["As"])
points_deux = calcul_points_deux(grille["Deux"])
points_trois = calcul_points_trois(grille["Trois"])
points_quatre = calcul_points_quatre(grille["Quatre"])
points_cinq = calcul_points_cinq(grille["Cinq"])
points_six = calcul_points_six(grille["Six"])
points_brelan = calcul_points_six(grille["Brelan"])
points_petite_suite = calcul_points_petite_suite(grille["PetiteSuite"])
points_grande_suite = calcul_points_grande_suite(grille["GrandeSuite"])
points_full = calcul_points_full(grille["Full"])
points_carre = calcul_points_carre(grille["Carré"]) # Quel jeu de mots!
points_yahtzee = calcul_points_yahtzee(grille["Yahtzee"])
points_chance = calcul_points_chance(grille["Chance"])
bonus = 35

partie_mineure = (
points_as
+ points_deux
+ points_trois
+ points_quatre
+ points_cinq
+ points_six
)

if partie_mineure >= 63:
partie_mineure = partie_mineure + bonus

partie_majeure = (
points_brelan
+ points_carre
+ points_full
+ points_petite_suite
+ points_grande_suite
+ points_yahtzee
+ points_chance
)

return partie_mineure + partie_majeure

def calcul_points_as(combinaison):
assert isinstance(combinaison, list) or isinstance(combinaison, tuple)
assert len(combinaison) == 5

return combinaison.count(1)

def calcul_points_deux(combinaison):
assert isinstance(combinaison, list) or isinstance(combinaison, tuple)
assert len(combinaison) == 5

return 2 * combinaison.count(2)

def calcul_points_trois(combinaison):
assert isinstance(combinaison, list) or isinstance(combinaison, tuple)
assert len(combinaison) == 5

return 3 * combinaison.count(3)

def calcul_points_quatre(combinaison):
assert isinstance(combinaison, list) or isinstance(combinaison, tuple)
assert len(combinaison) == 5

return 4 * combinaison.count(4)

def calcul_points_cinq(combinaison):
assert isinstance(combinaison, list) or isinstance(combinaison, tuple)
assert len(combinaison) == 5

return 5 * combinaison.count(5)

def calcul_points_six(combinaison):
assert isinstance(combinaison, list) or isinstance(combinaison, tuple)
assert len(combinaison) == 5

return 6 * combinaison.count(6)

def calcul_points_brelan(combinaison):
assert isinstance(combinaison, list) or isinstance(combinaison, tuple)
assert len(combinaison) == 5

for valeur in [1, 2, 3, 4, 5, 6]:
if combinaison.count(valeur) >= 3:
return sum(combinaison)
return 0

def calcul_points_petite_suite(combinaison):
assert isinstance(combinaison, list) or isinstance(combinaison, tuple)
assert len(combinaison) == 5

if (
(1 in combinaison)
and (2 in combinaison)
and (3 in combinaison)
and (4 in combinaison)
):
return 30
elif (
(2 in combinaison)
and (3 in combinaison)
and (4 in combinaison)
and (5 in combinaison)
):
return 30
elif (
(3 in combinaison)
and (4 in combinaison)
and (5 in combinaison)
and (6 in combinaison)
):
return 30
else:
return 0

def calcul_points_grande_suite(combinaison):
assert isinstance(combinaison, list) or isinstance(combinaison, tuple)
assert len(combinaison) == 5

for valeur in [1, 2, 3, 4, 5, 6]:
if combinaison.count(valeur) >= 3:
combinaison.remove(valeur)
combinaison.remove(valeur)
combinaison.remove(valeur)
if combinaison[0] == combinaison[1]:
return 25
return 0

def calcul_points_full(combinaison):
assert isinstance(combinaison, list) or isinstance(combinaison, tuple)
assert len(combinaison) == 5

for valeur in [1, 2, 3, 4, 5, 6]:
if combinaison.count(valeur) >= 3:
combinaison.remove(valeur)
combinaison.remove(valeur)
combinaison.remove(valeur)
if combinaison[0] == combinaison[1]:
return 25
return 0

def calcul_points_carre(combinaison):
assert isinstance(combinaison, list) or isinstance(combinaison, tuple)
assert len(combinaison) == 5

for valeur in [1, 2, 3, 4, 5, 6]:
if combinaison.count(valeur) >= 4:
return sum(combinaison)
return 0

def calcul_points_yahtzee(combinaison):
assert isinstance(combinaison, list) or isinstance(combinaison, tuple)
assert len(combinaison) == 5

for valeur in [1, 2, 3, 4, 5, 6]:
if combinaison.count(valeur) == 5:
return 50
return 0

def calcul_points_chance(combinaison):
assert isinstance(combinaison, list) or isinstance(combinaison, tuple)
assert len(combinaison) == 5

return sum(combinaison)

def saisie_combinaison_aleatoire():
combinaison = [randint(1, 6) for dé in [0, 1, 2, 3, 4]]
print(combinaison)
index = 1
while index < 3:
print("Refaire un lancer?")
print(
"- si oui, saisir les valeurs des dés à relancer (séparés par une virgule);"
)
print("- si non, appuyer sur entrée.")
reponse = input("Saisie: ")
reponse = reponse.strip()

if reponse:
selection = [chaine.strip() for chaine in reponse.split(",")]
if any(valeur not in "123456" for valeur in selection):
print(
"Saisie incorrecte: l'une des valeurs n'est pas parmi les chiffres de 1 à 6"
)
continue
selection = [int(valeur) for valeur in selection]
if any(valeur not in combinaison for valeur in selection):
print(
"Saisie incorrecte: l'une des valeurs n'est pas dans la combinaison"
)
continue
if len(selection) > 5:
print("Saisie incorrecte: trop grand nombre de valeurs")
continue

for valeur in selection:
combinaison.remove(valeur)
for valeur in selection:
combinaison.append(randint(1, 6))
index = index + 1
print(f"La nouvelle combinaison est: {combinaison}")
else:
return combinaison
return combinaison

def jeu():
grille = {cle: valeur for cle, valeur in grille_vide.items()}
for index in range(len(grille)):
print(f"Lancer n°{index + 1}.")
combinaison = saisie_combinaison_aleatoire()

contrats_libres = {}
index_contrat = 0
for contrat, valeur in grille.items():
index_contrat = index_contrat + 1
if valeur is None:
contrats_libres[index_contrat] = contrat

reponse = None
while reponse not in contrats_libres.keys():
for cle, valeur in contrats_libres.items():
print(f"{cle}: {valeur}")
reponse = input("Choix d'un contrat pour cette combinaison: ")
reponse = reponse.strip()
if all(caractere in "0123456789" for caractere in reponse):
reponse = int(reponse)
else:
print("Saisie d'une valeur qui n'est pas entière")
continue

print(f"\n--- \n {combinaison} \n--- \n")
grille[contrats_libres[reponse]] = combinaison
print("Voici la nouvelle grille")
for cle, valeur in grille.items():
print(f"{cle}: {valeur}")

return grille

c'est un jeu de hasard pour ceux qui connaisent
je ne sais pas quoi faire aidez moi svp

1 réponse

Phil_1857 Messages postés 1883 Date d'inscription lundi 23 mars 2020 Statut Membre Dernière intervention 28 février 2024 178
22 sept. 2021 à 17:45
Bonjour,

L'indentation étant importante en Python, merci de copier/coller ici ton code complet avec les balises de code
mode d'emploi:
https://codes-sources.commentcamarche.net/faq/11288-les-balises-de-code

Visuellement, ça doit ressembler à ceci (avec la coloration syntaxique) :

def test():
    print('test')

test()
0