# ========================================================================================= # Générateur de problèmes logiques basés sur le problème du zèbre # nsi.gecif.net # Décembre 2024 # ========================================================================================= """ Cette version du problème est une adaptation du problème du zèbre. Il y a 5 maisons et 5 attributs (couleur, animal, metier, pays et boisson). Elle mélange et reformule les conditions tout en diversifiant les 5 attributs. Elle affiche les 14 conditions ce qui garantie une solution unique au problème. """ from random import * # 11 couleurs : couleur=["rouge","verte","jaune","bleue","blanche","orange","violette","rose","grise","noire","marron"] shuffle(couleur) # 57 animaux : animal=["une biche","un caméléon","un singe","un flamant rose","un paon","un chevreuil","un chamois","un renne","un cerf","une antilope","un chien","des escargots"," un renard","un cheval","un zèbre","un chat","une souris","un panda","un lion","un éléphant","une girafe","un tigre","un koala","un crocodile","un gorille","un canari","un perroquet","une perruche","une autruche","un hippopotame","un rhinocéros","un serpent","un lapin","un coq","une oie","un poisson","un jaguar","une panthère","un lama","un loup","un ours","une tortue","un hamster","une vache","un mouton","une chèvre","un dromadaire","un kangourou","une migale","un canard","un âne","des grenouilles","un aigle","un sanglier","une marmotte","un cygne","un pingouin"] shuffle(animal) # 45 métiers : metier=["patissier","sculpteur","diplomate","violoniste","boulanger","médecin","professeur","plombier","magicien","maçon","banquier","bûcheron","chercheur","bijoutier","bibliothécaire","gendarme","cuisinier","charpentier","menuisier","programmeur","mécanicien","dessinateur","vétérinaire","routier","serveur","réalisateur","cinéaste","chanteur","danseur","musicien","coiffeur","traiteur","physicien","chimiste","pompier","photographe","spationaute","pilote","vigile","voiturier","fleuriste","pharmacien","boucher","charcutier","restaurateur"] shuffle(metier) # 32 pays : pays=["l'Anglais","l'Espagnol","l'Ukrainien","le Norvégien","le Japonais","l'Italien","le Français","le Belge","le Suisse","l'Allemand","le Chinois","le Russe","le Polonais","l'Américain","l'Égyptien","l'Australien","le Brésilien","le Chilien","le Danois","l'Ivoirien","le Finlandais","le Grec","l'Indien","l'Irlandais","le Colombien","le Libanais","le Marocain","le Mexicain","l'Autrichien","le Portugais","le Turc","le Canadien"] shuffle(pays) # 14 boissons : boisson=["du café","du thé","du lait","du jus d'orange","de l'eau","du coca","du sirop de menthe","du sirop de grenadine","du sirop d'orgeat","du jus de pomme","du jus de raisin","une citronnade","de la limonade","une tisane"] shuffle(boisson) # détail des 14 conditions (chaque condition existe en 2 versions équivalentes) : if randint(0,1)==1: c1="%s habite la maison %s" % (pays[0],couleur[0]) else: c1="le propriétaire de la maison %s est %s" % (couleur[0],pays[0]) if randint(0,1)==1: c2="%s a %s" % (pays[1],animal[0]) else: if pays[1][0:2]=='le': c2="il y a %s dans la maison du %s" % (animal[0],pays[1][3:]) else: c2="il y a %s dans la maison de %s" % (animal[0],pays[1]) if randint(0,1)==1: c3="dans la maison %s on boit %s" % (couleur[1],boisson[0]) else: c3="c'est %s que le propriétaire de la maison %s boit" % (boisson[0],couleur[1]) if randint(0,1)==1: c4="%s boit %s" % (pays[2],boisson[1]) else: c4="c'est %s que %s boit" % (boisson[1],pays[2]) if randint(0,1)==1: c5="la maison %s est immédiatement à droite de la maison %s" % (couleur[1],couleur[4]) else: c5="la maison %s est immédiatement à gauche de la maison %s" % (couleur[4],couleur[1]) if randint(0,1)==1: c6="le %s élève %s" % (metier[0],animal[1]) else: if animal[1][0:3]=='des': c6="%s sont dans la maison du %s" % (animal[1],metier[0]) else: c6="%s est dans la maison du %s" % (animal[1],metier[0]) if randint(0,1)==1: c7="le %s habite la maison %s" % (metier[1],couleur[2]) else: c7="dans la maison %s il y a le %s" % (couleur[2],metier[1]) if randint(0,1)==1: c8="dans la maison du milieu on boit %s" % boisson[2] else: c8="le propriétaire de la maison du milieu boit %s" % boisson[2] if randint(0,1)==1: c9="%s habite la première maison à gauche" % pays[3] else: if pays[3][0:2]=='le': c9="il n'y a pas de voisin à gauche de la maison du %s" % pays[3][3:] else: c9="il n'y a pas de voisin à gauche de la maison de %s" % pays[3] if randint(0,1)==1: c10="le %s habite une maison voisine de celle où il y a %s" % (metier[4],animal[2]) else: c10="la maison où il y a %s est à côté de celle du %s" % (animal[2],metier[4]) if randint(0,1)==1: c11="la maison où il y a %s est à côté de celle du %s" % (animal[3],metier[1]) else: c11="le %s habite une maison voisine de celle où il y a %s" % (metier[1],animal[3]) if randint(0,1)==1: c12="le %s boit %s" % (metier[2],boisson[3]) else: c12="dans sa maison le %s boit %s" % (metier[2],boisson[3]) if randint(0,1)==1: c13="%s est %s" % (pays[4],metier[3]) else: if pays[4][0:2]=='le': c13="la profession du %s est %s" % (pays[4][3:],metier[3]) else: c13="la profession de %s est %s" % (pays[4],metier[3]) if randint(0,1)==1: c14="%s habite à côté de la maison %s" % (pays[3],couleur[3]) else: if pays[3][0:2]=='le': c14="la maison %s est voisine de celle du %s" % (couleur[3],pays[3][3:]) else: c14="la maison %s est voisine de celle de %s" % (couleur[3],pays[3]) # détail des 14 conditions : liste_condition=[c1,c2,c3,c4,c5,c6,c7,c8,c9,c10,c11,c12,c13,c14] shuffle(liste_condition) print("Cinq personnes de nationalités et de professions différentes habitent des maisons de couleurs différentes et situées côte à côte dans le même alignement. Ils ont chacun un animal favori et une boisson préférée.") print("\nLes données du problème sont :") # affiche les 14 conditions de l'énoncé : for condition in liste_condition: print(" - "+condition) # affiche la problématique à résoudre : print("\nLa problématique à résoudre est :") print(" - Qui boit %s et qui possède %s ?" % (boisson[4],animal[4]))