Twitter iPhone pliant OnePlus 11 PS5 Disney+ Orange Livebox Windows 11

import dans boucle

9 réponses
Avatar
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.

9 réponses

Avatar
Maric Michaud
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).

Avatar
MC
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

Avatar
MC
Saint Taxe, priez pour lui.

--
@-salutations

Michel Claveau
Avatar
Eric Brunel
On Tue, 26 Jun 2007 00:36:53 +0200, Mihamina (R12y) Rakotomandimby
wrote:
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+-'])"

Avatar
Mihamina Rakotomandimby (R12y)
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

Avatar
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 ?

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


Avatar
Maric Michaud
On Wed, 27 Jun 2007 21:56:47 +0200, Maric Michaud
wrote:

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 ?




Avatar
Pierre Quentel
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

Avatar
BertrandB
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 ;)