some python code that dont work for SNT

This commit is contained in:
Adrian Amaglio 2021-03-17 12:56:16 +01:00
parent cddef5d277
commit 53a1f95417
11 changed files with 450 additions and 0 deletions

Binary file not shown.

Binary file not shown.

34
python/fonctions/main.py Normal file
View File

@ -0,0 +1,34 @@
def bonjour ():
""" Cette fonction affiche le texte « Bonjour à tous » """
print('Bonjour à tous')
def somme (a, b):
""" Cette fonction retourne la somme de a et b """
return a+b
# Exercice 1 — Écrivez une fonction nommée « trois » qui retourne la valeur 3
# Exercice 2 — Écrivez une fonction nommée « double » qui prend un nombre en paramètre et retourne le double de sa valeur
# Exercice 3 — Écrivez une fonction nommée « triple » qui prend un nombre en paramètre et retourne le triple de sa valeur
# Exercice 4 — Écrivez une fonction nommée « carre » qui prend un nombre en paramètre et retourne le carré de sa valeur
# Exercice 5 — Écrivez une fonction nommée « est_majeur » qui prend un âge en paramètre et retourne True si cet âge est plus grand que 18, False sinon
# Exercice 6 — Écrivez une fonction nommée « est_grand » qui prend une taille en centimètres en paramètre et retourne True si elle est plus grande que 160, False sinon
# Exercice 7 — En vous aidant des fonctions est_majeur et est_grand, écrivez une fonction nommée « peut_faire_le_manege » qui prend un âge et une taille en paramètre et renvoie true si la taille est plus grande que 160 et que lâge est plus grand que 18
if __name__ == '__main__':
def get_function (name):
try:
return getattr(m, 'sommet')
except AttributeError:
print('************************* ERREUR *************************')
print('La fonction « {} » na pas été trouvée'.format(name))
def test (function_name, test_function):
f = get_function(function_name)
import importlib, os
m = importlib.import_module(os.path.basename(__file__)[0:-3])

View File

@ -0,0 +1,160 @@
# Voici Deux exemples de fonctions
def bonjour ():
""" Cette fonction affiche le texte « Bonjour à tous » """
print('Bonjour à tous')
def somme (a, b):
""" Cette fonction retourne la somme de a et b """
return a+b
# Exercice 1 — Écrivez une fonction nommée « trois » qui retourne la valeur 3
# Exercice 2 — Écrivez une fonction nommée « double » qui prend un nombre en paramètre et retourne le double de sa valeur
# Exercice 3 — Écrivez une fonction nommée « triple » qui prend un nombre en paramètre et retourne le triple de sa valeur
# Exercice 4 — Écrivez une fonction nommée « carre » qui prend un nombre en paramètre et retourne le carré de sa valeur
# Exercice 5 — Écrivez une fonction nommée « est_majeur » qui prend un âge en paramètre et retourne True si cet âge est plus grand que 18, False sinon
# Exercice 6 — Écrivez une fonction nommée « est_grand » qui prend une taille en centimètres en paramètre et retourne True si elle est plus grande que 140, False sinon
# Exercice 7 - En vous aidant de la fonction « est_majeur », écrivez une fonction nommée « est_mineur » qui prend un âge en paramètre et renvoie True si lâge est strictement inférieur à 18
# Exercice 8 — En vous aidant des fonctions est_majeur et est_grand, écrivez une fonction nommée « peut_faire_le_manege » qui prend un âge et une taille en paramètre et renvoie true si la taille est plus grande que 140 et que lâge est plus grand que 18
# Exercice 9 — En vous aidant des fonctions est_majeur et est_grand, écrivez une fonction nommée « est_un_enfant » qui prend un âge et une taille en paramètre et renvoie true si la taille est plus petite que 140 et que lâge est plus petit que 18
# Exercice 10 — En vous aidant des fonctions double et est_grand, écrivez une fonction nommée « agrandir » qui prend une taille en paramètre et renvoie la taille doublée si elle est plus petite que 140 mais la renvoie non modifiée sinon
##################################################################################################
# Le code python suivant permet de faire les tests, nécrivez rien en dessous de cette ligne #
##################################################################################################
if __name__ == '__main__':
import importlib, os
tests = [
{
'function_name': 'trois',
'tests': [
{'params': [], 'result': 3},
],
},
{
'function_name': 'double',
'tests': [
{'params': [2], 'result': 4},
{'params': [0], 'result': 0},
{'params': [-12], 'result': -24},
]
},
{
'function_name': 'triple',
'tests': [
{'params': [2], 'result': 6},
{'params': [0], 'result': 0},
{'params': [-12], 'result': -36},
]
},
{
'function_name': 'carre',
'tests': [
{'params': [4], 'result': 16},
{'params': [0], 'result': 0},
{'params': [-12], 'result': 144},
]
},
{
'function_name': 'est_majeur',
'tests': [
{'params': [4], 'result': False},
{'params': [18], 'result': True},
{'params': [76], 'result': True},
{'params': [-12], 'result': False},
]
},
{
'function_name': 'est_grand',
'tests': [
{'params': [4], 'result': False},
{'params': [140], 'result': True},
{'params': [200], 'result': True},
{'params': [-12], 'result': False},
],
},
{
'function_name':'peut_faire_le_manege',
'tests': [
{'params': [18, 140], 'result': True},
{'params': [2, 140], 'result': False},
{'params': [18, 100], 'result': False},
{'params': [-2, -1], 'result': False},
]
},
{
'function_name':'est_un_enfant',
'tests': [
{'params': [18, 140], 'result': False},
{'params': [2, 140], 'result': False},
{'params': [18, 100], 'result': False},
{'params': [-2, -1], 'result': True},
]
},
{
'function_name':'agrandir',
'tests': [
{'params': [4], 'result': 8},
{'params': [-8], 'result': -16},
{'params': [140], 'result': 140},
{'params': [150], 'result': 150},
]
},
]
print('\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n')
print('------------------------------- Restart --------------------------------')
print('\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n')
nb_tests = sum(len(item['tests']) for item in tests)
nb_ok = 0
num_exercice = 0
try: # Import the module
m = importlib.import_module(os.path.basename(__file__)[0:-3])
except ModuleNotFoundError:
print('Le fichier module na pas été trouvé.')
exit(1)
for item in tests:
num_exercice += 1
print('\n---------------------------- Exercice {} ---------------------------- \n'.format(num_exercice))
# Les dictionnaires ne sont pas ordonnés sur certaines versions de python
#print('\n---------------------------------------------------------------------- \n')
try:
f = getattr(m,item['function_name'])
except AttributeError:
print('************************* ATTENTION *************************')
print('La fonction « {} » na pas été trouvée'.format(item['function_name']))
continue
print('On va tester la fonction {}'.format(item['function_name']))
for jeu in item.tests[item['function_name']]:
print('On exécute {}({})'.format(item['function_name'],', '.join((str(i) for i in jeu['params']))))
try:
result = f(*jeu['params'])
print('-> Résultat : ' + str(result))
if result == jeu['result']:
print('OK')
nb_ok += 1
else:
print('************************* RÉSULTAT INATTENDU *************************')
print('On attendait le résultat suivant : ' + str(jeu['result']))
except TypeError:
print('************************* PROBLÈME DE PARAMÈTRES *************************')
print('TypeError : Le nombre de paramètres de la fonction « {} » est-il bon ?'.format(function_name))
break
print('\nTotal des tests : {}/{}'.format(nb_ok, nb_tests))

View File

@ -0,0 +1,48 @@
def bonjour ():
""" Cette fonction affiche le texte « Bonjour à tous » """
print('Bonjour à tous')
def somme (a, b):
""" Cette fonction retourne la somme de a et b """
return a+b
# Exercice 1 — Écrivez une fonction nommée « trois » qui retourne la valeur 3
# Exercice 2 — Écrivez une fonction nommée « double » qui prend un nombre en paramètre et retourne le double de sa valeur
# Exercice 3 — Écrivez une fonction nommée « triple » qui prend un nombre en paramètre et retourne le double de sa valeur
# Exercice 4 — Écrivez une fonction nommée « carre » qui prend un nombre en paramètre et retourne le carré de sa valeur
# Exercice 5 — Écrivez une fonction nommée « est_majeur » qui prend un âge en paramètre et retourne True si cet âge est plus grand que 18, False sinon
# Exercice 6 — Écrivez une fonction nommée « est_grand » qui prend une taille en centimètres en paramètre et retourne True si elle est plus grande que 160, False sinon
# Exercice 7 — En vous aidant des fonctions est_majeur et est_grand, écrivez une fonction nommée « peut_faire_le_manege » qui prend un âge et une taille en paramètre et renvoie true si la taille est plus grande que 160 et que lâge est plus grand que 18
if __name__ == '__main__':
import unittest
class MyTests(unittest.TestCase):
# return True or False
def test_trois (self):
self.assertEqual(trois(), 3)
def test_double (self):
self.assertEqual(double(0), 0)
self.assertEqual(double(-11), -22)
self.assertEqual(double(7), 14)
def test_carre (self):
self.assertEqual(carre(0), 0)
self.assertEqual(carre(-11), 121)
self.assertEqual(carre(7), 49)
def test_est_majeur (self):
self.assertFalse(est_majeur(0))
self.assertFalse(est_majeur(-11))
self.assertTrue(est_majeur(18))
self.assertTrue(est_majeur(30))
def test_est_grand (self):
self.assertFalse(est_grand(0))
self.assertFalse(est_grand(-11))
self.assertTrue(est_grand(180))
self.assertTrue(est_grand(160))
def test_peut_faire_le_manege (self):
self.assertFalse(peut_faire_le_manege(0, 0))
self.assertFalse(peut_faire_le_manege(30, 150))
self.assertFalse(peut_faire_le_manege(17, 180))
self.assertTrue(peut_faire_le_manege(20, 180))
unittest.main()

View File

@ -0,0 +1,6 @@
from random import randint
number = randint(0,100)
essai = int(input('Essai :'))
print(type(essai))

Binary file not shown.

View File

@ -0,0 +1,167 @@
\documentclass[11pt,a4paper]{../../template_cours}
\usepackage{minted}
\title{Introduction à Python — Le jeu « Plus ou moins »}
\author{Adrian Amaglio}
\def\thesequence{Programmation}
\begin{document}
Durée : 1h\\
% ---
\section{Les règles du jeu}
Le jeu « Plus ou moins » a des règles assez simples.
Voici comment le jeu se joue sur ordinateur :
\begin{itemize}
\item Le programme choisit un nombre entier au hasard entre 0 et 100 (par exemple 42). Le joueur doit le deviner.
\item Le joueur propose un nombre (par exemple 55).
\item Le programme répond « plus grand, si la proposition est inférieure au nombre à deviner, « plus petit » si la proposition est supérieur et « Gagné » si la proposition est égale. (Dans notre exemple, lordinateur répondra « plus petit ».
\item Le joueur propose un nouveau nombre, jusquà ce quil ait le bon.
\end{itemize}
% ---
\section{Un nombre aléatoire}
En python, pour générer un nombre aléatoire entre 0 et 100 on a besoin des deux lignes suivantes.
\begin{minted}{python}
from random import randint
secret = randint(0,100)
\end{minted}
La variable $secret$ a maintenant pour valeur un nombre entier aléatoire !
\begin{exercice}
Pour vérifier leffet de la fonction daléatoire, exécutez ce programme Python et vérifiez quil affiche bien un nombre différent à chaque exécution.
\begin{minted}{python}
from random import randint
secret = randint(0,100) # Python choisit un nombre aléatoire
print(secret) # Python va afficher le contenu de la variable "secret"
\end{minted}
\end{exercice}
% ---
\section{Les propositions du joueur}
Pour que le joueur propose un nombre, nous allons devoir dire à notre programme dattendre une saisie de sa part.\\
On utilise pour cela la fonction $input$.
\begin{example}
\begin{minted}{python}
essai = int(input('Essai :'))
print(essai)
\end{minted}
\end{example}
\begin{exercice}
Exécutez un programme contenant les deux lignes de lexemple précédent.\\
Lorsquil vous demandera dentrer votre essai, entrez le chiffre 9, appuyez sur la touche « entrer » et vérifier que votre chiffre saffiche bien une seconde fois à lécran.
\end{exercice}
% ---
\section{Afficher des messages personnalisés}
Nous allons ajouter des \textbf{conditions}.
Une condition permet dexécuter des instructions python uniquement dans certains cas.
\begin{example}
Par exemple, le programme suivant sert à tester si une personne est majeure :
\begin{minted}{python}
age = 17
if age < 18:
print('Vous êtes mineur')
elif age == 18:
print('Vous êtes tout juste majeur')
else:
print('Vous êtes majeur')
\end{minted}
\end{example}
\begin{exercice}
Exécutez le programme de lexemple précédent. Et changez lâge pour voir dans quels cas chaque message est affiché.
\end{exercice}
% ---
\section{Version à un essai}
\begin{exercice}
À partir des deux exemples précédents, écrivez un programme qui :
\begin{itemize}
\item Tire un nombre aléatoire et le stock dans la variable $secret$.
\item Demande à lutilisateur dentrer un essai.
\item Affiche le nombre secret, pour que le joueur puisse voir sil correspond à son essai.
\end{itemize}
\textbf{Faites vérifier par le professeur}
\end{exercice}
% ---
\section{Version à un essai, avec un message personnalisé}
\begin{exercice}
Complétez votre programme pour quil affiche un message, comme définit dans les règles, en fonction de lessai du joueur.
\end{exercice}
% ---
\section{Version avec trop dessais !}
Pour que lutilisateur puisse entrer plusieurs essais, il faudrait répéter certaines étapes du programme.\\
Pour répéter indéfiniment des instructions, on utilise une boucle infinie !
\begin{example}
\begin{minted}{python}
while True:
print('Bonjour')
\end{minted}
Le programme ci-dessus, affichera « bonjour » en continu, tant que lon ne larrête pas.
\end{example}
\begin{exercice}
Modifiez votre programme python pour que lutilisateur puisse faire plusieurs propositions.
\end{exercice}
% On espère que les élèves arriveront là au moins
% ---
\section{Version avec tout juste ce quil faut dessais}
On a maintenant un problème, le programme précédent ne sarrête pas, même lorsque le nombre a été deviné !
La boucle infinie, est réellement infinie…\\
Il existe cependant un moyen de la stopper. Il suffit dajouter linstruction « break » dans le programme.
Lorsque python exécute linstruction « break », il arrête immédiatement la boucle !
\begin{exercice}
Placez linstruction « break » dans votre programme pour quil sarrête en cas de victoire du joueur.\\
Testez plusieurs fois votre programme.
\end{exercice}
% ---
\section{Afficher le nombre dessais}
\begin{example}
En python, on peut utiliser un compteur. Cest une variable qui contient un entier.\\
On linitialise à 0, cest à dire quon lui donne cette valeur au début du programme, puis on augmente sa valeur de 1 dès que lon veut compter.
\begin{minted}{python}
compteur = 0
print(compteur) # <- affiche 0
compteur = compteur + 1
print(compteur) # <- affiche 1
\end{minted}
\end{example}
\begin{exercice}
Modifiez votre programme pour quil affiche le nombre de tentatives faites par le joueur pour deviner le nombre secret.
\end{exercice}
% ---
\section{Proposer de rejouer}
\begin{exercice}
Modifiez votre programme pour quil propose de rejouer à la fin de la partie.
\end{exercice}
% ---
\section{Nombre dessai maximal}
\begin{exercice}
Modifiez votre programme pour quil fixe un nombre dessai maximal au joueur et quil termine la partie lorsque celui-ci est atteint.\\
Il peut être agréable pour le joueur que le nombre dessais restants soit affiché à chaque tour.
\end{exercice}
% ---
\section{Difficulté réglable}
\begin{exercice}
Modifiez votre programme pour quil permette au joueur de changer la valeur maximale du nombre secret et le nombre dessais possibles.
\end{exercice}
\end{document}

View File

@ -0,0 +1,35 @@
from turtle import *
from random import random
# Lidée est ici de faire une fonction que les élève pourraient comprendre
def carre(longueur, angle=0):
"""Cette fonction trace un carré de centre 0,0 de longueure et dinclinaison variables"""
up() # Ces 3 lignes placent la tortue au centre du dessin
goto(0,0)
setheading(angle)
forward(longueur/2) # Ces 3 lignes placent la tortue dans un angle de notre futur carré
left(90)
forward(longueur/2)
down()
for i in range(4): # Ces 3 lignes tracent un carré
left(90)
forward(longueur)
def partie1():
nombre_fleurs = 10
for f in range(nombre_fleurs):
for i in range(10):
carre(100 + 50*f, i*10)
def partie2():
while True:
for i in range(50):
pencolor(random(), random(), random())
carre(50 + i*10, i*10)
for i in range(50,0,-1):
pencolor(random(), random(), random())
carre(50 + i*10, i*10)
speed(0)
hideturtle()
partie2()