Faire d'une variable une constante - Python - Programmation
Marsh Posté le 21-10-2014 à 21:47:36
Ouch c'est un peu inbouffable. j'aimerai bien t'aider mais:
1/ tu pourrais donner un exemple des valeurs que tu passes a ta fonction et du résultat que tu souhaite avoir ? (c'est quoi M ?)
2/ ca serait peut etre bien de re-ecrire ton algo en utilisant de vrai noms de variables et non une lettre.
Style: d -> poids_sac (enfin si j'ai bien compris) ou l -> valeurs_objet
Ca rendrait ton code BEAUCOUP plus clair, surtout si un jour toi (ou quelqu'un d'autre) doit le relire. (un peu de lecture sur le sujet http://sametmax.com/bien-nommer-se [...] n-python/)
Marsh Posté le 23-10-2014 à 15:24:37
Bonjour rage2000 et merci de ta réponse.
Comme tu me l'as demandé, j'ai donné de vrais noms de variables à mon algorithme. Attention, il est, selon moi, encore plus "inbouffable", comme tu le dis. J'y ai mis un peu de couleur, comme il est présenté sur Python, pour y voir un peu plus clair.
Le voici :
Code :
|
J'y ai pris un exemple simple avec 12 objets à sa disposition :
4 objets de valeur 34 qui pèse 2 chacun
1 objet de valeur 33 qui pèse 3
1 objet de valeur 30 qui pèse 4
1 objet de valeur 22 qui pèse 6
1 objet de valeur 3 qui pèse 19
1 objet de valeur 2 qui pèse 20
1 objet de valeur 1 qui pèse 1
Le sac d'Arthur peut contenir un poids total de 12.
Arthur veut prendre un maximum d'objet de plus grande valeur. Il va donc prendre les 4 objets de valeur 34, l'objet de valeur 33. Son sac pèse alors 11. Il peut encore rentrer l'objet de valeur 1 qui pèse 1.
Je devrai donc avoir :
Code :
|
Or, j'ai :
Code :
|
Alors j'ai réfléchi, et mon erreur vient du fait que la liste_initiale_de_valeurs devient de plus en plus petit quand la liste_de_valeurs devient de plus en plus petit. Du coup, ma deuxième boucle while est fausse.
J'ai alors deux questions :
1) Est-ce qu'il existe une fonction dans Python pour fixer la variable liste_initiale_de_valeurs pour qu'elle na varie jamais ?
2) Si la réponse à la première question est négative, existe-t-il une fonction ou un moyen simple de prendre le 2ème (ou 3ème, 4ème...) maximum d'une liste ?
Exemple : l=[1,2,5,3] . max(l)=5 , deuxièmemax(l)=3
Merci beaucoup !
_____________________________________________________________________________________
EDIT LE 23/10/2014 A 18h17 :
J'ai réussi à contourner le problème, mon algorithme tourne. Toutefois, si vous avez des réponses à ma première question, je suis preneur !
Merci !
Marsh Posté le 23-10-2014 à 20:34:25
Pour ta question 1 je la comprend toujours pas.
Pour la 2 non je crois pas.
Apres je trouve que le probleme: ton algo est complexe car tu pars avec des datas pas pratique.
Je pense que la bonne solution est de d'abord traiter tes listes pour avoir un truc simple a manipuler.
Voila comment j'aurai codé ca de mon coté (idem j'aurai pu afficher a la volé le resultat, mais je préfère retrouver une organisation ou traitement de la data et affichage est séparé, le code est plus maniable le jour ou tu veux le modifier):
Code :
|
Marsh Posté le 21-10-2014 à 18:57:58
Bonjour !
Drôle de titre pour un sujet, il est vrai, mais je n'arrive pas à reformuler mon souhait autrement.
Je m'explique : Je suis en train d'essayer de faire un algorithme sur python qui permet à Arthur de choisir les objets de plus grandes valeurs dans son sac-à-dos et de les mettre sans dépasser le poids qu'il ordonne. Chaque objet a une valeur et chaque valeur a une masse. Deux objets de même valeur ont des masses identitiques. Sacré Arthur !
J'ai donc fait ça :
Ce que je souhaite faire, c'est ne pas faire varier n quand l diminue, sinon, ça ne marche pas.
Quelqu'un saurait-il comment faire ?
Merci beaucoup !