Bonjour, jai besoin d'aide rapidement pour mon DM de nsi, exo pratique type bac [Résolu]

Signaler
-
 Leziry00 -
Bonjour à tous, je suis en terminale et j'ai besoin d'aide pour mon DM de NSI qui est à rendre avant Lundi (je sais je m'y prend très tard). Le DM contient 2 exercice qui sont les suivants:Exercice1:Soit le couple (note,coefficient):
note est un nombre de type flottant (float) compris entre 0 et 20 ;
coefficient est un nombre entier positif
Les résultats aux évaluations d'un élève sont regroupés dans une liste composée de couples (note,coefficient).
Écrire une fonction moyenne qui renvoie la moyenne pondérée de cette liste donnée en paramètre. Par exemple, l’expression moyenne([(15,2),(9,1),(12,3)]) devra renvoyer le résultat du calcul suivant : (2×15+1×9+3×12)/(2+1+3) = 11,83

Exercice2:On cherche à déterminer les valeurs du triangle de Pascal. Dans ce tableau de forme triangulaire, chaque ligne commence et se termine par le nombre 1. Par ailleurs, la valeur qui occupe une case située à l’intérieur du tableau s’obtient en ajoutant les valeurs des deux cases situées juste au-dessus.Créer une fonction pascal. Elle doit renvoyer une liste correspondant au triangle de Pascal de la ligne 1 à la ligne n où n est un nombre entier supérieur ou égal à 2 (le tableau sera contenu dans la variable C). La variable Ck doit, quant à elle, contenir, à l’étape numéro k, la k-ième ligne du tableau. Voici ce que l’on devra obtenir :
>>> pascal(4)
[[1], [1, 1], [1, 2, 1], [1, 3, 3, 1], [1, 4, 6, 4, 1]]
>>> pascal(5)
[[1], [1, 1], [1, 2, 1], [1, 3, 3, 1], [1, 4, 6, 4, 1], [1, 5, 10, 10, 5, 1]]
J'ai fait des recherches sur le net et c'est un des sujets pratiques que j'aurais pû avoir en mars. Voici ce que j'ai fait:
def moyenne(notes):
"""
Fonction qui calcule la moyenne pondérée
:param notes: (float) compris entre 0 et 20
:param coeff: (int)
:exemple:
>>> print(moyenne)
moyenne([(15,2),(9,1),(12,3)])
"""
notes = [(15,2),(9,1),(12,3)]
s=0
scoeff=0
for elt in notes():
note = (15,9,12)
coeff = (2,1,3)
note = notes[0,0]
print(note)

for i in range(0,3):
s=s+coeff[i]*note[i]
scoeff=sc+sum(coeff)
print(s/scoeff)

def pascal(n):
"""

Fonction qui renvoie une liste correspondant au triangle de Pascal de la ligne 1 à la ligne n où n est un nombre entier supérieur ou égal à 2
:n:(int)
:exemple:
>>> pascal(4)
[[1], [1, 1], [1, 2, 1], [1, 3, 3, 1], [1, 4, 6, 4, 1]]
"""
C= [[1]]
for k in range(1,n):
Ck = [1]
for i in range(1,k):
Ck.append(C[1][i-1]+C[k-1][1])
Ck.append(1)
C.append(Ck)
return C

La fonction de l'exo 1 ne fonctionne pas quand je fait print(moyenne(notes) et l'exo 2 crash avec un nombre supérieur à 4. Merci d'avance pour votre aide

7 réponses

Messages postés
1072
Date d'inscription
lundi 23 mars 2020
Statut
Membre
Dernière intervention
10 juin 2021
120
Bonjour,

L'indentation étant importante en Python, merci de copier/coller ici ton code complet avec les balises de code
mode d'emploi:
https://codes-sources.commentcamarche.net/faq/11288-les-balises-de-code

Visuellement, ça doit ressembler à ceci (avec la coloration syntaxique) :

def test():
    print('test')

test()


De plus si on fait
print(moyenne(notes))

ca veut dire que la fonction moyenne est censée retourner une valeur ...
et tu passes notes en argument à la fonction , alors que notes est définie à l'intérieur
Messages postés
15976
Date d'inscription
lundi 9 juin 2008
Statut
Contributeur
Dernière intervention
10 juin 2021
866 > Leziry00
as-tu compris le message d'erreur en ligne 36?
Messages postés
15976
Date d'inscription
lundi 9 juin 2008
Statut
Contributeur
Dernière intervention
10 juin 2021
866 >
Messages postés
15976
Date d'inscription
lundi 9 juin 2008
Statut
Contributeur
Dernière intervention
10 juin 2021

as-tu lu l'énoncé? l'as-tu compris?
as-tu écrit ce programme?
>
Messages postés
15976
Date d'inscription
lundi 9 juin 2008
Statut
Contributeur
Dernière intervention
10 juin 2021

Oui j'ai lu l'énoncé, j'ai compris l'exo 1, le 2 moins. Je me suis aider d'internet et d'un ami pour le 1 et pour le 2 j'ai trouver le sujet sur le net. Mon prof à donner le même sujet mais à enlever le code pour l'exo 2 qui est le suivant:
def pascal(n):
    C= [[1]]
    for k in range(1,...):
        Ck = [...]
        for i in range(1,k):
            Ck.append(C[...][i-1]+C[...][...] )
    Ck.append(...)
    C.append(Ck)
return C
Messages postés
15976
Date d'inscription
lundi 9 juin 2008
Statut
Contributeur
Dernière intervention
10 juin 2021
866 > Leziry00
essaie d'abord de ben comprendre l'énoncé de l'exercice 2.
tant que tu ne l'as pas compris, je ne vois pas comment t'aider sans faire le travail à ta place.
>
Messages postés
15976
Date d'inscription
lundi 9 juin 2008
Statut
Contributeur
Dernière intervention
10 juin 2021

La liste est fausse ? J'ai beaucoup de mal en NSI, j'ai eu 8 au bac blanc. Et ce DM peut me faire remonter un peu donc j'essaye tant bien que mal.
Messages postés
1072
Date d'inscription
lundi 23 mars 2020
Statut
Membre
Dernière intervention
10 juin 2021
120
Bien sur, c'est ce que je te disais dans mon message précédent:

print(moyenne(notes))
et j'obtient : Traceback (most recent call last):
File "<pyshell>", line 1, in <module>
NameError: name 'notes' is not defined

le nom notes n'est pas défini au moment où tu appelle moyenne(notes)
il est défini à l'intérieur de la fonction, donc trop tard

Et je te répète, pour faire print(moyenne(notes)) , il faut un return(s/scoeff) en fin de fonction
Messages postés
1072
Date d'inscription
lundi 23 mars 2020
Statut
Membre
Dernière intervention
10 juin 2021
120
Comment ça "Et comment je définis ?"

tu l'as déjà fait dans ta fonction:
notes = [(15,2),(9,1),(12,3)]

sauf qu'il faut déplacer ça avant la définition de fonction, donc avant le def ...
C'est fait. Maintenat quand je fais
print(moyenne(notes))
ça donne:
Traceback (most recent call last):
File "<pyshell>", line 1, in <module>
File "C:\Lycée\nsi\Terminale\DM\DM NSI 3.py", line 13, in moyenne
for elt in notes():
TypeError: 'list' object is not callable

Je dois enlever le "notes" du
for elt in notes():
?
Messages postés
1072
Date d'inscription
lundi 23 mars 2020
Statut
Membre
Dernière intervention
10 juin 2021
120
Non, c'est qu'on ne peut pas parcourir une liste de tuples comme tu le fais
notes est une liste de 3 tuples ...

il faut faire une boucle avec range comme tu le fais plus bas:
for k in range(len(notes)):


C'est élémentaire, tout ça, il faudrait vraiment que tu apprennes les bases ...
Oui je sais que j'ai beaucoup à apprendre. Voici le code maintenant:
notes = [(15,2),(9,1),(12,3)]
def moyenne(notes):
    """
    Fonction qui calcule la moyenne pondérée
    :param notes: (float) compris entre 0 et 20
    :param coeff: (int)
    :exemple:
    >>> print(moyenne)
    moyenne([(15,2),(9,1),(12,3)])
    """
    s=0
    scoeff=0
    note = (15,9,12)
    coeff = (2,1,3)
    for i in range(len(notes)):
        s=s+coeff[i]*note[i]
        scoeff=scoeff+coeff[i]
    return(s/scoeff)


Quand je fais
print(moyenne(notes))
ça donne
12,5
alors que je devrais obtenir 11,83
Messages postés
15976
Date d'inscription
lundi 9 juin 2008
Statut
Contributeur
Dernière intervention
10 juin 2021
866 > Leziry00
détaille ton calcul, explique pourquoi tu devrais obtenir 11.83.
a+-tu compris l'énoncé, ou est-ce ton ami qui l'a compris?
>
Messages postés
15976
Date d'inscription
lundi 9 juin 2008
Statut
Contributeur
Dernière intervention
10 juin 2021

L'exercice 1 j'ai compris l'énoncé, la fonction doit faire note*coeff+note*coeff+note*coeff diviser par la somme des coeff . C'est la formule qui calcul la moyenne pondérée non ?
Messages postés
1072
Date d'inscription
lundi 23 mars 2020
Statut
Membre
Dernière intervention
10 juin 2021
120
?

(15x2)+(9x1)+(12x3)=75
2+1+3=6
75/6 = 12.5
Messages postés
15976
Date d'inscription
lundi 9 juin 2008
Statut
Contributeur
Dernière intervention
10 juin 2021
866
je pense que le programme
moyenne
est correct. peut-être parce qu'il a été écrit par quelqu'un d'autre, qui a compris l'énoncé.
Mon professeur a écrit ça dans l'énoncé :
Écrire une fonction moyenne qui renvoie la moyenne pondérée de cette liste donnée en paramètre. Par exemple, l’expression moyenne([(15,2),(9,1),(12,3)]) devra renvoyer le résultat du calcul suivant : (2×15+1×9+3×12)/(2+1+3) = 11,83
Messages postés
15976
Date d'inscription
lundi 9 juin 2008
Statut
Contributeur
Dernière intervention
10 juin 2021
866 > Leziry00
as-tu vérifié le calcul du professeur?
>
Messages postés
15976
Date d'inscription
lundi 9 juin 2008
Statut
Contributeur
Dernière intervention
10 juin 2021

Oui, ça fait 12,5. Merci beaucoup à vous 2 pour votre aide. Il me reste que le 2.
Messages postés
1072
Date d'inscription
lundi 23 mars 2020
Statut
Membre
Dernière intervention
10 juin 2021
120
Bonjour,

Par contre, tu n'utilises pas la variable notes pour la découper en ses différents éléments

tu as codé "en dur" les variables note et coeff pour faire le découpage

et donc ton programme ne fonctionne que pour ces valeurs là ...
>
Messages postés
1072
Date d'inscription
lundi 23 mars 2020
Statut
Membre
Dernière intervention
10 juin 2021

Bonsoir, désolé de répondre si tard. Encore merci à vous deux, maintenant mon code fonctionne avec n'importe quelle note et coefficient.
Messages postés
15976
Date d'inscription
lundi 9 juin 2008
Statut
Contributeur
Dernière intervention
10 juin 2021
866 > Leziry00
peux-tu alors marquer la discussion comme résolue?
>
Messages postés
15976
Date d'inscription
lundi 9 juin 2008
Statut
Contributeur
Dernière intervention
10 juin 2021

OUI mais avant cela j'aimerais savoir si vous connaissez un site qui pourrai m'aider pour NSI ?
Messages postés
15976
Date d'inscription
lundi 9 juin 2008
Statut
Contributeur
Dernière intervention
10 juin 2021
866 > Leziry00
non
>
Messages postés
15976
Date d'inscription
lundi 9 juin 2008
Statut
Contributeur
Dernière intervention
10 juin 2021

D'accord, merci quand même. Bonne fin de soirée et à bientôt mdr
Donc je définis avant le for elt in notes ? Et comment je définis ?