Feat(NSI): exercices sur les dictionnaires
All checks were successful
continuous-integration/drone/push Build is passing
All checks were successful
continuous-integration/drone/push Build is passing
This commit is contained in:
61
1NSI/10_Dictionnaire/scripts/cesar.py
Normal file
61
1NSI/10_Dictionnaire/scripts/cesar.py
Normal file
@@ -0,0 +1,61 @@
|
||||
def chiffre_cesar(message:str, cle:int)->str:
|
||||
"""
|
||||
Chiffre un message avec le chiffrement par décalage sur les caractères imprimables ASCII.
|
||||
|
||||
:param message: le message à chiffrer
|
||||
:param cle: décalage à appliquer
|
||||
:return: le message chiffré
|
||||
"""
|
||||
message_chiffre = ""
|
||||
for caractere in message:
|
||||
caractere_chiffre = chr((ord(caractere) - 32 + cle) % 95 + 32)
|
||||
message_chiffre += caractere_chiffre
|
||||
return message_chiffre
|
||||
|
||||
def dechffre_cesar(message_chiffre:str, cle:int) -> str:
|
||||
""" Déchiffre un message chiffré avec la méthode César"""
|
||||
return chiffre_cesar(message_chiffre, -cle)
|
||||
|
||||
# On souhaite casser ce chiffrement c'est à dire trouver la clé de chiffrement
|
||||
def signature(message: str) -> dict:
|
||||
""" Compte le nombre d'occurrences de chaque caractère"""
|
||||
# à compléter
|
||||
pass
|
||||
|
||||
# Tests à ajouter
|
||||
|
||||
|
||||
|
||||
def caractere_plus_courant(message:str) -> str:
|
||||
""" Donne le caractère le plus présent du message
|
||||
|
||||
En cas d'égalité, on renverra un des plus présent
|
||||
"""
|
||||
assert len(message) > 0
|
||||
# à compléter
|
||||
pass
|
||||
|
||||
# Ajouter deux tests
|
||||
assert caractere_plus_courant("uiopyyy") == "y"
|
||||
|
||||
def decalage(caractere:str) -> int:
|
||||
""" En supposant que caractere soit le caractère le plus présent du message, c'est certainement le caractère correspondant à l'espace. On peut donc calculer la clé"""
|
||||
# à compléter
|
||||
pass
|
||||
|
||||
# Tests (ajouter deux tests)
|
||||
assert decalage("#") == 3
|
||||
assert decalage("~") == 94
|
||||
|
||||
def trouve_cle(message_chiffre:str) -> int:
|
||||
""" À partir d'un message chiffré, retrouve la clé"""
|
||||
# à compléter
|
||||
pass
|
||||
|
||||
def casse_cesar(message_chiffre:str) -> str:
|
||||
""" À partir d'un message chiffré, déchiffre le message"""
|
||||
# à compléter
|
||||
pass
|
||||
|
||||
message = "Au théâtre, Victor Hugo s'est imposé comme un des chefs de file du romantisme français en présentant sa conception du drame romantique dans les préfaces qui introduisent Cromwell en 1827, puis Hernani en 1830, qui sont de véritables manifestes, puis par ses autres œuvres dramatiques, en particulier Lucrèce Borgia en 1833 et Ruy Blas en 1838."
|
||||
# Dans la suite, chiffrer ce message puis essayer de casser le chiffrement avec votre fonction.
|
98
1NSI/10_Dictionnaire/scripts/scrabble.py
Normal file
98
1NSI/10_Dictionnaire/scripts/scrabble.py
Normal file
@@ -0,0 +1,98 @@
|
||||
valeur_lettres = {
|
||||
"a": 1,
|
||||
"e": 1,
|
||||
"i": 1,
|
||||
"o": 1,
|
||||
"n": 1,
|
||||
"r": 1,
|
||||
"t": 1,
|
||||
"l": 1,
|
||||
"s": 1,
|
||||
"u": 1,
|
||||
"d": 2,
|
||||
"g": 2,
|
||||
"b": 3,
|
||||
"c": 3,
|
||||
"m": 3,
|
||||
"p": 3,
|
||||
"f": 4,
|
||||
"h": 4,
|
||||
"v": 4,
|
||||
"w": 4,
|
||||
"y": 4,
|
||||
"k": 5,
|
||||
"j": 8,
|
||||
"x": 8,
|
||||
"q": 10,
|
||||
"z": 10,
|
||||
}
|
||||
|
||||
## Signature d'un mot
|
||||
|
||||
def signature(mot:str) -> dict:
|
||||
"""Fonction qui compte le nombre de fois que chaque lettre apparait dans le mot
|
||||
|
||||
:param mot: le mot à étudier
|
||||
:return: dictionnaire avec en clé les lettres et en valeur le nombre de fois qu'elles apparaissent
|
||||
"""
|
||||
# à compléter
|
||||
pass
|
||||
|
||||
# Ajouter deux tests en plus
|
||||
assert signature("coucou") == {'c': 2, 'o': 2, 'u': 2}
|
||||
assert signature("") == {}
|
||||
|
||||
## Score d'un mot
|
||||
|
||||
def score(mot: str, valeurs: dict) -> int:
|
||||
""" Calcul le score que fait un mot
|
||||
|
||||
:param mot: le mot à étudier
|
||||
:param valeurs: dictionnaire avec les valeurs de chaque lettre
|
||||
:return: le score du mot
|
||||
"""
|
||||
# à compléter
|
||||
pass
|
||||
|
||||
# Ajouter deux tests en plus
|
||||
assert score("coucou", valeur_lettres) == 10
|
||||
assert score("", valeur_lettres) == 0
|
||||
|
||||
|
||||
## Meilleur score
|
||||
def meilleur_score(mots_possibles:list, valeurs:dict) -> str:
|
||||
""" Renvoie le mot qui fait le plus de points dans la liste des mots possibles"""
|
||||
# à compléter
|
||||
pass
|
||||
|
||||
assert meilleur_score(["coucou", "hop"], valeur_lettres) == "coucou"
|
||||
|
||||
autres_valeurs_lettres = {
|
||||
"a": 1,
|
||||
"e": 1,
|
||||
"i": 1,
|
||||
"o": 1,
|
||||
"n": 1,
|
||||
"r": 1,
|
||||
"t": 1,
|
||||
"l": 1,
|
||||
"s": 1,
|
||||
"u": 1,
|
||||
"d": 2,
|
||||
"g": 2,
|
||||
"b": 3,
|
||||
"c": 3,
|
||||
"m": 3,
|
||||
"p": 3,
|
||||
"f": 4,
|
||||
"h": 100,
|
||||
"v": 4,
|
||||
"w": 4,
|
||||
"y": 4,
|
||||
"k": 5,
|
||||
"j": 8,
|
||||
"x": 8,
|
||||
"q": 10,
|
||||
"z": 10,
|
||||
}
|
||||
assert meilleur_score(["coucou", "hop"], autres_valeurs_lettres) == "hop"
|
Reference in New Issue
Block a user