Première NSI Mme Pierrot
Codage des caractères et accès aux fichiers
Thème :
accès aux fichiers pour le codage de César
Compétences à acquerir :
• Connaitre les principes de la représentation des lettres en machine,
• Savoir accéder à un fichier .txt à partir d’un programme en python.
Notions :
Codage des caractères alphanumériques, ASCII, utf-8,....etc.
Eléments d’information et exemples.
Sitographie :
Un petit topo sur ASCII et unicode : https://www.fil.univ-lille1.fr/~routier/isn/activites/activite3/codcar.html Unicode : https://home.unicode.org/ et https://en.wikipedia.org/wiki/List_of_Unicode_characters
Pour bosser son anglais : https://www.youtube.com/watch?v=MijmeoH9LT4 Slicing :
Indices des caractères d’une chaine
+---+---+---+---+---+---+
| M | u | r | i | e | l | +---+---+---+---+---+---+
0 1 2 3 4 5 6 -6 -5 -4 -3 -2 -1
Fonctions s’appliquant aux chaines de caractères : chaine.index(‘E’) len(chaine) chaine[2:4]
#(slicing)
chaine.count(‘E’)
Accès aux fichiers
with open("t.txt","rw",encoding="utf-8") as f : f.write ("Texte que j’ajoute")
for ligne in f : print(ligne)
# with open(...) as f :
# remplace
# f = open(...) suivi de f.close()
Travail à réaliser
Voila quelques commandes à tester dans la console python en cherchant toujours à comprendre la réponse obtenue :
# Aide pour le codage de César o=[0]*12
o
# Comprendre le modulo (7+22)%26
(25+22)%26 (1+22)%26 -15%26
# Les chaines de caractères
alphabet = "ABCDEFGHIJKLMNOPQRSTUVWXYZ"
alphabet.index('C') alphabet[6]
for lettre in alphabet :
if alphabet.index(lettre)%2 == 0 : print (lettre)
len(alphabet) t='PATATRAC' t.count('A')
# concaténation de deux chaînes de caractères chaine = t + 'ODILE'
print(chaine)
# += plus rapide --> un raccourci chaine += 'ETPAUL'
# slicing print(chaine) print(chaine[0]) print(chaine[1]) print(chaine[1:4]) print(chaine[2:]) print(chaine[-1]) print(chaine[-6:])
# Quelques codes unicode à tester '\u0025'
'\u0040' '\u0152' '\u037B' '\u0488' '\u04A8' '\u2182' '\u24f3'
# L’accès aux fichiers
# Quand on ouvre un fichier,
# on doit absoluement le refermer
# Ouverture en ecriture
f = open("mouton.txt", 'w', encoding = "utf-8") for i in range (100) :
f.write(f'Je vois sauter {i} moutons\n') f.close()
# Ouverture en lecture
f = open("mouton.txt", 'r', encoding = "utf-8") for ligne in f :
print(ligne) f.close()
# ou Pour éviter d’avoir à penser
# à refermer le fichier t = ""
with open("mouton.txt","r", encoding="utf-8") as txt : for ligne in txt :
for caractere in ligne : t += caractere print(tc)
Première NSI Mme Pierrot
#!/usr/bin/env python3
# -*- coding: utf-8 -*-
"""
Squelette du projet « Codage de césar » Created on Mon Nov 9 11:37:40 2020
@author: marie
"""
def prend_texte():
"""
ouvre un fichier textecode.txt placé à coté du programme et prend l'ensemble des caractères qu'il contient et les mémorise dans une chaine de caractère tc et retourne cette chaine de caractère.
@author:
"""
tc = ""
with open("textecode.txt","r", encoding="utf-8") as txt : for ligne in txt :
for caractere in ligne : tc = tc + caractere return tc
def compte_lettre(texte):
"""
fonction qui compte le nombre d'ocurrence de chaque lettre de l'alphabet dans texte et renvoie une liste de ces occurences [nbre de A, nbre de B,...]
@author:
"""
# à compléter return occurrence def devine_cle(occ):
"""
En partant de l'hypothèse où "E" est la lettre la plus présente dans un texte écrit en français trouver la clé de César en comparant avec les occurrences de chaque lettre dans le texte codé.
@author:
"""
# à compléter return cle
def decode(texte, cle) : """
Avec le texte codé et la clé produit le texte décodé @author:
"""
# à compléter return txtdcd
def cree_fichier_texte_decode(t) : """
à compléter @author:
"""
# à compléter return
# Enfin le programme principal qui utilise les fonctions pour décoder les textes proposés
# à compléter