Notre professeur nous a donné un exercice un peu particulier puisque nous devons créer une sorte de mini école directe ou pronote ou quelque chose de similaire... Je ne sais pas si vous voyez ce que c'est mais nous avons ça dans la majorité des collèges et lycées. Normalement, ces sites calculent toutes nos moyennes dans chaque matières, nous permettent de communiquer avec nos professeurs, marquent nos absences, etc ...
Enfin bref, dans le nôtre, pour une matière, on doit pouvoir :
- saisir les notes au début
- ajouter une note choisie
- supprimer une note choisie
- modifier une note au rang choisi
- faire la moyenne de l'ensemble des notes
- trier les notes dans l'ordre croissant
- trier les notes dans l'ordre décroissant
J'ai déjà bien avancé le programme en créant tous ces petis sous programmes (et ils fonctionnent !!) et l'ensemble des notes sont gérées au sein d'une liste.
Cependant, il faut maintenant que j'arrive a créer une sorte de boîte de dialogue avec celui qui l'utilise (dans la situation : le professeur d'une matière). Il doit pouvoir saisir les notes au début puis de "façon infinie" pouvoir modifier, supprimer, etc ... ainsi le programme ne doit jamais s'arrêter, comme s'il était permanent.
J'ai essayé de faire une sorte de boucle infinie avec un "while" avec comme condition 1==1, et l'appel d'un sous-programme avec "import".
Le seul problème c'est que je n'arrive par à coordonner la réponse de l'utilisateur avec le lancement d'un de mes sous-programmes.
J'espère que ce que j'ai écrit n'est pas trop confu et que c'est relativement compréhensible.
Si vous pouviez m'aider dans mes recherches ça serai super.
Pas grand chose .. j'ai commencé il y a un mois avec la spé ISN en Terminal S.
Je me suis renseignée sur ces framework et plus particulièrement Tkinter. Si j'ai bien compris ce sont des interfaces graphiques et notre professeur nous a dit que l'on les étudirait plus tard dans l'année et que l'on pourrait faire sans ...
Est-il vraiment possible de réaliser mon exercice sans ?
Si ton professeur ne veut pas que t'utilises d'interface graphique, le seul choix qu'il te reste c'est en ligne de commandes.
Tu peux utiliser input() pour rentrer ce que tu tapes au clavier dans le programme. Tu pourrais imaginer un menu du genre "Voulez vous 1) ajouter une note ? 2) Modifier une note ? ...", et suivant que l'utilisateur tape 1, 2 ou 3 tu rentres dans l'une ou l'autre de tes fonctions
J'ai fini mon programme mais il me reste un problème ....
La boucle tant que se répette sans exécuter les sous-programme. Où est mon erreur ?
Merci d'avance.
def ajouter ():
""" Permet l'ajout d'une note dans votre liste."""
new=input("Saisir une nouvelle note : ")
new=int(new)
list_note.append(new)
print(list_note)
print("Votre note a bien été ajoutée")
def supprimer () :
""" Permet de supprimer une note de votre liste. """
supp=input("Saisir la note que vous souhaitez supprimer : ")
supp=int(supp)
elementSupprime = list_note.pop(supp)
print("La note a bien été suprimée")
print(list_note)
def modifier () :
""" Permet la modification d'une note choisie de votre liste."""
print(list_note)
#on affiche la liste pour l'utilisateur
rang=input("Saisir le rang de la note que vous voulez modifier sachant que la 1er note est de rang 0 : ")
rang=int(rang)
#choix du rang
new_note=input("Saisir la nouvelle note : ")
new_note=int(new_note)
list_note[rang]=new_note
#choix de la nouvelle note
print("Voici les notes après modification : ",list_note)
def moyenne () :
""" Permet de calculer la moyenne de votre liste de note."""
import statistics
# utilistaion de statistics.mean(liste)
from statistics import mean
# utilisation de mean(liste)
moyenne=mean(list_note)
print("La moyenne des notes est de ",moyenne)
def tri_croissant () :
""" Permet de ranger vos notes dans l'ordre croissant."""
list_note.sort()
print(list_note)
print("Les notes sont maintenant rangées par ordre croissant")
def tri_décroissant () :
"""Permet de ranger dans l'ordre décroissant les notes de votre liste"""
list_note.sort(reverse=True)
print(list_note)
print("Les notes sont maintenant rangées par ordre décroissant")
list_note=list()
print ("Bonjour et bienvenue sur le répertoire de note scolaire.")
list_note=input("Veuillez saisir la liste de note initiale : ")
while (1==1):
ask=input("Que voulez vous faire ? \n Ajouter une note (1) \n Supprimer une note (2) \n Modifier une note (3) \n Calculer la moyenne (4) \n Trier les notes (5) \n Entrer votre choix (numéro) : ")
ask=int(ask)
if (ask!=1) and (ask!=2) and (ask!=3) and (ask!=4) and (ask!=5):
{
}
if (ask==1):
import ajouter
if (ask==2):
import supprimer
if (ask==3):
import modifier
if (ask==4):
import moyenne
if (ask==5):
ask_bis=input("Dans quel ordre voulez-vous trier les notes ? \n Ordre croissant (1) \n Ordre décroissant (2)")
ask_bis=int(ask_bis)
if (ask_bis!=1) and (ask_bis!=2):
{
}
if (ask_bis==1):
import tri_croissant
if (ask_bis==2):
import tri_décroissant
Tu as fais un résumé de toutes les mauvaises pratiques en python ? Des fois je me demande si vous vous prenez la peine de lire un tutoriel...
Une boucle infinie, pour info, se termine à la condition où elle rencontre le mot clé break.
Ton code ressemble un peu à ce qu'on appelle la théorie de la fenêtre brisée. Plus tu fais de fautes techniques, plus le nombre d'erreurs s'intensifient et plus il est difficile de debugger.
Pour éviter ça, on répare bug après bug, tronçon par tronçon afin d'éviter ce genre de catastrophe. Mais trop tard, tu l'as fais, reste plus qu'à tout recommencer !
C'est vrai queje ne lis pas tous les tutoriels car je suis à la base des cours à mon lycée donc logiquement mon professeur est cencé me donner toutes les informations et lorsque l'on a aborder le boucles tant que, il n'a jamais fait allusion au mot break ...
Par "C'est beau ces accolades !" vous sous-entendez quoi ?
Excusez-moi mais je demandais juste un peu d'aide...
mon professeur est cencé me donner toutes les informations
Non ! Et je parle en connaissance de cause. Ce n'est surtout pas son rôle de faire le travail à votre place pour que vous ayez juste à copier des lignes de code les unes en dessous des autres. Son rôle est de vous guider dans le cas où l'investigation est présente, que l'élève a montré un investissement minimum et qu'il respecte un minimum ses consignes. Le but n'est pas le langage, mais apprendre à résoudre un problème de la façon la plus optimisée possible. Depuis quand déterminez vous le rôle d'un professeur ? Avez-vous lu le programme lié à sa discipline ?
MarieMaria a écrit:
lorsque l'on a aborder le boucles tant que, il n'a jamais fait allusion au mot break ...
Le mot break n'est pas un mot clé vu par votre professeur, car lors de cette étude, la boucle tant que était utilisé pour montrer une limite de répétition. Hors vous présentez une boucle infinie (sans limite) qui n'a pas été un terme abordé je suppose.
----------------------------------------
En ce qui concerne votre investigation je vous propose des suggestions,
Utiliser votre interpréteur python pour tester de petites lignes de code
Utiliser ce tutoriel en français et gratuit qui est une référence en python
Votre investissement dans le langage ne doit pas être trop important, ce qui importe c'est la manière dont vous allez résoudre votre problématique. La solution peut être écrite en version manuscrite, avec des si - sinon - tant que - pour i allant de ... à ..., etc. Puis pour terminer très basiquement traduire cette version en python... 99% du travail sera fait !
MarieMaria a écrit:
> Par "C'est beau ces accolades !" vous sous-entendez quoi ?
Que les blocs de code Python se délimitent par l'indentation et les : qui les précèdent, pas par des accolades.
Quand tu souhaites avoir un bloc d'instructions vide, utilise le mot-clé pass.
Au fait, tu confonds importations de modules et appels de fonctions.
@oldProgrammer t'y vas assez violemment quand même. C'est sensé être un forum d'entraide, pas un forum de "t'as intérêt à être indépendant sinon je vais t'écrire tout un pavé pour te décrire à quel point t'es mauvais". En l'occurence, il a juste à modifier quelques éléments de son programme et ça devrait fonctionner.. A moins que tu veuilles absolument le dégoûter de la programmation, auquel cas ton post est parfait.
while (1 == 1):
Tu peux remplacer ça par
while (True):
Effectivement, comme l'ont dit les autres, la condition est toujours vraie, donc ça fait une boucle infinie. Si tu ne veux pas de boucle infinie, tu peux faire un break
while (True):
# ...
if ( ... ): # si l'utilisateur veut sortir
break
Sinon tu peux aussi modifier ta condition de boucle avec un truc du genre
continuer = True
while(continuer):
# ...
if ( ... ): # si l'utilisateur veut sortir
continuer = False
Problème suivant
if (ask!=1) and (ask!=2) and (ask!=3) and (ask!=4) and (ask!=5):
{
}
Ce que tu fais, c'est que si la condition est remplie, alors tu demandes à Python de te construire un dictionnaire vide (les accolades c'est pour les dictionnaires).
Remplace { } par pass ; pass c'est l'instruction Python qui ne fait rien
if (ask==1):
import ajouter
Je ne sais pas ce que ça fait, mais ça ne fait sûrement pas ce que tu veux.
import est l'équivalent du #include en C (si t'en as déjà fait) ; ça va (plus ou moins) te copier coller le contenu de ajouter.py dans le if. Vu que ajouter.py n'existe pas, j'avoue que je ne sais pas vraiment ce que ça fait.
La vraie façon propre d'appeler des sous programmes (ou dirais-je plutôt, des fonctions), c'est comme ça :
if (ask==1):
ajouter()
Je te conseille de lire la partie sur les fonctions du tutoriel Python
- Edité par potterman28wxcv 13 novembre 2017 à 10:50:34
@oldProgrammer t'y vas assez violemment quand même
???
potterman28wxcv a écrit:
C'est sensé être un forum d'entraide
Pas d'assisté !
Et après tu te demandes pourquoi je trouve que t'y vas assez violemment. Je sais que c'est Internet, mais ça ne te choque pas de traiter un forummeur d'assisté ?
oldProgrammer a écrit:
potterman28wxcv a écrit:
"t'as intérêt à être indépendant sinon je vais t'écrire tout un pavé pour te décrire à quel point t'es mauvais"
Relis les règles du forum, un minimum de recherche est requis, google est utilisé pour cela...
Il y a une grosse différence entre indiquer de faire une recherche, et complètement détruire le travail qu'il a fait en disant à quel point c'est mauvais et qu'il faut tout recommencer de zéro.
oldProgrammer a écrit:
potterman28wxcv a écrit:
Si tu ne veux pas de boucle infinie, tu peux faire un break
Mal dit !
Je ne pense pas que ma phrase soit ambigüe.
oldProgrammer a écrit:
potterman28wxcv a écrit:
if (ask==1):
ajouter()
Je te conseille de lire la partie sur les fonctions du tutoriel Python
Mieux est
if ask:
# traitement
Je ne pense pas. ask n'est pas un booléen, c'est bien un entier dans son exemple. Si tu fais if ask: tu vas juste tester si ask est différent de 0 ou de None. A priori, il veut des branchements plus spécifiques que ça : if ask == 1, if ask == 2, if ask == 3, etc..
oldProgrammer a écrit:
Et finalement tu le renvois comme moi dans la lecture d'un tutoriel, ça va pas l'arranger toutes ces lectures
La différence c'est que je l'ai renvoyé à une section spécifique du tutoriel, et non au tutoriel en entier. Tout le monde n'a pas le temps de lire un tuto entier rien que pour faire un simple exo en Python.
Après, effectivement, il serait préférable qu'il le lise en entier. Mais pour son exo en particulier, et étant donné la simplicité de son problème, je ne pense pas qu'il soit obligé.
- Edité par potterman28wxcv 13 novembre 2017 à 16:56:00
Et après tu te demandes pourquoi je trouve que t'y vas assez violemment. Je sais que c'est Internet, mais ça ne te choque pas de traiter un forummeur d'assisté ?
Non, des choses bien plus graves mais tout aussi réalistes me choquent bien plus...
potterman28wxcv a écrit:
Il y a une grosse différence entre indiquer de faire une recherche, et complètement détruire le travail qu'il a fait en disant à quel point c'est mauvais et qu'il faut tout recommencer de zéro.
Je dis qu'il faut debugger tronçon par tronçon, sinon on ajoute des difficultés supplémentaires en ajoutant erreur par erreur, je ne vois pas ce qu'il y a à détruire un code qui ne prend en recommençant que très peu de temps. C'est mieux ainsi, ça prend moins de temps que le debuggage.
potterman28wxcv a écrit:
Je ne pense pas que ma phrase soit ambigüe.
Elle l'est, tu es tout simplement en train de dire que pour remplacer la boucle infinie, on utilise le mot clé break. Alors que le seul intérêt de break et d'interrompre une boucle.
potterman28wxcv a écrit:
Je ne pense pas. ask n'est pas un booléen, c'est bien un entier dans son exemple. Si tu fais if ask: tu vas juste tester si ask est différent de 0 ou de None. A priori, il veut des branchements plus spécifiques que ça : if ask == 1, if ask == 2, if ask == 3, etc..
Effectivement je n'avais pas lu son morceau de code, juste ta ligne...
--------------------------
Il faut lire le tutoriel en entier, en tout cas le début du tutoriel en entier, car se sont les bases qui y sont exprimées... Et c'est un besoin lié à son exercice dans sa totalité.
J'ai modifié et continué mon programme et il est presque fini
Par contre il n'y a pas besoin de toutes les parenthèses dans ton code. Comme l'a souligné entwanne, if et while sont des mots-clés et non des fonctions. Et ce n'est pas une question de style, c'est juste de comprendre ce qu'on fait :
if ask != 1 and ask != 2 and ask !=3 and ask !=4 and ask !=5:
...
if ask == 1:
...
while True:
...
Concernant ton code, toutes les notes entrées sont-elles forcément des entiers? Ne peut-il pas y avoir des valeurs décimales (ex: 13.5)? Car tu convertis toutes les valeurs en entier (avec int) alors qu'il faudrait utiliser float si les notes décimales sont acceptées?
Ensuite, je ne vois pas l'intérêt du bloc suivant:
if ask != 1 and ask != 2 and ask !=3 and ask !=4 and ask !=5:
pass
Puisque tu ne fais rien, autant ne pas le mettre.
Étant donné que ask ne peut avoir qu'une seule valeur (soit il vaut 1, soit il vaut 2, .... soit il vaut 5) on peut utiliser des conditions exclusives en remplaçant la série de if par des elif:
Par contre il n'y a pas besoin de toutes les parenthèses dans ton code. Comme l'a souligné entwanne, if et while sont des mots-clés et non des fonctions. Et ce n'est pas une question de style, c'est juste de comprendre ce qu'on fait :
Désolé d'être relou, mais si tu fais if (ask == 1): ça ne va pas appeler la fonction if, ça fait bien exactement la même chose que si tu faisais if ask == 1: .
Pour moi, c'est bien une question de style plus qu'une question de sémantique.
D'ailleurs PEP8 préconise l'usage des parenthèses dans le cas où la ligne doit être cassée en plusieurs lignes
if (abcdefghijklmnopqrstuvwxyz > some_other_long_identifier and
here_is_another_long_identifier != and_finally_another_long_name):
# ... your code here ...
pass
Dans le cas où la ligne est courte, en général je ne mets pas de parenthèse, mais ça ne me choque pas d'en voir
- Edité par potterman28wxcv 14 novembre 2017 à 11:41:08
mais si tu fais if (ask == 1): ça ne va pas appeler la fonction if
C'est sûr que ça ne va pas appeler la fonction if car if est un mot réservé et donc il est impossible de donner ce nom à une fonction / variable
Ma remarque était surtout là pour faire comprendre qu'en face on a un débutant, et qu'en tant que tel ils ne savent pas toujours ce qui est obligatoire ou pas, ce qui est juste ou non. Donc autant leur délivrer dès le départ les bonnes pratiques
potterman28wxcv a écrit:
mais ça ne me choque pas d'en voir
Moi ça me choque un peu étant donné que le code est truffé de ça (lignes 59, 63, 67, 70, 73, 76, 79, 82, 85, 87) donc là on est pas sur un style (les débutants non pas de style) mais plutôt sur une mauvaise interprétation. Et donc ça ne coûte rien de lui en faire la remarque . Surtout que ça alourdit inutilement le code.
Précepte: Le mieux est l'ennemi du bien
Un mini école direct, pronote, etc ...
× Après avoir cliqué sur "Répondre" vous serez invité à vous connecter pour que votre message soit publié.
× Attention, ce sujet est très ancien. Le déterrer n'est pas forcément approprié. Nous te conseillons de créer un nouveau sujet pour poser ta question.
entwanne — @entwanne — Un zeste de Python — La POO en Python — Notions de Python avancées — Les secrets d'un code pythonique
entwanne — @entwanne — Un zeste de Python — La POO en Python — Notions de Python avancées — Les secrets d'un code pythonique
entwanne — @entwanne — Un zeste de Python — La POO en Python — Notions de Python avancées — Les secrets d'un code pythonique