qi29n2.py

Created by schraf

Created on July 09, 2024

1.96 KB


from random import random

# Liste des mots et le mot cible
mots = ['NUIT', 'COUDE', 'TOUS', 'NOCE', 'DICTE', 'NOUES']
mot_cible = 'SEDUCTION'

def afficher_grille(mots, mot_cible):
    # Ensemble des lettres utilisees dans les mots et dans le mot cible
    lettres_mots = set(''.join(mots))
    lettres_cible = set(mot_cible)
    
    # Verifier si toutes les lettres du mot cible sont presentes dans les mots
    if lettres_cible.issubset(lettres_mots):
        # Generer une liste de nombres unique en ordre decroissant
        nombres = list(range(len(lettres_mots), 0, -1))
        # Melanger aleatoirement les nombres
        nombres_melanges = sorted(nombres, key=lambda _: random())
        # Associer chaque lettre unique à un nombre unique
        association = dict(zip(list(lettres_mots), nombres_melanges))
        
        # Afficher les en-têtes des colonnes
        header = "MOTS :\t" + "\t".join(map(str, nombres))
        print(header)
        
        # Pour chaque mot, construire la ligne avec des "x" sous les chiffres correspondants
        for mot in mots:
            # Obtenir les chiffres associes aux lettres du mot
            nums = [association[lettre] for lettre in set(mot)]
            ligne = [mot]
            for nombre in nombres:
                if nombre in nums:
                    ligne.append("x")
                else:
                    ligne.append(" ")
            # Afficher la ligne avec des tabulations
            print("\t".join(ligne))
        
        # Afficher les chiffres correspondant aux lettres du mot cible
        nums_cible = [association[lettre] for lettre in mot_cible]
        print("\n" + "\t".join(map(str, nums_cible)))
    else:
        # Afficher les lettres du mot cible qui ne sont pas dans les mots
        lettres_manquantes = lettres_cible.difference(lettres_mots)
        print('Lettres incompatibles\n', lettres_manquantes)

# Appeler la fonction pour afficher la grille
afficher_grille(mots, mot_cible)