#1 Le 19/06/2006, à 03:48
- Shuriken
[Résolu]Premiers pas en python - retour chariot
Bonjour,
J'ai eu envie de commencer à apprendre la programmation avec python, parce que ça avait l'air chouette. Ça date d'à peine deux jours et je me casse déjà les dents sur un exercice pourtant fort simple, à savoir obtenir ce petit dessin en console :
*
**
***
****
*****
******
*******
J'ai pondu ça :
# -*- coding:Utf-8 -*-
i, j = 0, 0
while (i < 7):
while (j <= i):
print "*"
j +=1
j = 0
print "" #retour chariot après chaque ligne
i +=1
Mon problème est que l'usage de print force un retour chariot en fin d'instruction, et je ne sais pas comment passer outre cela (le résultat est que toutes mes lignes ne comportent qu'une seule étoile).
Bien que débutant en programmation, j'ai quand même des notions en C, et cet exercice ne me pose aucun problème dans cet autre langage :
#include <stdlib.h>
#include <stdio.h>
int main(void)
{
int i = 0, j = 0;
while (i < 7)
{
while (j <= i)
{
printf("*");
j ++;
}
j = 0;
printf("\n"); /* retour chariot après chaque ligne */
i ++;
}
return 0;
}
Comment obtenir l'équivalent de ce code source C en python ?
Merci, je tourne en rond là.
Dernière modification par Shuriken (Le 19/06/2006, à 10:11)
Don't mess with the penguins!
Hors ligne
#2 Le 19/06/2006, à 06:02
- deconnect
Re : [Résolu]Premiers pas en python - retour chariot
Bien le bonjour à toi.
Ben écoute, je viens de regarder le code de mon projet python que j'ai du faire et j'ai des retour chariot en faisait
print 'Toto'
Donc en utilisant des simple quote ( ' ) plutôt que les doubles ( " ), je ne sais pas si c'est ça le problème, mais chez j'ai le retour chariot.
A plus
Hors ligne
#3 Le 19/06/2006, à 06:35
- Shuriken
Re : [Résolu]Premiers pas en python - retour chariot
Salut,
Les simples quotes et les doubles quotes ont le même fonction - j'ai déjà vu les deux dans des exemples.
En fait, j'en ai conclu que les doubles ont l'avantage de pourvoir inclure la simple quote ' dans la chaîne de caractères, par exemple :
variable = "J'aime le Python"
Mais ma question n'était pas comment faire un retour chariot (puisque print en rajoute un automatiquement après la chaîne de caractères), mais au contraire comment afficher successivement le contenu d'un (ou plusieurs) print sans avoir un retour chariot entre chacun d'entre eux (cf. mon dilemme dans le petit exercice).
Don't mess with the penguins!
Hors ligne
#4 Le 19/06/2006, à 07:51
- node
Re : [Résolu]Premiers pas en python - retour chariot
for i in range(7):
print "*" * (i + 1)
Hors ligne
#5 Le 19/06/2006, à 08:23
- node
Re : [Résolu]Premiers pas en python - retour chariot
Ou si tu veux garder ta structure avec les while, tu peux former ta chaîne et l'afficher après :
i, j = 0, 0
while (i < 7):
chaine = ""
while (j <= i):
chaine += "*"
j +=1
j = 0
print chaine
i +=1
Hors ligne
#6 Le 19/06/2006, à 10:10
- Shuriken
Re : [Résolu]Premiers pas en python - retour chariot
Wow, je ne savais pas qu'on pouvait faire directement des opérations sur des chaînes, ça contraste drôlement avec mon code C.
Merci beaucoup, c'est très clair maintenant.
Don't mess with the penguins!
Hors ligne
#7 Le 19/06/2006, à 11:08
- aleph
Re : [Résolu]Premiers pas en python - retour chariot
Réponse à l'exemple:
for i in xrange(1, 8):
print '*' * i
*
**
***
****
*****
******
*******
ou bien
i = 1
while i < 8:
print '*' * i
i += 1
*
**
***
****
*****
******
*******
Note, le string * est délimité avec des ' ', le choix des " " est aussi possible. Les deux variantes sont identiques. J'utilise ' ' car plus rapide avec mon clavier.
Réponse à la question:
Une commande print quelquchose envoie automaiquement un "eol", techniquement un os.linesep. Un print quelquchose, n'envoie pas de eol. Exemple:
print 1, 2, 3
donne
1 2 3
Erreur dans l'information d'encodage, info correcte :
# -*- coding=utf-8 -*-
Pour le débutants:
Lire http://docs.python.org/tut/tut.html. Cette documentation est générallement donnée avec toute installation de Python, un fichier chm sous Windows, pour Ubuntu, je ne sais pas. Elle est aussi téléchargeable. Courte, simple, permet l'interactivité avec un shell Python. Il n'y a pas mieux à ce jour. J'insiste sur ce point.
#8 Le 19/06/2006, à 11:22
- manatlan
Re : [Résolu]Premiers pas en python - retour chariot
si tu voulais juste afficher un caractère, il vaut mieux l'écrire sur la sortie standard directement (stdout)
import sys
sys.stdout.write("*")
"Oui, oui."
-- Shakespeare (Richard III, Acte I, Scène IV)
Hors ligne
#9 Le 19/06/2006, à 11:25
- manatlan
Re : [Résolu]Premiers pas en python - retour chariot
Pour le débutants:
Lire http://docs.python.org/tut/tut.html . Cette documentation est générallement donnée avec toute installation de Python, ... . Il n'y a pas mieux à ce jour. J'insiste sur ce point.
Si le débutant connait déjà un autre language ... et veut découvrir python d'une façon très agréable, et très simple ...
C'est DIVE INTO PYTHON (en français), la référence
http://diveintopython.adrahon.org/toc/index.html
"Oui, oui."
-- Shakespeare (Richard III, Acte I, Scène IV)
Hors ligne
#10 Le 19/06/2006, à 11:51
- aleph
Re : [Résolu]Premiers pas en python - retour chariot
> manatlan
DiveIntoPython: d'accord avec toi. Mais malheureusement souvent en retard d'un version.
Je pense que le tutorial est plus adéquat pour quelqu'un qui part de zéro. Il eût été possible
de trouver la réponse au problème print, alors que dans DiveIntoPython le cas n'est pas mentionné (si ma mémoire est bonne).
D'accord aussi avec sys.stdout.write(), plus compliqué à appréhender pour un néophyte.
Ce que je déplore, ce sont les gens qui mettent résolu alors que ce ne l'est pas. Il est bon de laisser ce genre de discussion pendante.
#11 Le 19/06/2006, à 14:42
- Shuriken
Re : [Résolu]Premiers pas en python - retour chariot
Erreur dans l'information d'encodage, info correcte :
# -*- coding=utf-8 -*-
Ah, pas de majuscule à utf-8 ? Si j'en avais mis une c'est parce que le cours que que je suis en train de lire l'avait écrit de la sorte, et comme l'interpréteur n'a jamais bronché...
C'est DIVE INTO PYTHON (en français), la référence
Pour la question des cours, je me base sur celui-là, que je trouve vraiment abordable : http://www.cifen.ulg.ac.be/inforef/swi/python.htm
Le Dive into Python a l'air très instructif, je le lirais dès que j'aurais des bases un peu plus solides vu qu'il semble être moins axé pour les débutants.
Ce que je déplore, ce sont les gens qui mettent résolu alors que ce ne l'est pas. Il est bon de laisser ce genre de discussion pendante
Si j'ai passé mon sujet en [Résolu], c'est tout simplement parce que j'ai eu la solution à mon problème, et que j'ai compris le raisonnement des réponses données par node.
Après, si vous voulez tergiverser sur les différentes méthodes possibles, libre à vous, tout est bon à prendre bien au contraire (bien que l'histoire de la "sortie standart" me soit totalement incompréhensible).
Quoi qu'il en soit, merci pour ces précisions.
Dernière modification par Shuriken (Le 19/06/2006, à 16:10)
Don't mess with the penguins!
Hors ligne
#12 Le 19/06/2006, à 15:10
- manatlan
Re : [Résolu]Premiers pas en python - retour chariot
bien que l'histoire de la "sortie standart" m'est totalement incompréhensible.
oups, désolé ...
je pensais que tu étais déjà informaticien, vu que tu as fait une version C de ton algo ...
oui, "dive into python" est vraiment bien, si tu pratiques déjà un autre langage, pk il y a sans cesses, des références à "comment on fait ça en C/VB/JAVA/PERL ..."
Sinon, il te sera pas très utile ... (peut être qques tips interessants)
(pourtant, dans ton prog C, tu utilises aussi la sortie standard ... le stdio.h (standard input/output) à travers printf() ...)
"Oui, oui."
-- Shakespeare (Richard III, Acte I, Scène IV)
Hors ligne
#13 Le 19/06/2006, à 15:38
- fabrom
Re : [Résolu]Premiers pas en python - retour chariot
De mémoire, pour supprimer le retour chariot auto. ajoutes une virgule en fin d'instruction
print "*",
Hors ligne
#14 Le 19/06/2006, à 15:40
- node
Re : [Résolu]Premiers pas en python - retour chariot
Oui mais la virgule ajoute un espace, et la sortie de l'exemple donné ne contient pas d'espace.
J'ignore s'il y a moyen d'enlever cet espace.
Hors ligne
#15 Le 19/06/2006, à 15:44
- aleph
Re : [Résolu]Premiers pas en python - retour chariot
Premier point, mea culpa:
Ton encodage est parfaitement correcte, les majuscules n'ont pas d'importance. La définition de l'encodage suit une expression régulière particulière, j'ai commis une grosse bourde en faisant le confudion entre : et =
Deuxième point, résolu:
Tu as écrit:
Si j'ai passé mon sujet en [Résolu], c'est tout simplement parce que j'ai eu la solution à mon problème, et que j'ai compris le raisonnement des réponses données par node.
Après, si vous voulez tergiverser sur les différentes méthodes possibles, libre à vous, tout est bon à prendre bien au contraire (bien que l'histoire de la "sortie standart" m'est totalement incompréhensible).
Quoi qu'il en soit, merci pour ces précisions.
Ce que je veux dire par là. Il n'est pas toujours bon de s'accrocher à la première réponse venue sous prétexte qu'elle fonctionne. Si tu veux apprendre correctement la programmation, il est intéressant d'essayer de comprendre les solutions proposées.
Dans le version
for i in range(7):
print "*" * (i + 1)
l'addition (i + 1) est effectuée 7 fois.
Dans la version
for i in xrange(1, 8):
print '*' * i
aucune addition n'est effectuée et l'itérateur xrange et beaucoup plus performant que l'itérateur range.
Evidemment que dans ce cas, ça n'a pas beaucoup d'importance, mais si ta boucle est plus importante et doit faire autre chose....
Pour ma part, je coderais comme ceci
for i in xrange(1, 8):
print ('%s') % ('*' * i)
#16 Le 19/06/2006, à 16:02
- aleph
Re : [Résolu]Premiers pas en python - retour chariot
Oui mais la virgule ajoute un espace, et la sortie de l'exemple donné ne contient pas d'espace.
J'ignore s'il y a moyen d'enlever cet espace.
Non, pour imprimer par ex. 3 chars successifs on aura avantage à utiliser
print ('%s%s%s') % ('a', 'b', 'c')
#17 Le 19/06/2006, à 17:09
- Shuriken
Re : [Résolu]Premiers pas en python - retour chariot
je pensais que tu étais déjà informaticien, vu que tu as fait une version C de ton algo ...
(pourtant, dans ton prog C, tu utilises aussi la sortie standard ... le stdio.h (standard input/output) à travers printf() ...)
Haha, effectivement je suis très loin d'être un programmeur en C. Quant à la lib stdio.h, bien que je connaisse le principe et les usages de printf()/scanf(), ça ne va guère plus loin !
Pour les optimisations dans les structures avec range, je n'en suis pas encore là, mais je prends note pour la suite.
Non, pour imprimer par ex. 3 chars successifs on aura avantage à utiliser
print ('%s%s%s') % ('a', 'b', 'c')
Le but de la manœuvre est d'afficher le contenu de 3 variables a, b et c, sans se soucier de leur type non ? Si oui, pourquoi les entourer de quotes ?
Sinon, je ne pensais pas susciter autant d'intérêt pour une malheureuse question à propos de print... j'adore ce forum. ^^
Dernière modification par Shuriken (Le 19/06/2006, à 17:09)
Don't mess with the penguins!
Hors ligne
#18 Le 19/06/2006, à 17:41
- aleph
Re : [Résolu]Premiers pas en python - retour chariot
> Shuriken
As-tu lu le "tutorial" (écrit par GvR) que je t ai proposé ? A lire avant tout autre bouquin !
#19 Le 20/06/2006, à 00:30
- Shuriken
Re : [Résolu]Premiers pas en python - retour chariot
Bien, ça sera fait Et je réviserai mon anglais mon passage...
Encore merci.
Don't mess with the penguins!
Hors ligne