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

---------------
Stick a parrot in a Call of Duty lobby, and you're gonna get a racist parrot. — Cody
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