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()