Ajout de ce qui a été fait pendant le contrôle de TP

This commit is contained in:
Geoffrey Frogeye 2014-12-12 19:17:40 +01:00
parent 47efb9a428
commit f0959596df
2 changed files with 224 additions and 0 deletions

180
S1/Contrôle/ctrltp.py Normal file
View file

@ -0,0 +1,180 @@
# PREUD'HOMME BONTOUX Geoffrey - PeiP 12 - 2014/2015
# Contrôle de TP du 12/12/2014
# http://www.lifl.fr/~mailliet/Initprog/ctrltpp/
import doctest
##On rappelle que ces codes peuvent être directement obtenues dans Python en utilisant la fonction ord qui renvoie le code (un entier) correspondant au caractère qui lui est passé en paramètre et la fonction réciproque est chr.
##Question 1 Réalisez une fonction chiffrement_lettre_maj, prenant deux paramètres : un caractère carac et un entier n et qui renvoie le résultat du décalage de carac de n lettres vers la droite (décalage cyclique, rappelez-vous, les dernières lettres de l'alphabet sont codées par les premières) .
def chiffrement_lettre_maj(carac, n):
"""
str, int str
Renvoie le résultat du décalage de carac de n lettres vers la droite.
>>> chiffrement_lettre_maj('A', 3)
'D'
>>> chiffrement_lettre_maj('Y', 2)
'A'
>>> chiffrement_lettre_maj('W', 4)
'A'
"""
ordre = ord(carac)+n
if ordre < 65:
ordre += 26
if ordre > 90:
ordre += -26
return chr(ordre)
##Question 2 Réalisez une fonction nommée dechiffrement_lettre_maj qui soit la fonction inverse de chiffrement_lettre_maj.
def dechiffrement_lettre_maj(carac, n):
"""
str, int str
Renvoie le résultat du décalage de carac de n lettres vers la gauche.
>>> dechiffrement_lettre_maj('D', 3)
'A'
>>> dechiffrement_lettre_maj('A', 2)
'Y'
>>> dechiffrement_lettre_maj('A', 4)
'W'
"""
return chiffrement_lettre_maj(carac, -n)
##Question 3 Réalisez un prédicat nommé est_majuscule qui détermine si le caractère passé en paramètre est une lettre majuscule ou non. La fonction (ce prédicat) renverra un booléen.
def est_majuscule(carac):
"""
str bool
Indique si carac est une majuscule
>>> est_majuscule('A')
True
>>> est_majuscule('z')
False
"""
ordre = ord(carac)
return ordre >= 65 and ordre <= 90
##Question 4 Réalisez une fonction chiffrement qui prend une chaîne de caractères et un entier d en paramètres, et qui renvoie une chaîne de caractères chiffrée avec le décalage d.
def chiffrement(chaine, d):
"""
str, int str
Renvoie une chaîne de caractères chiffrée avec le décalage d.
>>> chiffrement('YOYO', 3)
'BRBR'
>>> chiffrement("CESAR, IL EST TROP FORT !", 2)
'EGUCT, KN GUV VTQR HQTV !'
"""
chiffrat = ''
for i in chaine:
if est_majuscule(i):
chiffrat += chiffrement_lettre_maj(i, d)
else:
chiffrat += i
return chiffrat
##Question 5 Réalisez également la fonction inverse qui permet de déchiffrer un message.
def dechiffrement(chaine, d):
"""
str, int str
Renvoie une chaîne de caractères déchiffrée avec le décalage d.
>>> dechiffrement('BRBR', 3)
'YOYO'
>>> dechiffrement("EGUCT, KN GUV VTQR HQTV !", 2)
'CESAR, IL EST TROP FORT !'
"""
return chiffrement(chaine, -d)
##Question 6 Quel est le message que César a codé par SWGN DGCW OGVKGT RTQHGUUGWT ?
##>>> dechiffrement('SWGN DGCW OGVKGT RTQHGUUGWT ?', 2)
##'QUEL BEAU METIER PROFESSEUR ?'
##Question 7 Il est maintenant temps de sintéresser aux lettres minuscules. Vous allez réaliser les fonctions nécessaires au traitement des lettres minuscules.
def chiffrement_lettre_min(carac, n):
"""
str, int str
Renvoie le résultat du décalage de carac de n lettres vers la droite.
>>> chiffrement_lettre_min('a', 3)
'd'
>>> chiffrement_lettre_min('y', 2)
'a'
>>> chiffrement_lettre_min('w', 4)
'a'
"""
ordre = ord(carac)+n
if ordre < 97:
ordre += 26
if ordre > 122:
ordre += -26
return chr(ordre)
def dechiffrement_lettre_min(carac, n):
"""
str, int str
Renvoie le résultat du décalage de carac de n lettres vers la gauche.
>>> dechiffrement_lettre_min('d', 3)
'a'
>>> dechiffrement_lettre_min('a', 2)
'y'
>>> dechiffrement_lettre_min('a', 4)
'w'
"""
return chiffrement_lettre_min(carac, -n)
def est_minuscule(carac):
"""
str bool
Indique si carac est une majuscule
>>> est_minuscule('a')
True
>>> est_minuscule('Z')
False
"""
ordre = ord(carac)
return ordre >= 97 and ordre <= 122
def chiffrement2(chaine, d):
"""
str, int str
Renvoie une chaîne de caractères chiffrée avec le décalage d.
>>> chiffrement2('Yoyo', 3)
'Brbr'
>>> chiffrement2 ("Jules Cesar dit : Tu quoque mi fili", 2)
'Lwngu Eguct fkv : Vw swqswg ok hknk'
"""
chiffrat = ''
for i in chaine:
if est_majuscule(i):
chiffrat += chiffrement_lettre_maj(i, d)
elif est_minuscule(i):
chiffrat += chiffrement_lettre_min(i, d)
else:
chiffrat += i
return chiffrat
def dechiffrement2(chaine, d):
"""
str, int str
Renvoie une chaîne de caractères déchiffrée avec le décalage d.
>>> dechiffrement2('Brbr', 3)
'Yoyo'
>>> dechiffrement2("Lwngu Eguct fkv : Vw swqswg ok hknk", 2)
'Jules Cesar dit : Tu quoque mi fili'
"""
return chiffrement2(chaine, -d)
def tester():
doctest.testmod(verbose=True)

44
S1/Echecs/README.md Normal file
View file

@ -0,0 +1,44 @@
#Jeu d'Échecs
Jeu d'Échec programmé dans le cadre d'un TP alternatif pour l'enseignement Informatique S1.
##Dépendances
* python ≥ 3.0
* tk
##Lancement
```bash
python echecs.py
```
(en supposant que `python` est dans la variable d'environnement `path` (ou `$PATH` sous Windows) et point vers l'éxecutable de Python 3)
##Fonctions non-implémentées
###Règles des échecs
* Le Roque
* La promotion du pion
* Prise en passant
* Détection du "pat" (le joueur ne pouvant pas jouer est considéré comme perdant, même s'il n'est pas en échec)
###Consignes de TP
* Pouvoir choisir entre jeu de dame et jeu d'échecs
Le jeu de dame n'est pas implémenté, cependant les autres classes sont compatibles avec lui car il suffit de changer la classe Logique**** utilisée.
* Redimensionnement de la fenêtre
Il suffirait de changer CASE_COTE pour en faire une variable, et faire une fonction qui appelle les fonctions de redimensionnement d'image et de placement d'objets qui serait appelé lors d'un redimensionnement.
* Documentation et tests
Étant donné que les fonctions sont plutôt expliquables d'elle-même par leur nom, que je suis seul à travailler sur ce projet, et que j'ai passé pas mal de temps à découper les fonctions, elles ne sont ni documentées ni testées.
###Autre
* Séparation entre Fenêtre et Plateau
Un plateau devrait être generé pour chaque partie et pour chaque type de jeu