Das ist mehr etwas für Code Review, aber sehr kurz:
from random import uniform
while True:
if uniform(-2, 2) != 0.0:
break
ist wahrscheinlich der mehr Pythonic/standard Weg, um diesen (Standard zu tun, wie das in diesem Muster in anderen Sprachen auftritt auch).
Es ist selten, dass eine flag
Variable notwendig ist, um aus einer (while) Schleife auszubrechen. Vielleicht bei Verwendung einer Doppelschleife.
Hinweis: Ich änderte Ihre is not
-!=
und Ihre 0
zu 0.0
(letztere ist so, dass es klar ist, sind wir einen Schwimmer mit einem Schwimmer zu vergleichen).
Weil Sie eine float
mit einer int
vergleichen, so werden sie nie das gleiche Element sein. Außerdem Zahlen vergleichen is
verwendet, ist eine schlechte Idee:
>>> 2*3 is 6 # this may work, but don't rely on it
True
>>> 10*60 is 600 # this obviously doesn't work
False
>>> 0 is 0 # sure, this works...
True
>>> 0.0 is 0 # but this doesn't: float vs int
False
Natürlich die eigentliche Frage zu beantworten, ob es andere Möglichkeiten gibt, diese Zufallszahlen zu erzeugen: wahrscheinlich ein Dutzend.
Mit einer Liste Verständnis in einer Liste Verständnis *:
[val for val in [uniform(-2, 2) for i in range(10)] if val != 0]
Mit numpy:
vals = uniform(-2, 2, 10)
vals = vals[vals!=0]
* Ich will es nicht verschachtelt nennen, da ich das zu einem etwas anderen Doppellistenverständnis gehört.