big update

This commit is contained in:
Adrian Amaglio 2022-10-25 14:41:44 +02:00
parent ee880ee31b
commit 8d66eb7689
27 changed files with 184 additions and 169 deletions

13
nsi_python/test/main.py Normal file
View File

@ -0,0 +1,13 @@
def pair(n):
if n % 2 == 0:
return True
else:
return False
def tests():
assert pair(0) == True
assert pair(-1) == False
assert pair(2) == True
print('Tous les tests ont été fait')
tests()

View File

@ -0,0 +1,122 @@
\documentclass[11pt,a4paper]{../../template/template_cours}
\usepackage{minted}
\title{TP noté sur Python}
\author{Adrian Amaglio}
\def\thelevel{NSI}
\def\thesequence{Programmation}
\begin{document}
Durée : 1h
% ---
\section{Dessiner des pyramides}
Lobjectif de cette partie est de concevoir un programme python capable dafficher des pyramides de texte. Voici par exemple une pyramide détoiles de 4 étages :
\begin{verbatim}
*
* *
* * *
* * * *
\end{verbatim}
Nous allons pour cela créer une fonction affichant une ligne de longueur donnée et dun symbole donné puis une fonction, utilisant la précédente, capable dafficher une pyramide de hauteur donnée.
Cette partie sera à faire dans un fichier nommé \textit{pyramide.py}.
\begin{exercice}
Créer une fonction appelée \textit{ligne}, prenant en paramètre un symbole (type texte ou \textit{str} en python) et une taille de ligne.\\
Cette fonction affichera le symbole autant de fois que demandé dans le paramètre taille.\\
\textit{Aide :} Pour afficher du texte sans retour à la ligne on ajoute un paramètre \textit{end} à print :\\
\begin{minted}{python}
print('Bonsoir !', end='')
\end{minted}
Tester la fonction ligne avec plusieurs valeurs pour vérifier son bon fonctionnement. Voici des exemples de test :
\begin{minted}{python}
ligne('*', 10)
ligne('.', 1)
ligne('o', 5)
\end{minted}
\end{exercice}
\begin{exercice}
Créer une fonction \textit{pyramide}, qui prend en paramètre une hauteur et un symbole et qui dessine la pyramide correspondante en utilisant la fonction \textit{ligne}.
\end{exercice}
\begin{exercice}
Dessinez trois pyramides avec des symboles et des hauteurs différentes.
\end{exercice}
% ---
\section{Jeu de morpion}
Lobjectif de cette partie est de concevoir un jeu de morpion (ou tic-tac-toe).
Cette partie sera à faire dans un fichier nommé \textit{morpion.py}.\\
Le plateau de jeu sera représenté par une liste contenant trois liste (une pour chaque ligne du plateau).
Chaque ligne sera représentée par une liste de trois textes (str) qui peuvent avoir trois valeurs distinctes :
\begin{description}
\item[' '] Si la case est vide
\item['x'] Si la case contient une croix
\item['o'] Si la case contient un rond
\end{description}
\begin{exercice}
En haut de votre fichier \textit{morpion.py}, collez la ligne de python suivante :
\begin{minted}{python}
plateau = [ [' ', ' ', ' '], [' ', ' ', ' '], [' ', ' ', ' '] ]
\end{minted}
Vérifiez que votre fichier sexécute bien et naffiche rien.
\end{exercice}
\begin{exercice}
Créer une fonction nommée \textit{afficher} qui affiche en texte le plateau de jeu. Elle prendra le plateau de jeu en paramètre.\\
\end{exercice}
\begin{exercice}
Créer une fonction nommée \textit{jouer} qui prend quatre paramètres :
\begin{itemize}
\item Le plateau de jeu
\item Le symbole à jouer (x ou o)
\item La ligne où on souhaite jouer
\item La colonne où on souhaite jouer
\end{itemize}
Cette fonction modifiera le plateau pour mettre le symbole à lemplacement voulu.
Aucune vérification nest faite à cette étape du programme, les coups de triche sont possibles.
\end{exercice}
\begin{exercice}
Testez vos deux fonctions précédentes en les appelant avec des valeurs choisies.
Voici un exemple de test à modifier et enrichir :
\begin{minted}{python}
afficher(plateau)
jouer(plateau, 'x', 0, 0)
afficher(plateau)
\end{minted}
\end{exercice}
\begin{exercice}
Modifier la fonction \textit{jouer} pour quelle vérifie de le coup demandé est valide.
La fonction doit maintenant retourner True si le coup a été joué et False si il est invalide.\\
Tester à nouveau la fonction.
\end{exercice}
\begin{exercice}
Créer une fonction \textit{partie} qui prend le plateau en paramètre et qui déroule une partie. Voici le principe de base.
\begin{itemize}
\item Demander au premier joueur où il souhaite jouer
\item Appeler la fonction jouer avec les paramètres correspondants
\item Demander au second joueur où il souhaite jouer
\item Appeler la fonction jouer avec les paramètres correspondants
\end{itemize}
Vérifiez que votre fonction :
\begin{itemize}
\item Gère correctement les cas où le coup est invalide
\item Utilise bien le symbole 'x' pour un joueur et 'o' pour lautre
\end{itemize}
\end{exercice}
\begin{exercice}
Créer une fonction \textit{victoire} qui prend le plateau en paramètre et retourne le symbole 'x' si trois x sont alignés, 'o' si trois o sont alignés ou ' ' si aucun joueur na gagné.
Utilisez cette fonction dans votre fonction \textit{partie}
\end{exercice}
\end{document}

View File

@ -0,0 +1,33 @@
# Exercice 1
# Modifiez la boucle présente à la fin du fichier pour quelle remplisse le dictionnaire frequences.
# Pour ce faire, il faut ajouter 1 à la valeur corresponant à une lettre dès quon la rencontre lors du parcours du texte
# Certaines valeurs vont poser problème à notre dictionnaire, tester bien que seules les lettres sont utilisées comme clé.
# Exercice 2
# Affichez les valeurs des lettres eiatsr divisées par le nombre total de lettres dans le texte. Vous obtenez un ratio qui sera grand pour les lettres très utilisées.
# Comparez ce ratio avec celui que lon attribue souvent au français (recherez le sur internet).
# Texte issu de wikipédia
# https://fr.wikipedia.org/wiki/Journée_du_souvenir_trans
texte = """
la journée du souvenir trans, déclinaison française du transgender day of remembrance (tdor), a lieu le 20 novembre dans le monde entier, pour commémorer les personnes trans assassinées pour motif transphobe, cest-à-dire la haine des personnes trans, et pour attirer l'attention sur les violences subies par les communautés trans4.
la journée du souvenir trans a plusieurs objectifs :
commémorer toutes les personnes ayant été victimes de crimes haineux et de préjugés,
sensibiliser sur les crimes haineux envers la communauté trans,
rendre hommage aux personnes décédées et à leurs proches.
si cette journée marque la solidarité de la communauté lgbt à légard des victimes et témoigne de son indignation, elle veut aussi rappeler que la transphobie nest pas reconnue comme discrimination ou circonstance aggravante pour les crimes par létat.
il en résulte quaucune statistique officielle nest disponible. en 2011, 221 cas de personnes trans assassinées furent comptabilisés par les associations trans.
ce nombre ne représente pas la réalité puisque le comptage est effectué localement par un nombre réduit dorganisations et dans peu de pays. de plus, la plupart des crimes restent ignorés puisque le caractère transphobe nest pas retenu par les autorités.
"""
# Ce dictionnaire contiendra en clé les lettres de lalphabet, en valeur le nombre de fois quelles sont apparues dans le texte.
frequences = {'a':0, 'b':0, 'c':0, 'd':0, 'e':0, 'f':0, 'g':0, 'h':0, 'i':0, 'j':0, 'k':0, 'l':0, 'm':0, 'n':0, 'o':0, 'p':0, 'q':0, 'r':0, 's':0, 't':0, 'u':0, 'v':0, 'w':0, 'x':0, 'y':0, 'z':0}
# Cette boucle permet de parcourir le texte, lettre par lettre. À chaque tour de boucle la variable lettre contiendra toutes les lettres du texte, une à une, dans lordre.
for lettre in texte:
# On affiche le texte lettre par lettre.
print(lettre, end='')
print(frequences)

View File

@ -0,0 +1,16 @@
# Voici un dictionnaire dont la clé est un nom, la valeur une liste de notes
notes = {'John' : [10, 8, 14], 'Amaglio': [2, 8, 0.5], 'Aya': [18, 20, 25]}
# Exercice 1
# Affichez le nom et les notes de chaque personne répertoriée dans le dictionnaire notes.
# Exercice 2
# Pour chaque personne, calculez sa moyenne. Vous la stockerez dans un nouveau dictionnaire que vous appellerez moyenne.
# Affichez ensuite les noms et moyennes de chaque personne.
# Exercice 3
# Créez un dictionnaire nommé classes dans lequel les clés seront des noms de classe (par exemple seconde18) et les valeurs seront les noms des personnes de cette classe.
# Vous pourrez attribuer les personnes du dictionnaire à des classes, il faut au moins une classe qui ait plusieurs personnes.
# Exercice 4
# Créez un dictionnaire nommé moyennes dans lequel les clés seront les noms de classe et les valeurs seront les moyennes de cette classe

Binary file not shown.

Before

Width:  |  Height:  |  Size: 46 KiB

View File

@ -1,92 +0,0 @@
import time
# --------------------------------------------------------------------------------
# Gestion des pages web
# --------------------------------------------------------------------------------
import bottle, threading
def nouvelle_temp_cible (temperature):
""" Cette fonction sauvegarde la température cible """
with open('cible.txt', 'w', coding="utf8") as f:
f.write(température)
def temp_format_html ():
""" Cette fonction retourne un texte HTML contenant les mesures de températures"""
return 'Non implémenté'
@bottle.get('/')
def get_temp():
return temp_format_html()
threading.Thread(target=bottle.run, kwargs=dict(host='', port=8080)).start()
# --------------------------------------------------------------------------------
# Gestion du capteur de température
# --------------------------------------------------------------------------------
import os
import glob
# On trouve où sont les valeurs du capteurs
dossier_base = '/sys/bus/w1/devices/'
dossier_capteur = glob.glob(dossier_base + '28*')[0]
fichier_capteur = dossier_capteur + '/w1_slave'
fichier_actionneur = 'TODO'
def lecture_temp_brute():
""" Cette fonction retourne la valeur du capteur sans traitement """
with open(fichier_capteur, 'r') as f:
lines = f.readlines()
return lines
def lecture_temp():
""" Cette fonction calcule la température à partir des mesures brutes """
lines = lecture_temp_brute()
while lines[0].strip()[-3:] != 'YES':
time.sleep(0.2)
lines = lecture_temp_brute()
equals_pos = lines[1].find('t=')
if equals_pos != -1:
temp_string = lines[1][equals_pos+2:]
temp_c = float(temp_string) / 1000.0
return temp_c
# --------------------------------------------------------------------------------
# Gestion du capteur de température
# --------------------------------------------------------------------------------
def chauffage_on ():
""" Cette fonction allume le chauffage de la cuve """
with open(fichier_actionneur, 'w') as f:
f.write('1')
def chauffage_off ():
""" Cette fonction éteint le chauffage de la cuve """
with open(fichier_actionneur, 'w') as f:
f.write('0')
# --------------------------------------------------------------------------------
# Fonctions daide
# --------------------------------------------------------------------------------
def ajout_ligne_fichier(nom_fichier, ligne):
""" Cette fonction ajoute le texte dans la variable ligne à la fin du fichier « nom_fichier » """
with open(nom_fichier, 'a', encoding="utf8") as f:
f.write(ligne)
def temp_cible():
""" Cette fonction retourne la température cible qui doit être maintenue pendant la fermentation """
with open("cible.txt", 'r', coding="utf8") as f:
return f.read().strip()
# --------------------------------------------------------------------------------
# Programme principal
# --------------------------------------------------------------------------------
while True:
print(lecture_temp())
time.sleep(1)

Binary file not shown.

View File

@ -1,77 +0,0 @@
\documentclass[11pt,a4paper]{../../template/template_cours}
\usepackage{listings}
\usepackage{minted}
\title{Projet pluridisciplinaire — Le brassage de la bière}
\author{Adrian Amaglio}
\def\thesequence{Données structurées, web}
\begin{document}
Ceci est une trame à suivre, les détails techniques ne sont pas réglés.
Durée : 3h
%
% https://pimylifeup.com/raspberry-pi-temperature-sensor/
\section{Microcontrolleur programmable}
Nous travaillerons sur un raspberry pi pour récupérer les valeurs des capteurs.
\subsection{Mesure de la température}
% En vrai on peut aussi mesurer la pression et le pH
Durée : 1h
\begin{exercice}
Connectez le capteur de température et la résistance au raspberry pi comme sur le shéma suivant :
\includegraphics[width=\textwidth]{circuit.png}
\end{exercice}
\begin{exercice}
Récupérez le fichier python à cette adresse : \url{https://git.jean-cloud.net/adrian/cours-snt/raw/branch/master/projets/projet_biere/main.py}
\\
et exécutez-le sur votre raspberry pi.
Vérifiez quil affiche bien la valeur de la température chaque seconde
\end{exercice}
\begin{exercice}
Modifiez le programme principal pour quil écrive dans un fichier CSV, la date, lheure actuelle et la température mesurée.
Votre fichier CSV devra ressembler à cela :
\begin{verbatim}
date;heure;temperature
11/02/2021;15:14:10;22
11/02/2021;15:15:10;21
11/02/2021;15:16:10;21
11/02/2021;15:17:10;20
11/02/2021;15:18:10;20
\end{verbatim}
Vous pourrez vous aider de la fonction « ajout\_ligne\_fichier » disponible dans le fichier python que vous avez téléchargé.
\end{exercice}
\subsection{Régulation du chauffage}
Durée 1h
\begin{exercice}
Le chauffage de la cuve de fermentation nest pas réglable, le chauffage est donc mis à fond pour faire monter la température, puis eteint lorquelle est acceptable.
\\
La fonction « temp\_cible » retourne la valeur de la température idéale pour la fermentation.
\\
Dans votre programme principal, activez le chauffage si nécessaire (en fonction de la température relevée) pour que la température soit optimale dans la cuve.
\\
Vous vous aidere des fonctions « chauffage\_on » et « chauffage\_off » fournies.
\end{exercice}
\subsection{Affichage des mesures sur une page web}
Durée 1h
\begin{exercice}
Exécutez votre programme python puis rendez-vous à ladresse \url{http://localhost:8080}. Vous devriez voir le message « Non implémenté ».
\\
Pour que cette page web affiche la liste des températures mesurées, modifiez la fonction « temp\_format\_html » pour quelle génère un code HTML qui met en forme les mesures dans un tableau.
\end{exercice}
\begin{exercice}
Bonus : Ajoutez une page « /reglage » qui affiche un formulaire pour que lutilisateur puisse renseigner une température à maintenir.
\\
Faites en sorte que lorsque lutilisateur valide le formulaire, la valeur quil a entré soit passée à la fonction « nouvelle\_temp\_cible ».
\end{exercice}
\end{document}

Binary file not shown.

After

Width:  |  Height:  |  Size: 233 KiB