Python#
Pierre feuille ciseaux
Le code ci-dessous est mon premier code en python.
C’est un pierre feuille ciseaux, le premier à 3 points remporte la partie.
L’utilisateur joue contre l’ordinateur.
A chaque tour on génère aléatoirement les choix de l’ordi à l’aide de la fonction random.
Les choix du joueur sont saisis à l’aide d’un input dans la fonction
get_human_choice. Tant que le joueur n’a pas saisi p, f ou c (pour pierre feuille
ciseaux) il ne peut pas jouer, un message d’erreur s’affiche et l’on redemande à
l’utilisateur de saisir son choix avec un input.
import random
def rules(choix_ordi: str, choix_joueur: str) -> str:
rules = [('p', 'f', 'f'), ('p', 'c', 'p'), ('f', 'c', 'c'),
('f', 'p', 'f'), ('c', 'p', 'p'), ('c', 'f', 'c'),
('p', 'p', 'p'), ('c', 'c', 'c'), ('f', 'f', 'f')]
# for o, h, w
for ordi, human, win in rules:
if ordi == choix_ordi and human == choix_joueur:
winner_choice = win
return winner_choice
def win(choix_ordi: str, choix_joueur: str, winner_choice: str, scores: list) -> str:
if choix_ordi == winner_choice and choix_joueur == winner_choice:
winner = 'equal'
elif choix_ordi == winner_choice:
winner = 'ordi'
else:
winner = 'human'
scores.append(winner)
return scores
def get_human_choice(choix):
choix_joueur = input('Tapez p, f ou c pour jouer :\n')
while choix_joueur not in choix:
print("Erreur de saisie.\n")
choix_joueur = input('Tapez p, f ou c pour jouer :\n')
return choix_joueur
def evaluate(scores: list, choix_ordi: str, choix_human: str) -> tuple[str, str]:
"""
Add some docstring here
"""
human_wins = len([i for i in scores if i == 'human'])
ordi_wins = len([i for i in scores if i == 'ordi'])
equals = len([i for i in scores if i == 'equal'])
print(f"ordi: {choix_ordi} [{ordi_wins}] Human: {choix_human} [{human_wins}] equal: [{equals}]")
return human_wins, ordi_wins
def run(scores) -> tuples[int, int]:
"""
evaluate given scores
Fixme
"""
choix = ['p', 'f', 'c']
choix_ordi = random.choice(choix)
choix_joueur = get_human_choice(choix)
winner_choice = rules(choix_ordi, choix_joueur)
scores = win(choix_ordi, choix_joueur, winner_choice, scores)
nbr_human_wins, nbr_ordi_wins = evaluate(scores, choix_ordi, choix_joueur)
return nbr_human_wins, nbr_ordi_wins
def main():
scores = []
nbr_human_wins, nbr_ordi_wins = run(scores)
while nbr_human_wins < 3 and nbr_ordi_wins < 3:
nbr_human_wins, nbr_ordi_wins = run(scores)
if nbr_ordi_wins == 3:
print("You loose!")
else:
print("You win")
if __name__ == '__main__':
main()