-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathakinator.py
56 lines (51 loc) · 4.04 KB
/
akinator.py
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
import fonctions_primaires as func_prim
import pickle
def jeu1(arbre):
"""Fonction simulant le déroulé d'un Akinator
Args:
arbre (list): Arbre binaire contenant les questions qu'Akinator posera, ainsi que les réponses finales.
"""
print("Pense à un animal.") # Demande au joueur de penser à l'animal qu'il souhaite faire deviner
while not func_prim.estFeuille(arbre): # Tant que l'arbre n'est pas une feuille (donc un animal)
reponse = input(f"{func_prim.racine(arbre)} ") # Il pose au joueur la question
if reponse.lower().strip() == "oui": # Si elle est oui, l'arbre devient le filsGauche de l'arbre
arbre = func_prim.filsGauche(arbre)
elif reponse.lower().strip() == "non": # Si elle est non, l'arbre devient le filsDroit de l'arbre
arbre = func_prim.filsDroit(arbre)
else: # Si la réponse est incorrecte, il donne un message d'erreur et repose la question
print("La réponse entrée est invalide, répond bien par 'oui' ou 'non' !")
print(f"C'est un {arbre} !") # Donne la réponse qu'il a trouvé
def jeu2():
"""Fonction simulant le déroulé d'un Akinator, mais avec en plus un système d'apprentissage
"""
with open("arbre_akinator.pik", "rb") as fichierArbre: # Récupère l'arbre des questions et réponses pour pouvoir jouer
arbre = pickle.load(fichierArbre)
sauvegarde_arbre = arbre # Sauvegarde l'arbre donné pour pouvoir le modifier en cas de mauvaise réponse
print("Pense à un animal.") # Demande au joueur de penser à l'animal qu'il souhaite faire deviner
while not func_prim.estFeuille(arbre): # Tant que l'arbre n'est pas une feuille (donc un animal)
reponse = input(f"{func_prim.racine(arbre)} ") # Il pose au joueur la question
if reponse.lower().strip() == "oui": # Si elle est oui, l'arbre devient le filsGauche de l'arbre
arbre = func_prim.filsGauche(arbre)
elif reponse.lower().strip() == "non": # Si elle est non, l'arbre devient le filsDroit de l'arbre
arbre = func_prim.filsDroit(arbre)
else: # Si la réponse est incorrecte, il donne un message d'erreur et repose la question
print("La réponse entrée est invalide, répond bien par 'oui' ou 'non' !")
resultat = "0" # Crée une variable résultat avec une valeur arbitraire
while resultat == "0": # Tant que résultat a cette valeur arbitraire, on demande si le résultat est bon
resultat = input(f"C'est un {arbre} ! J'ai raison ? ") # Donne la réponse qu'il a trouvé et demande s'il a bon
if resultat.lower().strip() == "oui": # Si Akinator a raison, dit qu'il a gagné
print("Super ! J'ai encore gagné !")
elif resultat.lower().strip() == "non": # S'il a tord
animal_attendu = input("C'était quoi alors ? ") # Demande l'animal attendu
question_proposee = input(f"Donne une question : oui pour {arbre}, non pour {animal_attendu} : ") # Puis demande la question à poser
sauvegarde_arbre = func_prim.ajoute(question_proposee, arbre, animal_attendu, sauvegarde_arbre) # Ajoute la question à l'arbre et stocke le nouvel arbre
with open("arbre_akinator.pik", "wb") as fichierArbre: # Modifie le fichier pour le mettre à jour avec l'arbre modifié
pickle.dump(sauvegarde_arbre, fichierArbre)
else: # Si l'entrée utilisateur est invalide, fait recommencer
resultat = "0"
print("La réponse entrée est invalide, répond bien par 'oui' ou 'non' !")
rejoue = input("Veux-tu rejouer ? ") # Demande si le joueur veut rejouer, si oui, relance une partie, sinon dit aurevoir
if rejoue.lower().strip() == "oui":
jeu2()
else:
print("Merci d'avoir joué ! À bientôt !")