Problème d'affichage de la réponse python

-
Bonjour,

Je suis en terminale et je viens de commencer la programmation sur python et j'ai un problème. Je dois fais un programme qui permet de déchiffrer un message.

Le sujet:

Cette méthode de chiffrement consiste à ajouter au texte d'origine des caractères choisis aléatoirement,
de façon à le transformer en un texte inintelligible. Le nombre de caractères aléatoires insérés après
chaque caractère du texte non chiffré sera défini à partir de ce caractère et d'une clé. Chaque caractère,
tout comme la clé, peut être considéré comme un entier compris entre 0 pour a et 25 pour z, en lui
faisant correspondre son rang dans l'alphabet. Le nombre de caractères ajoutés à un endroit sera le
reste de la division entière par 3 de la somme des rangs dans l'alphabet du caractère du texte d'origine
et de la clé.
Ainsi, pour le message en clair ''abeille'' et la clé ''e'', dont le rang dans l'alphabet est 4, le message
chiffré sera du type ''a?b??e??ille??'' où chaque ''?'' est un caractère choisi aléatoirement dans
l'alphabet.
L'opération de déchiffrement s'effectuera de manière analogue, en supprimant le nombre de caractères
qui suivent un caractère identifié comme faisant partie du message en clair, obtenu en effectuant le
même calcul que lors du chiffrement, à partir de la même clé.
Ainsi le message chiffré ''aubonetrilleur'' obtenu par ce mode de chiffrement avec la clé ''e''
correspond au texte clair ''abeille''. En effet, le premier caractère du message n'étant pas affecté par le
chiffrement, le calcul effectué à partir du caractère ''a'' et de la clé ''e'' conduit à la suppression d'un
caractère, le ''u''. Le ''b'' qui suit le caractère supprimé, est donc conservé. Ce processus est à appliquer
jusqu'à atteindre la fin du message chiffré.

Réaliser un programme python python appliquant cette méthode de déchiffrement
au texte ''utnejlfoclbisefwlteunrq'' affecté à une variable de type chaîne de caractères à partir de la
clé ''f'' et affichant le résultat.

Voici mon programme:

clef = "f"
fs = open ("texte1.txt", "r")
fd= open ("texte2.txt", "w")
txt = fs.read(0)
while txt != "":
    X = print(((ord(txt)-97)+(ord(clef)-97))%3)
    fd.read(str(0))
    txt = fs.write((ord(txt)-97)+1+X)
print(txt)
fs.close()
fd.close()


Mon problème c'est que le résultat ne s'affiche pas.
Merci d'avoir lu.
Afficher la suite 

2 réponses

0
Merci
Bonjour,

Ton code est truffé d'erreurs.
Voir les commentaires dans le code.

clef = "f"
fs = open ("texte1.txt", "r")
fd= open ("texte2.txt", "w")
# Pourquoi mettre 0 ? Cela revient à dire donne moi 0 caractère du fichier !
# Comme txt vaut rien, tu n'entres pas dans la boucle, sinon tu aurais eu de gros plantages.
txt = fs.read(0)

while txt != "":
    # Pourquoi affecter à X ce que retourne print ? print retourne None !
    X = print(((ord(txt)-97)+(ord(clef)-97))%3)
    # fd est le fichier en écriture !
    # Faire str(0) revient à faire '0'
    # Donc là tu as fait n'importe quoi
    fd.read(str(0))
    # fs est le fichier en lecture !
    # Tu ne peux pas écrire un nombre (int) dans un fichier, seulement une chaine de caractères.
    txt = fs.write((ord(txt)-97)+1+X)
    print(txt)

fs.close()
fd.close()
J'ai essayé de reprendre le programme mais j'ai encore des difficultés
clef = "f"
fs="utnejlfoclbisefwlteunrq"
fd= open("texte2.txt", "w")
txt= fs [0]
while fs != "":
    X = print(((ord(txt)-97)+(ord(clef)-97))%3)
    #fd.read(str(0))   # Je dois mettre quoi ici pour que seul le premier caractère soit envoyé dans fd
    txt = ((ord(txt)-97)+1+X)  # Comment faire pour éviter le message d'erreur car X = None
    print(txt)

fd.close()
Commenter la réponse de khrug
Non pas du tout car X me donne un message d'erreur NoneType
> LordRyl3igh -
Relis les commentaires de ce que je t'ai répondu.

Si on te demande de faire ce genre d'exercice, c'est que tu as forcément vu en cours ce qu'il faut pour le réaliser.

Lire un caractère d'un fichier, c'est faire
fs.read(1)
.

Donc procède par étape, ouvre ton fichier à lire en lecture, et affiche les caractères un à un avec read dans une boucle. Cela réussi, tu pourras passer à la suite.
Commenter la réponse de khrug