petit souci avec une fonction simple

petit souci avec une fonction simple - Python - Programmation

Marsh Posté le 22-07-2007 à 21:23:34    

Bonjour
 
Je viens de débuter la programmation en Python et je commence à jouer avec les fonctions. Bon, mon problème n'est pas vraiment lié aux fonctions, c'est surement une erreur d'algorithmique. alors voilà: J'ai une fonction qui prend comme argument un entier n et imprime une pyramide de hauteur n. Mon problème est qu'elle imprime deux espace de trop à chaque ligne! voyez plutôt:  
 

Code :
  1. def pyramide (hauteur):
  2. ligne = 1
  3. while ligne <= hauteur:
  4.  print " " * (hauteur-ligne), "*" * (ligne * 2 - 1), " " * (hauteur-ligne)
  5.  ligne = ligne + 1


 
ceci me donne, lorsqu'évalué à 6, cette pyramide:
 

Citation :


      *      
     ***      
    *****    
   *******    
  *********  
 ***********  


 
Mon souci est qu'il y a un espace de trop avant et après chaque série d'étoiles. Bref, il ne devrait y avoir aucune espace sur la dernière ligne.
Si on prend la première ligne par exemple, on a hauteur-ligne = 6-1 = 5. Donc on devrait avoir 5 expaces. Or, il y en a 6!!
 
pouvez-vous m'aider? c'est surement très simple, mais j'ai pas vu.
 
merci

Reply

Marsh Posté le 22-07-2007 à 21:23:34   

Reply

Marsh Posté le 23-07-2007 à 02:58:08    

Avec l'instruction print, les expressions (séparées par des virgules) sont séparées par un espace à l'affichage. Remplace les virgules par des + (concaténation de chaines) et ça ira.


Message édité par dividee le 23-07-2007 à 02:58:33
Reply

Marsh Posté le 23-07-2007 à 04:40:44    

ah, merci!! effectivement tellement simple. Ça fonctionne nickel!

Reply

Marsh Posté le 23-07-2007 à 12:52:15    

Black_Knight a écrit :


Code :
  1. ligne = 1
  2. while ligne <= hauteur:
  3. print ...
  4. ligne = ligne + 1



 

Code :
  1. for ligne in range(1, hauteur + 1):
  2. print ...


 


---------------
Vous ne pouvez pas apporter la prospérité au pauvre en la retirant au riche.
Reply

Marsh Posté le 23-07-2007 à 17:42:22    

et quelle est la différence exactement? est-ce que le FOR a une vitesse d'exécution plus rapide, ou y a-t-il une autre raison?

Reply

Marsh Posté le 23-07-2007 à 20:12:21    

Une alternative:

Code :
  1. def pyramide(hauteur):
  2.     return "\n".join([("*" *i).center(hauteur)
  3.                            for i in range(1, hauteur*2+1, 2)])
  4. print pyramide(9)

Message cité 1 fois
Message édité par elpacificator le 23-07-2007 à 20:17:55
Reply

Marsh Posté le 23-07-2007 à 20:34:07    

Black_Knight a écrit :

et quelle est la différence exactement? est-ce que le FOR a une vitesse d'exécution plus rapide, ou y a-t-il une autre raison?


Le FOR est lisible, ton truc non

elpacificator a écrit :

Une alternative:

Code :
  1. def pyramide(hauteur):
  2.     return "\n".join([("*" *i).center(hauteur)
  3.                            for i in range(1, hauteur*2+1, 2)])
  4. print pyramide(9)



C'est immonde :/


Message édité par masklinn le 23-07-2007 à 20:34:27

---------------
I mean, true, a cancer will probably destroy its host organism. But what about the cells whose mutations allow them to think outside the box, and replicate and expand beyond their wildest dreams by throwing away the limits imposed by overbearing genetic r
Reply

Marsh Posté le 24-07-2007 à 22:19:57    

Black_Knight a écrit :

et quelle est la différence exactement? est-ce que le FOR a une vitesse d'exécution plus rapide, ou y a-t-il une autre raison?


Ben non. Juste que ça évite l'initialisation et l'incrément...


---------------
Vous ne pouvez pas apporter la prospérité au pauvre en la retirant au riche.
Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed