'I don't know why my Python code isn't working
Here's my code: I don't know why but I cant find my errors. It's a game that aims to remove pairs from your deck and have no more pairs. The name of the game is called mistrigry or lousy.
import random
def attend_le_joueur():
'''()->None
Pause le programme jusqu'au l'usager appui Enter
'''
try:
input("Appuyez Enter pour continuer. ")
except SyntaxError:
pass
def prepare_paquet():
'''()->list of str
Retourne une liste des chaines de caractères qui représente tous les cartes,
sauf le valet noir.
'''
paquet=[]
couleurs = ['\u2660', '\u2661', '\u2662', '\u2663']
valeurs = ['2','3','4','5','6','7','8','9','10','J','Q','K','A']
for val in valeurs:
for couleur in couleurs:
paquet.append(val+couleur)
paquet.remove('J\u2663') # élimine le valet noir (le valet de trèfle)
return paquet
def melange_paquet(p):
'''(list of str)->None
Melange la liste des chaines des caractères qui représente le paquet des cartes
'''
random.shuffle(p)
def donne_cartes(p):
'''(list of str)-> tuple of (list of str,list of str)
Retournes deux listes qui représentent les deux mains des cartes.
Le donneur donne une carte à l'autre joueur, une à lui-même,
et ça continue jusqu'à la fin du paquet p.
'''
donneur=[]
autre=[]
var = 1
for i in range(len(p)):
if var == 0:
donneur.append(p[i])
var = 1
elif var == 1:
autre.append(p[i])
var = 0
return(donneur,autre)
def elimine_paires(l):
'''
(list of str)->list of str
Retourne une copy de la liste l avec tous les paires éliminées
et mélange les éléments qui restent.
Test:
(Notez que l’ordre des éléments dans le résultat pourrait être différent)
>>> elimine_paires(['9♠', '5♠', 'K♢', 'A♣', 'K♣', 'K♡', '2♠', 'Q♠', 'K♠', 'Q♢', 'J♠', 'A♡', '4♣', '5♣', '7♡', 'A♠', '10♣', 'Q♡', '8♡', '9♢', '10♢', 'J♡', '10♡', 'J♣', '3♡'])
['10♣', '2♠', '3♡', '4♣', '7♡', '8♡', 'A♣', 'J♣', 'Q♢']
>>> elimine_paires(['10♣', '2♣', '5♢', '6♣', '9♣', 'A♢', '10♢'])
['2♣', '5♢', '6♣', '9♣', 'A♢']
'''
resultat=[]
if len(l) < 2:
return 1
l.sort()
l.append([''])
a = 1
while a < len(l):
if l[a-1][:-1] != l[a][:-1]:
resultat.append(l[a-1])
a = a + 1
else:
a = a + 2
random.shuffle(resultat)
return resultat
def affiche_cartes(p):
'''
(list)-None
Affiche les éléments de la liste p séparées par d'espaces
'''
for i in p:
print(p[i], end = ' ')
def entrez_position_valide(n):
'''
(int)->int
Retourne un entier du clavier, de 1 à n (1 et n inclus).
Continue à demander si l'usager entre un entier qui n'est pas dans l'intervalle [1,n]
Précondition: n>=1
'''
v = str(n)
s = int(input("S'il vous plait, veuillez entrer un entier de 1 à "+ v +":"))
while s > n or n < 1:
s = int(input("S'il vous plait, veuillez entrer un entier de 1 à "+ v +":"))
return (s)
def joue():
'''()->None
Cette fonction joue le jeu'''
p=prepare_paquet()
melange_paquet(p)
tmp=donne_cartes(p)
donneur=tmp[0]
humain=tmp[1]
donneur=elimine_paires(donneur)
humain=elimine_paires(humain)
print("Bonjour. Je m'appelle Robot et je distribue les cartes.")
print("Votre main est:")
affiche_cartes(humain)
print("Ne vous inquiétez pas, je ne peux pas voir vos cartes ni leur ordre.")
print("Maintenant défaussez toutes les paires de votre main. Je vais le faire moi aussi.")
attend_le_joueur()
tour = 0
while (tour <= 1 and tour >= 0):
if len(humain) == 0:
print("J'ai fini avec toutes mes cartes")
print("L'humain, vous avez gagné")
break
elif len(donneur) == 0:
print("J'ai fini avec toutes mes cartes")
print("Le robot à gagné")
break
else:
if tour == 0:
print("C'est à votre tour")
print("Vos cartes sont:")
affiche_cartes(humain)
v = len(donneur)
print("J'ai", n, "carte(s). Si 1 est ma première carte" + str(v), "la position de ma dernière carte, quelle carte voudriez-vous dans votre paquet?")
alt = entrez_position_valide(v)
if alt == 1:
print("voici la première carte que vous avez demandé")
else:
print("vous m'avez demandé cette n-ième carte:"+str(alt)+".")
print("voila" +donneur[int(alt)-1])
print(donneur[int(alt)-1], "votre nouvelle main est:")
humain.append(donneur[int(alt)-1])
donneur.remove(donneur[int(alt)-1])
affiche_cartes(humain)
print("Après avoir enlever les paires, votre main est:")
humain = elimine_paires(humain)
affiche_cartes(humain)
tour = 1
attend_le_joueur()
if tour == 1:
print("mon tour")
c = len(humain)
alt = random. randit(1, c)
if alt == 1:
print('Jai pris la première carte')
else:
print('Jai pris votre' + str(alt) + 'carte')
donneur.append(humain[int(alt) - 1])
humain.remove(humain[int(alt) - 1])
donneur = elimine_paires(donneur)
tour = 0
attend_le_joueur()
joue()
Solution 1:[1]
You have to change this
def affiche_cartes(p):
'''
(list)-None
Affiche les éléments de la liste p séparées par d'espaces
'''
for i in p:
print(p[i], end = ' ')
To
def affiche_cartes(p):
'''
(list)-None
Affiche les éléments de la liste p séparées par d'espaces
'''
for i in p:
print(i, end = ' ')
Your p Variable is a list of strings and you used a for each loop, which means i is an element of p and not an index.
Sources
This article follows the attribution requirements of Stack Overflow and is licensed under CC BY-SA 3.0.
Source: Stack Overflow
| Solution | Source |
|---|---|
| Solution 1 | Alx-net |
