Python programme aide - Python - Programmation
Marsh Posté le 24-10-2014 à 18:23:04
alex9669 a écrit : Bonjour messieurs ! deuxieme exercice: l'énoncé nous dit que si on a une liste composée d'éléments avec des doublons (ou plus si affinité ), on doit créer une fonction liste2set qui nous permet d'enlever ces doublons, et donc de renvoyer la meme liste qu'au depart mais sans les doublons. voilà ce que j'ai fait : def liste2set(L): La fonction laoupala, permet, comme son nom l'indique, de savoir si un élément r, est dans la liste E, si oui, elle affiche True. Dans le cas inverse, elle affiche False. cette fonction fonctionne quasiment tout le temps, j'ai fait plusieurs essais sauf lorsqu'on met une liste qui ressemble à celle ci : avez vous une idée ? d'avance merci; |
Pour la question 1 t'as pas le droit d'utiliser sort ?
Car un truc tout con c'est de concaténer la list b et la list a et d'ensuite refaire le trie. (mais j'imagine que c'est pas le but de l'exercice )
Code :
|
Après dans ta solution je vois 2 gros problèmes:
- tu ne rajoutes pas ton élément a ta liste final dans les cas ou l'une des valeurs est plus petite que l'autre (tu le fais que quand les 2 valeurs sont égales)
- quand tu arrives a la fin d'une des 2 listes tu sors de ta boucle, mais ne prend pas en compte que l'autre n'est pas fini de parcourir. Il faut donc rajouter a la fin le reste.
nb: au passage r != s and r > s et r != s and r < s t'as une redondence. Si r > s ou r < s, r et s seront toujours forcement différents
Voila ce que je ferais:
Code :
|
nb2: j'ai pas testé mon code avant de te le coller si ca se trouve il bug
Pour le 2eme il y a 2 features cool des lists (qu'on utilise quasi tout le temps en python) et que tu utilises pas.
Tu peux faire un "if value in my_list"
si l'element "value" est dans ta list "my_list" ca return True sinon False (en gros c'est ta fonction laoupala qui existe de base dans python
exemple:
>>> my_list = [2, 4, 5, 34] |
tu peux faire un for sur une liste (ca va te parcourir la liste du debut a la fin)
exemple:
>>> my_list = [2, 4, 5, 34] |
Du coup tu peux faire un code beaucoup plus simple
Code :
|
(ps pour info le while en python on s'en sert pratiquement jamais, comparé au for qu'on utilise a toutes les sauces)
Marsh Posté le 24-10-2014 à 17:20:18
Bonjour messieurs !
j'ai deux exercices à faire :
le premier : On suppose que deux listes A, et B sont triées par ordre croissant. Proposer une fonction inter qui prend en arguments deux listes A et B et renvoie l'intersection de ces listes. On veillera à ce qu'elle n'utilise pas plus de len(A)+len(B) lectures de case de A ou B. voilà ce que j'ai fait, mais il y a une erreur que je ne trouve pas.
def inter(A,B):
j=0
i=0
resultat_final=[]
while i<=(len(A)-1) and j<=(len(B)-1):
r=A[i]
s=B[i]
if r != s and r > s:
j+=1
if r != s and r < s:
i+=1
if r == s:
resultat_final+=[r]
return resultat_final
deuxieme exercice: l'énoncé nous dit que si on a une liste composée d'éléments avec des doublons (ou plus si affinité ), on doit créer une fonction liste2set qui nous permet d'enlever ces doublons, et donc de renvoyer la meme liste qu'au depart mais sans les doublons. voilà ce que j'ai fait :
def liste2set(L):
E=[L[0]]
for i in range(1, len(L)):
r=L[i]
if laoupala(r,E) is 'False':
E+=[r]
return E
La fonction laoupala, permet, comme son nom l'indique, de savoir si un élément r, est dans la liste E, si oui, elle affiche True. Dans le cas inverse, elle affiche False.
cette fonction fonctionne quasiment tout le temps, j'ai fait plusieurs essais sauf lorsqu'on met une liste qui ressemble à celle ci :
[1, 2, 3, 87, 656, 1, 11, 1, 11, 1, 11], qui nous renvoie : [1, 2, 3, 87, 656, 11, 11]
avez vous une idée ? d'avance merci;
cordialement,
alex