bonjour,
je n'arrive pas à programmer et afficher un triangle de pascal en python, pouvez-vous m'aider s'il vous plaît ?
merci !
bonjour,
je n'arrive pas à programmer et afficher un triangle de pascal en python, pouvez-vous m'aider s'il vous plaît ?
merci !
Bonjour,
quel est exactement ton problème, où bloques-tu?
Pour apprendre facilement Python regarde ces tutoriels et cours pour apprendre Python : http://python.developpez.com/cours/
Le meilleur livre Python : Apprendre à programmer avec Python 3 par Gérard Swinnen http://python.developpez.com/cours/apprendre-python3/
bonjour Pacificator,
en fait, j'essaie de faire une liste de liste que j'écris s[i][j] pour pouvoir représenter à la fois les lignes et les colonnes mais python bloque dès mon initialisation s[i][1]=1, avec le message d'erreur suivant :
" 'int' object does not support item assignment" !
que cela veut-il dire ??
l'initialisation de ta liste de liste ne doit pas être correcte.
Comment procèdes-tu?
alors j'ai déjà fait : s=[0]*n ou encore s=[][]
je sens que ça ne vas pas mais je ne sais pas comment...
Si tu tiens à pré-allouer ta liste de liste, de façon à pouvoir accéder à l'élément s[3][2] par exemple, et lui attribuer une valeur par après, tu peux le faire ainsi (sous forme de triangle):
20 étant le nombre de lignes du triangle que tu veux générer.
Code : Sélectionner tout - Visualiser dans une fenêtre à part s = [ [0]*i for i in xrange(20)]
Mais c'est une façon très "C" de le faire; si tu calcules les éléments au fur et à mesure, tu peux directement construire ton tableau avec les bonnes valeurs dedans sans devoir les allouer au préalable.
merci dividee ! lorsque je cherche à allouer mon tableau ça marche mais comme c'est un triangle de pascal, j'essaie de le construire au fur et à mesure avec une loi de récurrence, sauf que là ça ne va plus, le message d'erreur me dit que je n'ai pas défini s : comment définir s sans allouer ?
s'il vous plaît ?
j'ai aussi une autre question sur laquelle je rame, comment à la fin représenter mon triangle exactement comme celui de pascal, ie sans crochets, et avec ses lignes superposées ??
merci !
Bonjour,
Il est important d'avoir une idée précise de la structure de donnée capable de contenir le triangle de pascal.
Je verrais bien cela comme cela:
T[[1], [1,1], [1,2,1], [1,3,3,1], etc...]
Dans ce cas, il faut construire la liste de liste au fur et à mesure des besoins, un peu comme cela:
Ce qui affiche:
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11 T = [[1],[1,1]] print T[0] print T[1] for i in range(2,10): T.append([1]) # initialisation pour T[i][0]=1 for j in range(1, i): T[i].append(T[i-1][j-1] + T[i-1][j]) T[i].append(1) # initialisation pour T[i][i]=1 print T[i]
Si en plus tu veux supprimer les crochets et les virgules, il faut faire une boucle pour chaque ligne et utiliser les fonctions d'affichage et/ou transformer en chaine de caractères.
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11 [1] [1, 1] [1, 2, 1] [1, 3, 3, 1] [1, 4, 6, 4, 1] [1, 5, 10, 10, 5, 1] [1, 6, 15, 20, 15, 6, 1] [1, 7, 21, 35, 35, 21, 7, 1] [1, 8, 28, 56, 70, 56, 28, 8, 1] [1, 9, 36, 84, 126, 126, 84, 36, 9, 1]
Tyrtamos
merci Tyrtamos !! par contre, il faut maintenant que je vois comment enlever les crochets et les virgules...
Dis donc, tu as sacrément besoin d'un bon manuel de Python...
Ce qui affiche:
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6 for i in range(0,10): ch = "" for j in range(0,i+1): ch += "%5d" % T[i][j] print ch
Tyrtamos
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11 1 1 1 1 2 1 1 3 3 1 1 4 6 4 1 1 5 10 10 5 1 1 6 15 20 15 6 1 1 7 21 35 35 21 7 1 1 8 28 56 70 56 28 8 1 1 9 36 84 126 126 84 36 9 1
merci encore Tyrtamos ! j'avais presque réussi mais en utilisant la méthode join()...j'ai de bon cours de python mais c'est quand je trouve pas ma réponse que je viens ici ;-)
Par contre, j'ai rencontré un problème de taille dans la nuit : en calculant avec la même méthode des triangles d'entiers long T[i][j] de très grandes tailles puis en prenant par exemple leur T[i][j]%3 (reste de la division euclidienne par 3) j'obtiens un nouveau triangle, ça marche très bien au début, mais, ô surprise ! à partir d'une certaine ligne i (en gros, la taille de mes long "augmente" avec l'indice ligne comme le triangle de pascal mais sont plus gros) les résultats sont faux !!! Je suis très surpris et même déçu par ce résultat car je croyais que python n'avait pas de problème de calculs avec les grands entiers long, mais là !!!
Pouvons-nous en discuter ensemble ?
nb : la loi de récurrence de mon triangle est :
T[i+1][j+1]=long((1/2)*(i+2j)*(i+2j-1)T[i][j]) + long((j+1)*T[i][j+1])
Euh... Est-ce la formule exacte que tu utilises en Python ? (1/2) renvoie 0 en Python 2.5 (et 0.5 en Python 3.0). Dans le premier cas, ce n'est certainement pas juste; et dans le second, le fait de passer par un réel (flottant) limite la précision; il faudrait plutôt écrire:
Code : Sélectionner tout - Visualiser dans une fenêtre à part T[i+1][j+1]=(i+2j)*(i+2j-1)//2*T[i][j] + (j+1)*T[i][j+1]
Bien sûr!
Regarde déjà ce que te dit dividee. C'est une particularité de Python qui va disparaitre avec la 3.0. En ce qui me concerne, j'utilise la version 2.5, mais j'anticipe en mettant la ligne suivante juste après le shebang et l'encodage:
Avec cette ligne, 1/2 fait bien 0.5 et pas 0.
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2 from __future__ import division
Pour le reste, j'ai déjà calculé avec des entiers très très long (10000 chiffres), et je n'ai pas encore trouvé d'erreur.
Donne toutes les formules que tu utilises.
Tyrtamos
merci chers Dividee et Tyrtamos, ça marche !!
effectivement c'était bien un problème de signe / flottant au lieu de //,
je vais essayer d'installer ta commande Tyrtamos...
resalut,
j'ai un problème en voulant installer ta ligne Tyrtamos, je fais en première ligne :
!# usr/bin/env python
from_future_import division
Mais on m'affiche une erreur de syntaxe pour la deuxième ligne ! j'ai un sérieux doute sur mon encodage...
Tu aurais dû faire du copier-coller: il y a un espace après from et avant import.
Tyrtamos
très bien, c'était ça (plus une erreur dans mon path) merci Tyrtamos j'ai appris plein de choses !
une dernière question peut-être : je suis entrain d'afficher des triangles numériques en binaire (0 ou 1) avec de plus en plus de lignes, mais à partir de 80 lignes environ, les lignes trop longues sont affichées en plusieurs sous-lignes, or j'ai besoin de voir mon triangle en entier, n'y a t-il pas un moyen donc d'élargir l'affichage du triangle, comme si on le "voyait de plus loin" en totalité, ou de le mettre sous pdf ou que sais-je...?
merci !
Je n'ai pas trop d'idée sur la question. Si je devais le faire rapidement, je crois que je sauverais le résultat dans un fichier texte que je reprendrais ensuite sous word ou openoffice, afin de bénéficier des changements de taille de police.
Tyrtamos
Partager