Python retour à la ligne

Résolu/Fermé
bombouttcha Messages postés 4 Date d'inscription dimanche 17 mai 2020 Statut Membre Dernière intervention 17 mai 2020 - Modifié le 17 mai 2020 à 14:02
Phil_1857 Messages postés 1883 Date d'inscription lundi 23 mars 2020 Statut Membre Dernière intervention 28 février 2024 - 18 mai 2020 à 11:55
Bonjour à tous.
Je débute en python et je ne connais aucun autre langage informatique.
Je fais une erreur que j'arrive pas à identifié sur l’exercice suivant:

Le fichier notes.txt contient les notes obtenues par des étudiants pour le cours de Python. Chaque ligne du fichier ne
contient qu’une note.
Créez un script Python qui lit chaque ligne de ce fichier, extrait les notes sous forme de float et les stocke dans une liste.
Le script réécrira ensuite les notes dans le fichier moyenne.txt avec une note par ligne suivie de « recalé » si la note est
inférieure à 10 et « admis » si la note est supérieure ou égale à 10. Toutes les notes seront écrites avec une décimale. À titre d’exemple, voici les 3 premières lignes attendues pour le fichier moyenne.txt :
1| 13.5 admis
2| 17.0 admis
3| 9.5 recalé

voici mon script:

with open("notes.txt", "r") as fichier1, open("liste.py", "w") as fichier2:
    for notes in fichier1:
        fichier2.write("{}\n".format(float(notes)))
with open("liste.py", "r") as filin, open("moyenne.txt", "w") as fichier3:
    for ligne in filin:
        if float(ligne) < 10.0:
            fichier3.write("{0}{1}\n".format(str(ligne), "recale"))            
        else:
            fichier3.write("{0}{1}\n".format(str(ligne), "admis"))


voici le résulta:

13.5
admis
17.0
admis
9.5
recale
10.0
admis
16.5
admis
8.5
recale
18.5
admis

Voulez vous m'aider à comprendre mon erreur qui fait que python retourne à la ligne après la notes.
Merci
A voir également:

5 réponses

bombouttcha Messages postés 4 Date d'inscription dimanche 17 mai 2020 Statut Membre Dernière intervention 17 mai 2020 1
Modifié le 17 mai 2020 à 16:49
la différence est simple:
1/ ça fonctionne
2/ c'est propre

le voici:

lnotes = []
with open("notes.txt", "r") as fichier1:
    for notes in fichier1:
        lnotes.append(float(notes))
with open("moyenne.txt", "w") as fichier2:
    for x in lnotes:
        if x < 10.0:
            print("{} {}".format(x, "recale"))            
        else:
            print("{} {}".format(x, "admis"))


La raison première de ma demande d'aide est que je ne comprenais pas mes erreurs.
Grâce à votre aide j'ai réussi l'exercice et mis le doigt sur plusieurs de mes erreurs:
1/ je complique trop mon script
2/ je n'utilise que les dernières leçons apprises (j'ai vue .append, 3 ou 4 chapitres avant)
3/j'aurais dû demander de l'aide un peut plus tôt (je bloque sur cet exercice depuis plus de 3 jours)

Avez vous remarqué autres choses à corriger et que je n'ai pas vue?
Merci pour vôtre aide ainsi que de m'avoir accorder un peut de votre temps.
1
jee pee Messages postés 39592 Date d'inscription mercredi 2 mai 2007 Statut Modérateur Dernière intervention 20 avril 2024 9 226
17 mai 2020 à 17:48
Cela me semble bien.
Tu as raison, un programme est terminé quand on ne peut plus ... rien enlever ;-)

Une question : je ne fais pas réellement de python et pour tester des syntaxes n'ayant pas d'environnement, j'utilise le site online : https://www.jdoodle.com/python3-programming-online/ Sur ce site on ne peut pas utiliser des fichiers. Est-ce que le fait de faire
with open
et
print 
écrit dans le fichier, redirigeant la sortie standard (l'écran) ? Car dans ton programme original tu utilisais
write
. Dans ce cas print = write ? Si non, tu n'as pas vraiment testé l'anomalie qui t'a amenée à créer la question.
0