RETROGICIEL
LA BONNE SAISON
RETROGICIEL
LA BONNE SAISON
⇩. Présentation
Bien que météorologiquement parlant les seules saisons sont l'été et l'hiver, nous avons l'habitude de diviser l'année en 4 saisons :
- le printemps du 21 mars au 20 juin ;
- l'été du 21 juin au 20 septembre ;
- l'automne du 21 septembre au 20 décembre et ;
- l'hiver du 21 décembre au 20 mars.
Bien sûr, ces dates valent pour l'hémisphère nord, et elles peuvent varier d'un jour ou deux selon les années, en particulier les années bissextiles.
⇩. Consignes
Le programme doit :
demander à l'utilisateur le numéro du mois (ex. 7 pour juillet) ;
trouver la durée en jours de ce mois ;
demander à l'utilisateur le numéro du jour ;
calculer la saison correspondante à la date, jour et mois, saisie ;
afficher la date demandée en utilisant le nom du mois ;
afficher la saison qui correspond à cette date ;
demander à l'utilisateur s'il souhaite saisir une autre date.
D'abord, faite-le fonctionner. Ensuite, faite-le beau. Enfin, faite-le performant.
Amusez-vous bien !
Télécharger RETROGICIEL - La bonne saison.
Cette présentation nécessite que Python 3 soit installé sur votre machine.
Après avoir téléchargé le fichier La bonne saison.7z, décompressez-le dans le répertoire de votre choix.
Ouvrez le répertoire qui vient d'être créé.
Lancez le fichier Retrogiciel.py.
Cliquez sur l'onglet RUN et testez le programme.
Créez votre propre script dans un des langages proposés ou un autre de votre choix.
Le répertoire contient aussi :
- Python.py, l'exemple en PYTHON sans tkinter ;
- Tkinter.py, l'exemple en PYTHON avec tkinter ;
- Qb84.bas, l'exemple en QBASIC avec qb64 ;
- Bbc.bas, l'exemple en BBC BASIC avec bbc sdl.
# --- Origine Nerd ---
# --- RETROGICIEL - PYTHON ---
# --- La bonne saison ---
# -*- coding: utf-8 -*-
# --- INITIALISATION GENERALE ---
LST_Mois = [ ( False , False ) ,
( "Janvier" , 31 ) , ( "Février" , 28 ) , ( "Mars" ,31 ) ,
( "Avril" , 30 ) , ( "Mai" , 31 ) , ( "Juin" , 30 ) ,
( "Juillet" , 31 ) , ( "Août" , 31 ) , ( "Septembre" , 30 ) ,
( "Octobre" , 31 ) , ( "Novembre" , 30 ) , ( "Décembre" , 31 ) ]
# --- PRESENTATION ---
print ( "LA BONNE SAISON." )
print ( "Ce petit programme se propose de vous dire" )
print ( "en quelle saison se trouve une date (jour et mois)." )
# --- BOUCLE PRINCIPALE ---
while True :
# --- Controle de la validité des saisies ---
try :
kvalide = True
# --- Saisie du mois ---
kmois = int ( input ( "\nEntrez le nombre (1 à 12) correspondnt au mois... " ) )
if kmois < 1 or kmois > 12 : kmois = 13
knom = LST_Mois [ kmois ] [ 0 ]
kduree = LST_Mois [ kmois ] [ 1 ]
# --- Saisie du jour ---
kjour = int ( input ( f"\nEntrez le nombre (1 à { kduree }) correspondnt au jour... " ) )
if kjour < 1 or kjour > kduree : kjour = 1 / 0
except :
print( "\nERREUR DE SAISIES.\n")
kvalide = False
# --- Recheche et affichage de la saison correspondante à la date ---
if kvalide :
match kmois :
case 3 if kjour > 20 : ksaison = "au printemps"
case 4 | 5 : ksaison = "au printemps"
case 6 if kjour < 21 : ksaison = "au printemps"
case 6 | 7 | 8 : ksaison = "en été"
case 9 if kjour < 21 : ksaison = "en été"
case 9 | 10 | 11 : ksaison = "en automne"
case 12 if kjour < 21 : ksaison = "en automne"
case _ : ksaison = "en hiver"
print ( f"Le { kjour } { knom } se trouve { ksaison }." )
# --- Choix du bouclage du programme ---
kchoix = input ( "Voulez-vous faire une autre date (O ou N) ?" )
if kchoix.upper ( ) == "N" : break
# --- FIN DU PROGRAMME ---
print ( "Au revoir" )
# --- Programme : JFB ---
# --- Juin 2024 ---
# --- Fin ---
Pour mieux comprendre l'exemple en PYTHON sans tkinter.
# --- Origine Nerd ---
# --- RETROGICIEL - TKINTER ---
# --- La bonne saison ---
# -*- coding: utf-8 -*-
# --- IMPORTATION DES MODULES ---
# --- Modules de la bibliothèque standard ---
import tkinter
# --- INITIALISATION GÉNÉRALE ---
LST_Mois = [ ( False , False ) ,
( "Janvier" , 31 ) , ( "Février" , 28 ) , ( "Mars" ,31 ) ,
( "Avril" , 30 ) , ( "Mai" , 31 ) , ( "Juin" , 30 ) ,
( "Juillet" , 31 ) , ( "Août" , 31 ) , ( "Septembre" , 30 ) ,
( "Octobre" , 31 ) , ( "Novembre" , 30 ) , ( "Décembre" , 31 ) ]
# --- DÉFINITION DES FONCTIONS PERSONNALISEES ---
# --- Modification du Mois ---
def FNC_Mois ( event ) :
SCA_Jour [ "to" ] = LST_Mois [ int ( SCA_Mois.get ( ) ) ] [ 1 ]
FNC_Saison ( None )
# --- Recherche et affichage la saison corespondante à la date ---
def FNC_Saison ( event ) :
kmois = int ( SCA_Mois.get ( ) )
kjour = int ( SCA_Jour.get ( ) )
knom = LST_Mois [ kmois ] [ 0 ]
match kmois :
case 3 if kjour > 20 : ksaison = "au printemps"
case 4 | 5 : ksaison = "au printemps"
case 6 if kjour < 21 : ksaison = "au printemps"
case 6 | 7 | 8 : ksaison = "en été"
case 9 if kjour < 21 : ksaison = "en été"
case 9 | 10 | 11 : ksaison = "en automne"
case 12 if kjour < 21 : ksaison = "en automne"
case _ : ksaison = "en hiver"
LAB_Saison [ "text" ] = f"Le { kjour } { knom } se trouve { ksaison }."
# --- CREATION DE L'INTERFACE GRAPHIQUE ---
# --- Création de la fenêtre principale ---
TKI_Principal = tkinter.Tk ( )
TKI_Principal.title ( "RETROGICIEL - La bonne saison" )
# --- Création des controles nommées ---
SCA_Mois = tkinter.Scale ( TKI_Principal , orient = "horizontal" , label = " Mois " , from_ = 1 , to = 12 , length = 150 , command = FNC_Mois )
SCA_Jour = tkinter.Scale ( TKI_Principal , orient = "horizontal" , label = " Jour " , from_ = 1 , to = 31 , length = 150 , command = FNC_Saison )
LAB_Saison = tkinter.Label ( TKI_Principal , font = ( None , 14 ) )
# --- Mise en place des controles (anonymes et nommés) dans la fenêtre principale ---
tkinter.Label ( TKI_Principal , text = "LA BONNE SAISON." ).grid ( row = 0 , column = 0 , columnspan = 3 , sticky = "nesw" )
SCA_Jour.grid ( row = 1 , column = 0 , sticky = "nesw" )
SCA_Mois.grid ( row = 1 , column = 1 , sticky = "nesw" )
tkinter.Button ( TKI_Principal , text = "Quitter" , command = TKI_Principal.destroy ).grid ( row = 1 , column = 2 , sticky = "nesw" )
LAB_Saison.grid ( row = 2 , column = 0 , columnspan = 3 , sticky = "nesw" )
# --- Mise à jour de controle ---
FNC_Saison ( None )
# --- DEBUT DU PROGRAMME ---
TKI_Principal.mainloop ( )
# --- Programme : JFB ---
# --- Juin 2024 ---
# --- Fin ---
Pour mieux comprendre l'exemple en PYTHON avec tkinter.
' --- Origine Nerd propose pour ---
' --- RETROGICIEL - QB64 ---
' --- La bonne saison ---
' --- INITIALISATION GENERALE ---
' --- Declaration des variables globales ---
DIM TBL_Noms(12) AS STRING
DIM TBL_Durees(12) AS INTEGER
' --- Acquisition des valeurs des données ---
FOR i = 1 TO 12
READ knom$, kduree
TBL_Noms(i) = knom$
TBL_Durees(i) = kduree
NEXT
' --- DEBUT DU PROGRAMME ---
PRINT "LA BONNE SAISON."
' --- BOUCLE PRINCIPALE ---
DO
' --- Saisie du mois ---
INPUT "Entrez le numero du mois (1 a 12) "; kmois
IF kmois < 1 OR kmois > 12 THEN
PRINT "ERREUR DE SAISIE !"
GOTO LBL_Sortie
END IF
' --- Saisie du jour ---
kduree = TBL_Durees(kmois)
PRINT "Entrez le jour (1 a"; kduree; ") ";
INPUT kjour
IF kjour < 1 OR kjour > kduree THEN
PRINT "ERREUR DE SAISIE !"
GOTO LBL_Sortie
END IF
' --- Recherche et affichage de la saison ---
SELECT CASE kmois
CASE 1, 2
ksaison$ = "en hiver."
CASE 3
IF kjour < 21 THEN ksaison$ = "en hiver." ELSE ksaison$ = "au printemps."
CASE 4, 5
ksaison$ = "au printemps."
CASE 6
IF kjour < 21 THEN ksaison$ = "au printemps." ELSE ksaison$ = "en ete."
CASE 7, 8
ksaison$ = "en ete."
CASE 9
IF kjour < 21 THEN ksaison$ = "en ete." ELSE ksaison$ = "en automne."
CASE 10, 11
ksaison$ = "en automne."
CASE 12
IF kjour < 21 THEN ksaison$ = "en automne." ELSE ksaison$ = "en hiver."
END SELECT
PRINT "Le"; kjour; TBL_Noms(kmois); " est "; ksaison$
' --- Bouclage du programme ---
LBL_Sortie:
PRINT ""
INPUT "Voulez-vous recommencer [ O ou N ] "; kchoix$
LOOP UNTIL UCASE$(kchoix$) = "N"
' --- FIN DU PROGRAMME ---
PRINT "Au revoir."
END
' --- VALEURS DES DONNEES ---
DATA Janvier,31,Fevrier,28,Mars,31,Avril,30
DATA Mai,31,Juin,30,Juillet,31,Aout,31
DATA Septembre,30,Octobre,31,Novembre,30,Decembre,31
' --- Programme : JFB ---
' --- Juin 2024 ---
' --- Fin ---
Pour mieux comprendre l'exemple en QB64.
REM --- Origine Nerd propose pour ---
REM --- RETROGICIEL - BBC BASIC ---
REM --- La bonne saison ---
REM --- LISTE DES VALEURS DES DONNEES ---
REM --- Noms des mois avec leur durée ---
DATA Janvier,31,Fevrier,28,Mars,31,Avril,30
DATA Mai,31,Juin,30,Juillet,31,Aout,31
DATA Septembre,30,Octobre,31,Novembre,30,Decembre,31
REM --- INITIALISATION GENERALE ---
REM --- Déclarations des variables globales ---
DIM LST_Noms$(12)
DIM LST_Durees(12)
REM --- Initialisation des valeurs des tableaux de données ---
FOR i = 1 TO 12
READ knom$, kduree
LST_Noms$(i) = knom$
LST_Durees(i) = kduree
NEXT
REM --- DEBUT DU PROGRAMME ---
PRINT "LA BONNE SAISON."
REM --- BOUCLE PRINCIPALE ---
REPEAT
REM --- Saisie du mois ---
kvalide = TRUE
INPUT "Entrez le numero du mois (1 a 12) "; kmois
IF kmois < 1 OR kmois > 12 THEN kvalide = FALSE
REM --- Saisie du jour ---
IF kvalide THEN
PRINT "Entrez le jour (1 a "; LST_Durees(kmois); ") ";
INPUT kjour
IF kjour < 1 OR kjour > LST_Durees(kmois) THEN kvalide = FALSE
ENDIF
REM --- Recherche de la saison correspondante ---
IF kvalide THEN PROC_Saison(kmois , kjour) ELSE PRINT "Erreur de saisie ..."
REM --- Bouclage du programme ---
INPUT "Voulez-vous recommencer [ O ou N ] "; kchoix$
UNTIL kchoix$ = "N" OR kchoix$ = "n"
REM --- FIN DU PROGRAMME ---
PRINT "Au revoir."
END
REM --- DEFINITION DES FONCTIONS PERSONNALISEES ---
REM --- Recherche et affichage de la saison ---
DEF PROC_Saison( Qmois , Qjour )
CASE Qmois OF
WHEN 1,2
ksaison$ = "en hiver."
WHEN 3
IF Qjour < 21 THEN ksaison$ = "en hiver." ELSE ksaison$ = "au printemps."
WHEN 4,5
ksaison$ = "au printemps."
WHEN 6
IF Qjour < 21 THEN ksaison$ = "au printemps." ELSE ksaison$ = "en ete."
WHEN 7,8
ksaison$ = "en ete."
WHEN 9
IF Qjour < 21 THEN ksaison$ = "en ete." ELSE ksaison$ = "en automne."
WHEN 10,11
ksaison$ = "en automne."
WHEN 12
IF Qjour < 21 THEN ksaison$ = "en automne." ELSE ksaison$ = "en hiver."
ENDCASE
PRINT "Le "; Qjour; " " ; LST_Noms$(Qmois) ; " est "; ksaison$
ENDPROC
REM --- Programme : JFB ---
REM --- Juin 2024 ---
REM --- Fin ---
Pour mieux comprendre l'exemple en BBC BASIC.