Sujet: projet python
15/12/2010 @ 17:26:02: Gabrielle345: projet python
Salut salut!!

Alors voila, j'ai un projet a réaliser en python ms je ne m y connais pas bien du tt en informatique. Je dois rendre ce projet pour lundi. Est ce que il y a qlq pour qui python c est un jeux d enfant et qui a envie de m'aider un peu?
Merci mille fois.

1 Introduction
Jérôme Dossogne 24 novembre 2010
http://www.ulb.ac.be/di/info-f206/
Pour ce projet nous vous demandons de créer un programme permettant de déterminer les coef- ficients stœchiométriques d’une équation-bilan respectant les règles de la conservation de la matière. De tels programmes existent dans le commerce (par exemple : EBAS reaction calculator1), nous vous proposons dès lors d’en créer un vous-même.
Les coefficients peuvent être calculés automatiquement via la méthode dite « algébrique » qui consiste à résoudre un système homogène de n équations linéaires à m inconnues pour une équation-bilan de m molécules différentes composées de n types d’atomes différents.
Par exemple, l’équation-bilan (à coefficients w, x, y, z inconnus).
wC6H12O6 +xO2 â†\ yCO2 +zH2O (1)
peut être traduite par le système suivant :
6w=y 6w-y=0
12w=2z <=> 12w-2z=0 (2)
6w + 2x= 2x + z 6w + 2x - 2y -z=0
12w = 2z ⇔ 12w âˆ\ 2z = 0 (2) 6w + 2x = 2x + z 6w + 2x âˆ\ 2y âˆ\ z = 0
Un tel système peut être alors résolu par la méthode d’élimination de Gauss-Jordan qui consiste
1. à transformer le système en une matrice de travail ;
2. dans notre cas, à fixer la valeur d’un des coefficients ;
3. à transformer la matrice dans sa forme échelonnée réduite ;
4. à récupérer le plus petit commun multiple des dénominateurs de la dernière colonne ; les valeurs ainsi obtenues seront les coefficients de l’équation-bilan finale.
Pour illustrer la méthode, nous allons présenter l’application de chacune des étapes sur le système (2).

1.1 Étape 1
6w-y=0 6 0 -1 0 w 0
12w-2z=0 <=> Coefficients X Variables=0 <=> 12 0 0 -2 x = 0 (3)
6w+2x-2y-z=0 6 2 -2 -1 y 0
z
La matrice dite de travail sera la matrice des coefficients étendue avec celle des zéros :
6 0 -1 0 0
12 0 0 -2 0 (4)
6 2 -2 -1 0

1.2 Étape 2
Fixons la valeur d’une des variables, par exemple z = 1. Pour ce faire, nous partons de la matrice définie en (4) et nous ajoutons une ligne :
6 0 -1 0 0
12 0 0 -2 0
6 2 -2 -1 0 (5)
0 0 0 1 1

1.3. Étape 3
Nous devons maintenant transformer (5) sous sa forme échelonnée réduite en sélectionnant au total un pivot par ligne et en commençant par la première colonne juqu’à la colonne n + 1 = 4.
(5) devient après plusieurs manipulations:
1 0 0 0 1/6
0 0 1 0 1 (6)
0 1 0 0 1
0 0 0 1 1

1.4. Etape 4Étape 4
De (10) nous récupérons les valeurs ( 1 , 1, 1, 1) = (w, x, y, z). Comme les coefficients de l’équation-bilan doivent être des entiers, nous calculons le plus petit commun multiple des dénominateurs et multiplions les valeurs obtenues par ce dernier; ainsi, nous découvrons que (1,6,6,6)=(w,x,y,z). En remplaçant (w,x,y,z) par leur valeur dans (7), nous voyons que l'équation-bilan recherchée est:
C6H12O6+6O2 -> 6CO2 + 6H20 (7)
Vous noterez que cette dernière étape d’apparence simple s’adapte mieux à une application manus- crite qu’informatique. En effet, dans l’exemple fourni, deux hypothèses sont implicites : tout d’abord que nous travaillons avec des nombres sous forme de fractions et qu’ensuite ces fractions sont réduites avant de calculer le plus petit commun multiple de leur dénominateur. En Python, travailler avec des fractions peut être laborieux. Une alternative que nous vous suggérons serait de travailler avec des nombres réels, de définir un degré de précision considéré (nombre de chiffres derrières la virgule = n), de multiplier tous les nombres par une même valeur (10n), de les tronquer à partir de la virgule afin de les transformer tous en entiers et, pour terminer, de tous les diviser par leur plus grand commun diviseur.

Par exemple, si dans un exemple manuscrit soue aurions eu (5/4,9/8)= (w,x) et donc (10,9) = (w,x) comme valeur finale pour les coefficients, en Python stockées comme des réels, les valeurs récupérées seraient (1.25, 1.125) = (w, x). Il nous suffit alors de multiplier les deux valeurs par 1000 (précision de 3 chiffres après la virgule) pour obtenir (1250, 1125) = (w, x), de calculer leur plus grand commun diviseur (PGCD(1250,1125) = 125) et de diviser chacun de ces nombres par ce diviseur pour obtenir le résultat (1250/125, 1125/125) = (10, 9) = (w, x) qui est bien équivalent au résultat fait « à la main » sans avoir fait d’hypothèse sur la représentation des nombres.

Reprenant notre exemple (1/6,1,1,1)=(w,x,y,z), nous obtiendrons donc en Python (0.15000000....,1,1,1) = (w,x,y,z), ainsi, après avoir fixé la précision en multipliant par 1000 les 4 valeurs et en tronquant ce qui reste derrière la virgule, le résultat obtenu sera (159,1000,1000,1000) = (w,x,y,z). Nous constatons dès lors que le système de représentation choisi pour les valeurs implique certaines limitations puisque le résultat obtenu (159,1000,1000,1000) = (w,x,y,z) s’écarte de celui obtenu en travaillant avec des fractions (1,6,6,6) = (w,x,y,z) suite à la précision limitée que nous avons dû imposer. Nous devons soit nous en accomoder (ce qui sera accepté pour votre projet) soit travailler avec des notations sous forme de fractions, ce qui implique une gestion plus complexe de l’information.

2 Énoncé
Nous attendons de votre programme qu’il s’exécute par la commande python projetINFOF206.py precision nbLignes nbColonnes suivi de la liste des valeurs de la matrice n × m des coefficients (dans l’exemple en (3)) listés ligne par ligne de gauche à droite 3 . Votre programme doit ensuite afficher à l’écran les coefficients de l’équation-bilan équilibrée 4 en ayant suivi la méthode d’élimination de Gauss-Jordan. Vous pouvez utiliser le module « sys » via la commande import sys pour vous aider.
15/12/2010 @ 17:28:53: zion: projet python
Il est pourri ton copier/coller :ocube:

Et non, on ne fait pas tes devoirs, on peut t'aider si tu as un soucis sur un bout de code, mais après faut pas pousser :itm:
15/12/2010 @ 17:33:10: Clandestino: projet python
Surtout que, euh... l'énoncé date du 24 novembre, et la date de remise était lundi dernier (le 13)... Donc s'y prendre à la toute dernière minute, c'est très très mal :oh:

Et non, on ne fais pas les devoirs des autres à leur place. T'auras zero, point barre. Assume.
15/12/2010 @ 17:46:45: Georgio: projet python
Et puis pas besoinde programme pour résoudre une équation stoechiométrique bourdel ^^

Quoi c'est pas de chimie qu'il s'agit dans le fond? :grin:

En plus parfois c'est des trucs à rendre pour hier, mais ici c'est même avant hier :grin:
15/12/2010 @ 18:31:23: Gabrielle345: projet python
Le projet a été reporté a lundi. Je travail dessus tt les jour depuis 2 semaines. Si vs n avez pas le temps ou l envie de le réaliser, pas de souci, inutile de devenir rouge. C est juste un appel a l aide apres plusieurs nuits blanches.
Merci bcp
15/12/2010 @ 18:44:27: philfr: projet python
Allez, un indice: NumPy.
15/12/2010 @ 19:24:30: testeurdesite: projet python
J'ai trouvé !
m'Puny ... mais il y a un "m" de trop et ça s'écrit avec un "i" pas un "y", mais on n'est pas à ça près, non ?
:chupachupz:
16/12/2010 @ 10:16:48: blietaer: projet python
Salut Gabrielle, sois le/la bienvenu(e) chez les nerds :petrus:

Ne prête pas attention aux têtes rouges: c'est devenu ici une forme de ponctuation, pas toujours très (jamais?) adaptée. :kaola:

Il ne nous appartient absolument pas juger du contexte de ta demande et encore moins d'un éventuel retard (qui ne semble plus d'actualité, qui plus est): nous prenons tous un malin plaisir à poser des questions ici et surtout à y répondre, parfois pour des raisons professionelles, hobby et qui sait, peut-être a-t-on aussi contribué un jour à aider qqun à fabriquer une bombe :bombe:
Il n'y a pas de raison que ton honnêté débordante se retourne contre toi. :shy:

Par contre, ce qui ne se passera pas, c'est qu'on écrive ton programme à ta place
(une sombre histoire célèbre d'homme, d'apprentissage de pèche à la mouche et de pouvoir manger toute sa vie plutôt que de lui refiler une morrue, ...je me comprends)
:halalala:
Surtout qu'ici tu as des vrais bêtes de Python: tu risques d'avoir un truc overkill, même pas vu au cours (je ne crois pas que numpy fasse partie de ton cours de Python de base?!) :heink:

Je t'invite donc à commencer par faire un programme qui "bouffe" tes arguments et les tapent dans un matrice, je suppose que ca tu dois pouvoir faire depuis tes cours en une nuit blanche? :clindoeil:

Pour l'algorithme, cela doit se trouver. :zoubi:
16/12/2010 @ 10:21:32: zion: projet python
bli> On a dit la même chose, mais en une ligne, toi tu rajoutes juste plein de commentaires inutiles :patapai:
16/12/2010 @ 10:29:28: blietaer: projet python
zion> hehe. Peut-être. :itm:
Peut-être ce que tu appelles des "commentaires inutiles" font la différence dans un accueuil un peu moins glacial? :ohwell:
Cela ne m'a pas pris bcp de temps de les taper.... :crazy:
16/12/2010 @ 10:55:53: Dr_Dan: projet python
zion> hehe. Peut-être. :itm:
Peut-être ce que tu appelles des "commentaires inutiles" font la différence dans un accueuil un peu moins glacial? :ohwell:
Cela ne m'a pas pris bcp de temps de les taper.... :crazy:


Ils auraient étés moins glacials:
1) si le gars avait expliqué son probléme sans bêtement copier-coller l'énoncé sur le forum.
2) En montrant la partie du code qui lui pose problème.

Entre demander de l'aide et chercher un 'nègre' pour faire le boulot à sa place, il y a de la marge :itm:
16/12/2010 @ 11:04:46: Jean-Christophe: projet python
Il m'est arrivé (une seule fois, d'accord) de faire le travail de quelqu'un d'autre.
J'ai pris un malin plaisir à faire quelque chose de parfaitement correct, mais d'indéfendable si on ne l'a pas compris.
Le but était d'avoir un "merci", puis, quelques semaines plus tard, un "mais putains, j'ai passé des heures à décortiquer le truc et je me suis quand même planté à l'oral" pour pouvoir répondre "La prochaine fois, apprend à le faire toi-même :itm: "

C'était assez jouissif. Ça remonte au secondaire et c'était un travail de physique...
16/12/2010 @ 11:36:32: H2G2: projet python
Moi, je fais souvent le travail à la place des autres, mais on me paie pour ça... sauf à l'unif :whistle: quand je faisais mon service civil, où ils ont en profité pour me faire écrire les discours du recteur :tinostar: Comme quoi les tire-au-flanc, y en a à tous les niveaux :ddr555:
16/12/2010 @ 14:43:18: Gabrielle345: projet python
Merci blietaer pour ta réponse très sympa. Et Dr_Dan... Je n'ai pas fait un simple copier-coller car l'énoncé à une mise en page bcp plus jolie que ce que j'ai écrit.

Pour le tout début du programme, j'ai pu réaliser la matrice mais avec celle qu'on m'a donnée en exemple. Je ne parvient pas a faire en sorte que l'utilisateur puisse entrer une matrice quelconque.
Si vous pouvez m'aider a résoudre ce problème, ca m'aiderait beaucoup.
Merci

  1. import sys 
  2. sys.argv = ['essai.py''5''3''4''6''0''-1''0''12''0''0''-2''6''2''-2''-1'
  3. def matrice (m,n): 
  4.     ''' crée une matrice de zéro ''' 
  5.     M=[]  
  6.     for i in range (m):#création 
  7.         M.append([0]*(n+1)) 
  8.     for l in range(m+1,m+2): 
  9.         M.append([0]*(n-1)+ [1]*2
  10.     for i in range (m): 
  11.         for j in range (n): 
  12.             M[i][j] = float(sys.argv[i*n + j + 4]) 
  13.     return M 
  14. def res(): 
  15.     m=int(sys.argv[2]) 
  16.     n=int(sys.argv[3]) 
  17.     print matrice(m,n)
16/12/2010 @ 16:26:16: Gabrielle345: projet python
Et en effet je n'ai pas vu numpy et Gabrielle avec "le" à la fin est le prénom d'une fille :wink:

Je viens de rajouter une ligne a mon programme, cela ne le rend pas très "propre" ms j'avance...
Toute aide est la bienvenue :grin:

  1. >> def matrice (m,n): 
  2. M=[[0.0 for i in range (nbColonnes)] for j in range (nbLignes)] 
  3. for i in range (m): 
  4. M.append([0]*(n+1)) 
  5. for j in range (m+1,m+2): 
  6. M.append([0]*(n-1)+[1]*2
  7. for i in range (m): 
  8. for j in range (n): 
  9. M[i][j]=float(sys.argv[i*n +j+4]) 
  10. return M


  1. >>> def res(): 
  2. m=int(sys.argv[2]) 
  3. n=int(sys.argv[3]) 
  4. print matrice(m,n)
16/12/2010 @ 16:36:40: ovh: projet python
Utilise stp l'icône http://www.informaticien.be/images/bbcode_highlight.png pour afficher le code source avec la coloration syntaxique python, ce sera beaucoup plus lisible.

J'ai modifié tes posts pour les ajouter :wink:
16/12/2010 @ 17:02:34: Gabrielle345: projet python
  1. def matrice (m,n): 
  2. M=[[0.0 for i in range (nbColonnes)] for j in range (nbLignes)] 
  3. for i in range (m): 
  4. M.append([0]*(n+1)) 
  5. for j in range (m+1,m+2): 
  6. M.append([0]*(n-1)+[1]*2
  7. for i in range (m): 
  8. for j in range (n): 
  9. M[i][j]=float(sys.argv[i*n +j+4]) 
  10. return M 
  11. >>> def res(): 
  12. m=int(sys.argv[2]) 
  13. n=int(sys.argv[3]) 
  14. print matrice(m,n)
16/12/2010 @ 17:24:58: ovh: projet python
Ah j'ai peut-être édité ton post en même temps que toi :tinostar:
16/12/2010 @ 17:49:27: Dr_Dan: projet python
Et Dr_Dan... Je n'ai pas fait un simple copier-coller car l'énoncé à une mise en page bcp plus jolie que ce que j'ai écrit.


Parce que le forum ne comprend pas les caractères formatage du document d'où il a été copié :roll:
Et menteuse en plus :ohwell:
16/12/2010 @ 18:18:30: Gabrielle345: projet python
penses se que tu veux, ça ne changera malheureusement rien à mon problème.
Retour