Programme python

Fermé
chuxxxflu - 13 nov. 2021 à 02:04
Whismeril Messages postés 19048 Date d'inscription mardi 11 mars 2003 Statut Contributeur Dernière intervention 30 mai 2024 - 14 nov. 2021 à 19:59
Bonjour, je galère depuis 1 semaine sur cet exercice que je comprends toujours pas. pourriez-vous s'il vous plait me rendre service en me guidant.

On supposera ici que les éléments des listes utilisées sont tous de même type.
Soit le code suivant :
def so(liste) :
s=0
for e in liste :
for i in e :
if i%2==0 :
s=s+i
li=eval(input()) #eval permet de transformer la chaîne de caractères saisie par sa valeur (une liste par exemple), voir avant-propos de la séance 6 sur PIXAL
print(so(li))

Répondez aux questions suivantes :
Pour que le programme fonctionne :
a) Quel devrait être le type de la variable i ? Expliquez comment on peut le déduire.
b) Quel devrait être le type de la variable e ? Expliquez comment on peut le déduire.
c) Quel devrait être le type de la variable liste ? Expliquez comment on peut le déduire.
d) Quel devrait être le type de la variable li ? Expliquez comment on peut le déduire.
e) Quel devrait être le type de la variable s ? Expliquez comment on peut le déduire.
f) Expliquez en une ou deux phrases ce que la fonction devrait faire en expliquant le rôle de la variable s . Que doit-on
ajouter pour obtenir le résultat souhaité ?
g) Donnez un exemple représentatif de valeurs pour li et indiquez quelles seraient les valeurs successives prises par les
variables e, i et s.
h) En l'état actuel, qu'affiche le programme complet ? Après modification et sur votre exemple, qu'affiche t'il ?


je connais les variables i, e, liste, et li sont de quel type mais je ne sais pas si ça va changer pour que le programme fonctionne.
pour la question f je crois que la fonction faut qu'elle insère une liste mais je suis pas sûre.
veuillez s'il vous plait me donner juste un coup de main parce que je suis complètement perdue.
merci d'avance :)

23 réponses

Whismeril Messages postés 19048 Date d'inscription mardi 11 mars 2003 Statut Contributeur Dernière intervention 30 mai 2024 913
13 nov. 2021 à 08:00
Bonjour
En Python, l’indentation est primordiale, or par défaut le site ne la conserve pas.
Pour la conserver il faut utiliser les balises de code. Voir ce petit tuto https://codes-sources.commentcamarche.net/faq/11288-les-balises-de-code
On pourra commencer à essayer de t’aider quand tu auras reposté correctement ton code.
0
chuxxxflu Messages postés 5 Date d'inscription samedi 13 novembre 2021 Statut Membre Dernière intervention 14 novembre 2021
13 nov. 2021 à 17:29
def so(liste) :
    s=0
    for e in liste :
        for i in e :
               if i%2==0 :
                      s=s+i
li=eval(input()) #eval permet de transformer la chaîne de caractères saisie par sa valeur (une liste par exemple), voir avant-propos de la séance 6 sur PIXAL
print(so(li))


je crois que le code est écrit correctement maintenant !
(merci pour le tuto)
0
Whismeril Messages postés 19048 Date d'inscription mardi 11 mars 2003 Statut Contributeur Dernière intervention 30 mai 2024 913
Modifié le 13 nov. 2021 à 17:58
je connais les variables i, e, liste, et li sont de quel type mais je ne sais pas si ça va changer pour que le programme fonctionne.


Savoir quels sont les types de ces variables est nécessaire pour répondre à
Expliquez en une ou deux phrases ce que la fonction devrait faire en expliquant le rôle de la variable s

Parce que c’est grâce à cela que tu peux savoir ce qu’il faut mettre en entrée.
Si ce qui est en entrée n’est pas ce qui est attendu ton programme ne fonctionnera pas.
Ce n’est pas suffisant pour répondre à
Que doit-on
ajouter pour obtenir le résultat souhaité ?

Mais si tu rentres n’importe quoi, même si tu as trouvé ce qu’il faut ajouter tu n’auras pas le résultat attendu
0
Whismeril Messages postés 19048 Date d'inscription mardi 11 mars 2003 Statut Contributeur Dernière intervention 30 mai 2024 913
13 nov. 2021 à 18:00
J’ai validé sans finir…
Donc pour voir si tu es sur la bonne voie, peux tu donner le type des variables et ce que tu penses devoir donner en entrée de ton programme
0
chuxxxflu > Whismeril Messages postés 19048 Date d'inscription mardi 11 mars 2003 Statut Contributeur Dernière intervention 30 mai 2024
13 nov. 2021 à 19:13
pour les variables e et i je crois c’est des booléens
pour ce qu’il faut rajouter je crois c’est  liste=[] et me return parce que une fonction sans return ne marche pas vraiment.
0
chuxxxflu > Whismeril Messages postés 19048 Date d'inscription mardi 11 mars 2003 Statut Contributeur Dernière intervention 30 mai 2024
14 nov. 2021 à 17:46
pourrais-tu s’il te plait me montrer ton programme si tu l’as deja fait parce que moi malgré que j’ai tout rajouté ça ne marche toujours pas?
0
Whismeril Messages postés 19048 Date d'inscription mardi 11 mars 2003 Statut Contributeur Dernière intervention 30 mai 2024 913 > chuxxxflu
14 nov. 2021 à 17:50
Non,
par contre si tu me montres ce que tu as essayé, je te dirais ce qui ne va pas.
0
chuxxxflu Messages postés 5 Date d'inscription samedi 13 novembre 2021 Statut Membre Dernière intervention 14 novembre 2021 > Whismeril Messages postés 19048 Date d'inscription mardi 11 mars 2003 Statut Contributeur Dernière intervention 30 mai 2024
14 nov. 2021 à 17:56
def so(liste) :
    s=0
    lst=[]
    for e in liste :
        for i in e :
               if i%2==0 :
                   lst.append()
                   s=s+i
    return s
li=eval(input()) #eval permet de transformer la chaîne de caractères saisie par sa valeur (une liste par exemple), voir avant-propos de la séance 6 sur PIXAL
print(so(li))
0
Whismeril Messages postés 19048 Date d'inscription mardi 11 mars 2003 Statut Contributeur Dernière intervention 30 mai 2024 913
Modifié le 13 nov. 2021 à 20:10
Il faut bien ajouter un return.

Mais ni e ni i est un booléen.

Ça fait quoi ça
i%2==0
?

0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
du coup i est un entier ?
donc faut rajouter le i=int(input()) si c’est le cas
0
Whismeril Messages postés 19048 Date d'inscription mardi 11 mars 2003 Statut Contributeur Dernière intervention 30 mai 2024 913
13 nov. 2021 à 22:21
Oui i est un entier, mais non, il ne faut pas ajouter un int().

Puisque i est un entier qu’est ce que peut être e?
0
e est un intervalle ?
0
Whismeril Messages postés 19048 Date d'inscription mardi 11 mars 2003 Statut Contributeur Dernière intervention 30 mai 2024 913
14 nov. 2021 à 08:56
Ha ça peut-être.
Cependant je n'ai pas trouvé une façon de représenter un intervalle de façon à ce que eval() l'accepte. Cela dit, je ne code pas en Python et avant ta question je ne connaissais pas eval().
Il est donc possible qu'un intervalle puisse lui être donné en entrée. Mais pas "1 to 4".

Si dans le cours cité, on t'explique comment passer un intervalle dans eval(), alors oui e peut être un intervalle.
Si tu n'as pas cette information, alors un faut trouver une autre structure de donnée qui sera acceptée par eval.
0
yg_be Messages postés 22841 Date d'inscription lundi 9 juin 2008 Statut Contributeur Dernière intervention 1 juin 2024 1 473
Modifié le 14 nov. 2021 à 16:49
(bonjour)
on peut entrer ce genre de choses:
[[w*w for w in range(1,z)] for z in range(2,6)]

ou
((w*w for w in range(1,z)) for z in range(2,6))


si [1,2,3,4] est un intervalle, on peut entrer
[x for x in range(1,5)]
0
Whismeril Messages postés 19048 Date d'inscription mardi 11 mars 2003 Statut Contributeur Dernière intervention 30 mai 2024 913 > yg_be Messages postés 22841 Date d'inscription lundi 9 juin 2008 Statut Contributeur Dernière intervention 1 juin 2024
14 nov. 2021 à 16:45
Super merci
0
e est une liste du coup?
0
Whismeril Messages postés 19048 Date d'inscription mardi 11 mars 2003 Statut Contributeur Dernière intervention 30 mai 2024 913
14 nov. 2021 à 10:57
Oui, une liste ça marche.
Donc si e est une liste, quel est le type de li?
0
pour li j’en ai aucune idée, tout ce que je sais c’est que eval c’est une evaluation dynamique de la fonction
0
Whismeril Messages postés 19048 Date d'inscription mardi 11 mars 2003 Statut Contributeur Dernière intervention 30 mai 2024 913
14 nov. 2021 à 11:05
li est passé en paramètre à la fonction so. Donc li et liste sont « la même chose »
A partir de e tu peux déduire liste et donc li
0
d’accord
donc est ce que s est une variable de type immuable?
0
Whismeril Messages postés 19048 Date d'inscription mardi 11 mars 2003 Statut Contributeur Dernière intervention 30 mai 2024 913
14 nov. 2021 à 11:24
Je ne pense pas que ce soit pertinent pour cet exercice de savoir si c’est immuable ou mutable car le code n’essaye pas de modifier liste

Concentre toi sur cette ligne
 for e in liste : 

Tu sais que e est une liste (une liste d’entiers précisément) que peut donc être le le type de liste ?
0
une liste d’entiers aussi je suppose?
0
Whismeril Messages postés 19048 Date d'inscription mardi 11 mars 2003 Statut Contributeur Dernière intervention 30 mai 2024 913
14 nov. 2021 à 14:45
Non si liste était une liste d’entiers alors e serait un entier.

Qu’est ce qui pourrait avoir comme élément unitaire une liste d’entiers ?
0
là j’en ai aucune idée ????
0
Whismeril Messages postés 19048 Date d'inscription mardi 11 mars 2003 Statut Contributeur Dernière intervention 30 mai 2024 913
14 nov. 2021 à 15:41
Une liste de listes d’entiers.

Sachant cela, peux tu me donner la réponse à la question f?
0
le programme doit définir une fonction so(liste), on initialise s à 0. il doit rajouter i (un entier) à s si i est divisible par 2 et si e est dans la liste des listes des entiers. il doit afficher le résultat s ( il faut ajouter le return) et apres eval va permettre de transformer la chaine de caractère par la valeur et enfin le print va permettre d’afficher le résultat.
0
Whismeril Messages postés 19048 Date d'inscription mardi 11 mars 2003 Statut Contributeur Dernière intervention 30 mai 2024 913
14 nov. 2021 à 15:53
Ok, je ne l’aurais pas formulé comme cela, mais c’est l’idée.

Maintenant sais tu répondre aux autres questions?
0