Bonjour,
Voici mon petit programme.
J'ai séparer les fonctions du programme principal en les mettant dans un module -> my_module.py
J'ai aussi gérer les erreurs.
Que pensez-vous de mon programme ?
Merci
Bonne journée
main.py
from my_module import *
alphabet = ['a', 'b', 'c', 'd', 'e', 'f', 'g', 'h', 'i', 'j', 'k', 'l', 'm', 'n', 'o', 'p', 'q', 'r', 's', 't', 'u', 'v', 'w', 'x', 'y', 'z',
'a', 'b', 'c', 'd', 'e', 'f', 'g', 'h', 'i', 'j', 'k', 'l', 'm', 'n', 'o', 'p', 'q', 'r', 's', 't', 'u', 'v', 'w', 'x', 'y', 'z']
print(logo)
while True:
question = input("Voulez-vous crypter ou décrypter un message ? ").lower()
while question != "crypter" and question != "décrypter":
print("ERREUR, veuillez répondre par (crypter ou décrypter) !")
question: str = input("Voulez-vous crypter ou décrypter un message ? ").lower()
if question == "crypter":
cle_message = demander_cle_message(question) # la fonction retourne un tuple
crypter = crypter(alphabet, cle_message[0], cle_message[1]) # appel de la fonction crypter
print(f"\t VOTRE MESSAGE {question.upper()} : {crypter} ")
else:
cle_message = demander_cle_message(question) # la fonction retourne un tuple
decrypter = decrypter(alphabet, cle_message[0], cle_message[1]) # appel de la fonction decrypter
print(f"\t VOTRE MESSAGE {question.upper()} : {decrypter} ")
print()
continuer = input("Voulez vous recommencer ? (o / n) : ")
while continuer != "o" and continuer != "n":
print("Erreur, veuillez répondre par (o / n) !")
continuer = input("Voulez vous recommencer ? (o / n) : ")
if continuer == "n":
print("AU REVOIR")
break
my_module.py
# FONCTIONS
def demander_cle_message(question: str) -> tuple:
cle = input(f"\t - Choississez une clé pour {question} (entre 1 et 26) : ")
try:
cle = int(cle)
if cle < 1 or cle > 26:
print("\t ERREUR, veuillez entrer un nombre entre 1 et 26 !\n")
return demander_cle_message(question) # fonction récursive
except:
print("\t ERREUR, veuillez entrer un nombre valide !\n")
return demander_cle_message(question) # fonction récursive
else:
message = input(f"\t - Entrez le message à {question} : ")
print("-" * 70)
return cle, message
def crypter(alphabet: list, cle: int, message: str) -> str:
msg = ""
for i in message:
crypter = alphabet.index(i) + cle
message_crypter = alphabet[crypter]
msg += message_crypter
return msg
def decrypter(alphabet: list, cle: int, message: str) -> str:
msg = ""
for i in message:
decrypter = alphabet.index(i) - cle
message_decrypter = alphabet[decrypter]
msg += message_decrypter
return msg
logo = """
██████╗ █████╗ ███████╗███████╗ █████╗ ██████╗
██╔════╝██╔══██╗██╔════╝██╔════╝██╔══██╗██╔══██╗
██║ ███████║█████╗ ███████╗███████║██████╔╝
██║ ██╔══██║██╔══╝ ╚════██║██╔══██║██╔══██╗
╚██████╗██║ ██║███████╗███████║██║ ██║██║ ██║
╚═════╝╚═╝ ╚═╝╚══════╝╚══════╝╚═╝ ╚═╝╚═╝ ╚═╝
██████╗██╗██████╗ ██╗ ██╗███████╗██████╗
██╔════╝██║██╔══██╗██║ ██║██╔════╝██╔══██╗
██║ ██║██████╔╝███████║█████╗ ██████╔╝
██║ ██║██╔═══╝ ██╔══██║██╔══╝ ██╔══██╗
╚██████╗██║██║ ██║ ██║███████╗██║ ██║
╚═════╝╚═╝╚═╝ ╚═╝ ╚═╝╚══════╝╚═╝ ╚═╝
"""
Bonjour Vincent !
Félicitations votre programme fonctionne ! Je dois avouer que la gestion des erreurs et l'utilisation d'un module est bien pensé. Vous avez également défini des annotations, il faut vraiment continuer !
Vous pouvez foncer maintenant !
Merci c'est gentil... je vais essayer de garder la tête froide et pas trop foncer quand même, le chemin est encore très long mais passionnant
Bonjour,
En fait, mon programme ne fonctionne pas si bien que cela.
En effet, au 1er tour de boucle -> aucun soucis
Par contre si on veut crypter ou décrypter 2 fois de suite, on obtient une jolie petite erreur : TypeError: 'str' object is not callable
Voulez-vous crypter ou décrypter un message ? crypter
- Choississez une clé pour crypter (entre 1 et 26) : 1
- Entrez le message à crypter : toto
----------------------------------------------------------------------
VOTRE MESSAGE CRYPTER : upup
Voulez-vous recommencer ? (o / n) : o
Voulez-vous crypter ou décrypter un message ? crypter
- Choississez une clé pour crypter (entre 1 et 26) : 1
- Entrez le message à crypter : titi
----------------------------------------------------------------------
Traceback (most recent call last):
File "C:\Users\vboth\PycharmProjects\chiffre_de_cesar_v2\main.py", line 25, in <module>
crypter = crypter(alphabet, cle_message[0], cle_message[1]) # appel de la fonction crypter
TypeError: 'str' object is not callable
Cette erreur survient car l'interpréteur ne sait pas ce qu'il doit appeler. J'ai fais l'erreur de nommer mes variables avec le même nom que mes fonctions. (pourquoi il plante pas au 1er tour de boucle ? -> aucunes idées.
Pour résoudre le problème, il suffit "simplement" de renommer les variables et là, plus de bug.
J'en conclus que même sur de petits programme, il faut vraiment se "poser" prendre le temps de la réflexion et analyser le problème à résoudre.
le code modifié :
while True:
question = input(f"Voulez-vous\33[34m crypter\033[00m ou \033[34mdécrypter\033[00m un message ? ").lower()
while question != "crypter" and question != "décrypter":
print("ERREUR, veuillez répondre par (crypter ou décrypter) !")
question: str = input("Voulez-vous crypter ou décrypter un message ? ").lower()
if question == "crypter":
cle_message = demander_cle_message(question) # la fonction retourne un tuple
msg_crypter = crypter(alphabet, cle_message[0], cle_message[1]) # appel de la fonction crypter
print(f"\t VOTRE MESSAGE {question.upper()} : {msg_crypter} ")
else:
cle_message = demander_cle_message(question) # la fonction retourne un tuple
msg_decrypter = decrypter(alphabet, cle_message[0], cle_message[1]) # appel de la fonction decrypter
print(f"\t VOTRE MESSAGE {question.upper()} : {msg_decrypter} ")
recommencer = input("Voulez-vous recommencer ? (o / n) : ").lower()
if recommencer != "o":
break