# =================================== # Résolution d'un problème logique par force brute # nsi.gecif.net # décembre 2024 # =================================== """ PROBLEME : qui a le poisson ? Énoncé du problème : Trois amis habitent chacun une maison différente et possèdent un animal distinct. Les données du problème sont : - Tom a un chat - Eric n'est pas en pavillon - Luc habite un studio mais le cheval n'y est pas La problématique à résoudre est : Qui habite le château et qui a le poisson ? =================================================================================== Quelle structure de données en Python peut-on utiliser pour traduire le problème ? Il faut associer à chaque prénom 2 éléments : un animal et un type de maison. - les 3 prénoms sont : tom, eric et luc - les 3 animaux sont : chat, cheval et poisson - les 3 maison sont : pavillon, studio et chateau - les prénoms seront des dictionnaires contenant chacun 2 clés : animal et maison - les animaux seront le contenu des clés 'animal' (3 chaînes de caractères 'chat','cheval' et 'poisson') - les maisons seront le contenu des clés 'maison' (3 chaînes de caractères 'pavillon','studio' et 'chateau') En associant tous les cas possibles aux clés des 3 dictionnaires il faut trouver la seule combinaison qui réponde au problème. """ from itertools import * liste_animal=['chat','cheval','poisson'] liste_maison=['pavillon','studio','chateau'] # on crée les 3 dictionnaires contenant None pour l'instant pour chaque valeur : tom={'animal':None,'maison':None} eric={'animal':None,'maison':None} luc={'animal':None,'maison':None} # on crée toutes les permutations possibles des 2 listes : tous_les_cas_animal=permutations(liste_animal) tous_les_cas_maison=permutations(liste_maison) # on teste tous les cas possibles dans 2 boucles for imbriquées : for test_animal in tous_les_cas_animal: for test_maison in tous_les_cas_maison: # on attibut un animal et une maison à chaque personne : tom['animal']=test_animal[0] tom['maison']=test_maison[0] eric['animal']=test_animal[1] eric['maison']=test_maison[1] luc['animal']=test_animal[2] luc['maison']=test_maison[2] # condition logique traduisant les données du problème et détectant la bonne solution : # tom a un chat : tom['animal']=='chat' # eric n'habite pas en pavillon : eric['maison']!='pavillon' # luc habite un studio : luc['maison']=='studio' # luc n'a pas de cheval : luc['animal']!='cheval' if tom['animal']=='chat' and eric['maison']!='pavillon' and luc['maison']=='studio' and luc['animal']!='cheval': print('Tom : \t animal -> %s \t maison -> %s' % (tom['animal'],tom['maison'])) print('Eric : \t animal -> %s \t maison -> %s' % (eric['animal'],eric['maison'])) print('Luc : \t animal -> %s \t maison -> %s' % (luc['animal'],luc['maison']))