import dans boucle

Le
Mihamina (R12y) Rakotomandimby
Bonjour,
Dans l'exercice des one-liners, j'essaie ceci:

$ python -c "import random; while 1: print random.random();"
File "<string>", line 1
import random; while 1: print random.random();
^
SyntaxError: invalid syntax


Ok, je ne comprends pas pourquoi.
Et pourtant:

$ python -c "while 1: import random; print random.random();"
0.351864467614
0.0834460788551
0.0672799000147
0.920266702212
0.601055483621
0.0534133049201
0.402781561461
0.498443773662
0.846582957082



Ce qui m'ennuie, c'est que le import est dans la boucle et puis d'ailleurs
je me demande quand même pourquoi la première tentative est syntaxiquement
fausse.

Des réponses?

PS: Si vous avez des suggestions pour génerer une chaine aléatoire de 10
caractères [a-z] one-liner, je suis preneur. C'est le but pas atteint de
mon one-liner.
Vidéos High-Tech et Jeu Vidéo
Téléchargements
Vos réponses
Gagnez chaque mois un abonnement Premium avec GNT : Inscrivez-vous !
Trier par : date / pertinence
Maric Michaud
Le #626560
Bonjour,


Salut,

Dans l'exercice des one-liners, j'essaie ceci:

$ python -c "import random; while 1: print random.random();"
File "<string>", line 1
import random; while 1: print random.random();
^
SyntaxError: invalid syntax




Bah si c'est une erreur de syntaxe, alors c'est une erreur de syntaxe
(c'est bien Python, les erreurs en général sont ce qu'elles disent) :

http://docs.python.org/ref/simple.html

"""
6. Simple statements

Simple statements are comprised within a single logical line. Several
simple statements may occur on a single line separated by semicolons. """

Simple statments... for, if, et toutes les autres instructions avec un
':' sont instructions composées (compound statments).

MC
Le #626559
Salut !

si c'est une erreur de syntaxe, alors c'est une erreur de syntaxe


Je dirais même plus : "si c'est une erreur de syntaxe, alors c'est une
erreur de syntaxe".

Et, dans le conflit syntaxe versus orthographe, Python préfère le
syntaxiquement correct.





--
@-salutations

Michel Claveau

MC
Le #626558
Saint Taxe, priez pour lui.

--
@-salutations

Michel Claveau
Eric Brunel
Le #626306
On Tue, 26 Jun 2007 00:36:53 +0200, Mihamina (R12y) Rakotomandimby
PS: Si vous avez des suggestions pour génerer une chaine aléatoire de 10
caractères [a-z] one-liner, je suis preneur. C'est le but pas atteint de
mon one-liner.


Dans la grande (?) série "toi aussi, fais du Perl en Python":
python -c 'print "".join([chr(int(ord("a") + __import__("random").random()
* (ord("z") + 1 - ord("a")))) for i in xrange(10)])'

Avertissement d'usage: ce code a été écrit par des professionnels sous la
supervision de professionnels. Ne faites pas ça chez vous! (Surtout dans
du code en production...)

HTH quand même...
--
python -c "print ''.join([chr(154 - ord(c)) for c in
'U(17zX(%,5.zmz5(17l8(%,5.Z*(93-965$l7+-'])"

Mihamina Rakotomandimby (R12y)
Le #626304
Maric Michaud wrote:

Bah si c'est une erreur de syntaxe, alors c'est une erreur de syntaxe


...que je ne vois pas comment corriger tout en laissant le import en dehors
de la boucle.
Puisque c'est une petite ligne (et puisque je ne sais pas), j'ai essayé
différentes positions du ";", essayé des ":",...
Mais, je continue de chercher.
--
"Beaucoup de gens achètent des choses dont ils n'ont pas besoin
avec de l'argent qu'il n'ont pas (crédits & emprunts)
pour impressionner des gens qu'ils n'aiment pas."
Inconnu

Maric Michaud
Le #630906
Maric Michaud wrote:

Bah si c'est une erreur de syntaxe, alors c'est une erreur de syntaxe


...que je ne vois pas comment corriger tout en laissant le import en dehors
de la boucle.
Puisque c'est une petite ligne (et puisque je ne sais pas), j'ai essayé
différentes positions du ";", essayé des ":",...
Mais, je continue de chercher.


Mais faut lire la doc, surtout quand quelqu'un a eu la gentillesse de
d'aller chercher le chapitre qui va bien...

Non, sans rire, ça veut dire que ce que tu veux est impossible. On ne
peut pas avoir une instruction simple suivie d'une instruction composée
sur la même ligne. C'est tout.

C'est pour faire quoi ? Du python dans un shell ou en ligne de commande
? Tu sais que la notation suivante est parfaitement valable dans les
deux cas ?

python -c "import string
for i in string.letters :
print i" | wc -l


Maric Michaud
Le #630009
On Wed, 27 Jun 2007 21:56:47 +0200, Maric Michaud

Maric Michaud wrote:

Bah si c'est une erreur de syntaxe, alors c'est une erreur de syntaxe
...que je ne vois pas comment corriger tout en laissant le import en dehors

de la boucle.
Puisque c'est une petite ligne (et puisque je ne sais pas), j'ai essayé
différentes positions du ";", essayé des ":",...
Mais, je continue de chercher.
Mais faut lire la doc, surtout quand quelqu'un a eu la gentillesse de

d'aller chercher le chapitre qui va bien...

Non, sans rire, ça veut dire que ce que tu veux est impossible. On ne
peut pas avoir une instruction simple suivie d'une instruction composée
sur la même ligne. C'est tout.

C'est pour faire quoi ? Du python dans un shell ou en ligne de commande
? Tu sais que la notation suivante est parfaitement valable dans les
deux cas ?


^^^^^^^^^^^^^^^ préciser : sous UNIX ^^^^^^^^^^^^^^^^^

python -c "import string
for i in string.letters :
print i" | wc -l


parce que sous Windows, ça ne marche pas :(


Ah oui, évidemment, toutes mes excuses... ceci dit pour les batch il n'y
a pas l'équivalent du "<<END" du shell UNIX ?
Vu l'interet des outils de scripting sous windows autant utiliser python
directemment avec des trucs genre : c = os.system, non ?




Pierre Quentel
Le #630007
PS: Si vous avez des suggestions pour génerer une chaine aléatoire de 10
caractères [a-z] one-liner, je suis preneur. C'est le but pas atteint de
mon one-liner.


Lao Tseu l'a dit : méfie-toi des one-liners

Mais bon, pour le fun :
C:>python -c "import random;import string;print
''.join(random.sample(10*string
.lowercase,10))"
nhuadtgnfk

Le 10*string.lowercase c'est si on accepte des répétitions de
caractères dans le résultat. Sinon, avec 10 caractères distincts :

C:>python -c "import random;import string;print
''.join(random.sample(string.lo
wercase,10))"
qoxwlktdgh

A+
Pierre

BertrandB
Le #634522
On Tue, 03 Jul 2007 15:34:41 +0200, Maric Michaud

le problème de tous ces langages (y compris python), c'est qu'ils
n'ont pas les mêmes fonctionnalités, donc on peut difficilement en
choisir un pour la vie :(


C'est comme les marteaux il faut prendre le bon marteau pour le bon clou
...Sinon ça peut marcher mais c'est soit fatigant si le marteau est trop
petit soit dangereux si le marteau est trop gros ;)

Publicité
Poster une réponse
Anonyme