Discussions

Voici mon programme

Image

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 = """
██████╗ █████╗ ███████╗███████╗ █████╗ ██████╗
██╔════╝██╔══██╗██╔════╝██╔════╝██╔══██╗██╔══██╗
██║ ███████║█████╗ ███████╗███████║██████╔╝
██║ ██╔══██║██╔══╝ ╚════██║██╔══██║██╔══██╗
╚██████╗██║ ██║███████╗███████║██║ ██║██║ ██║
╚═════╝╚═╝ ╚═╝╚══════╝╚══════╝╚═╝ ╚═╝╚═╝ ╚═╝

██████╗██╗██████╗ ██╗ ██╗███████╗██████╗
██╔════╝██║██╔══██╗██║ ██║██╔════╝██╔══██╗
██║ ██║██████╔╝███████║█████╗ ██████╔╝
██║ ██║██╔═══╝ ██╔══██║██╔══╝ ██╔══██╗
╚██████╗██║██║ ██║ ██║███████╗██║ ██║
╚═════╝╚═╝╚═╝ ╚═╝ ╚═╝╚══════╝╚═╝ ╚═╝
"""

 

3 réponses
Image
Louis-Nicolas Leuillet
Le 17/10/2022 à 11:16

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 !

Image
Vincent Bothier
Le 17/10/2022 à 13:57

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

 

Image
Vincent Bothier
Le 20/10/2022 à 17:51

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

 

 

 

Image
Inscrivez-vous ou connectez-vous pour participer à la discussion.

Informations

Créée le 17 octobre 2022 08:45
Dernière activité le 17 octobre 2022 08:45