Zufällige Zahl in Python?

6 Antworten

Vom Fragesteller als hilfreich ausgezeichnet
Die anderen Antworten scheinen mir recht naiv zu sein, bzw. "riechen" sehr nach Anfängerniveau. :)

Eine wirklich clevere Implementierung sieht so aus:

from random import choice as c
l = list(set(range(2,13)) ^ set((3,5,7,8,9,11)))
print(c(l))

Das gibt dir eine zufällige Zahl anhand deiner Vorgaben aus.

Effizienter geht es nicht mehr. Keine Schleifen, keine Bedingungen und nicht mal eine einzige Einrückung nötig. Außerdem werden nicht sinnlos unnötige Zufallszahlen in einer Schleife berechnet, die sich im Nachhinein bei einer Prüfung als falsch rausstellen. :)

Anstatt print() kannst du das c(l) auch an jede andere Stelle deines Programms einbauen, und es wird dir jedes mal eine zufällige Zahl aus deinem Pool liefern.

In einem richtigen Programm solltest du natürlich auf vernünftige Namen für die Bezeichner achten, denn "c" und "l" sind nur in obigem Beispiel aussagekräftig. Bei allem, was länger als 5 Zeilen ist, sollte man sich wirklich Gedanken um gute Bezeichner machen!

Viel Spaß noch mit Python! :)

Hübsch. Aber das import choice as c würde ich mir nicht angewöhnen. Das ist gut für "nur ich muss es lesen"-Programme

1
@W00dp3ckr

Da gebe ich dir absolut Recht, und ich denke, das ist das gleiche Problem wie bei C++-Namespaces oder statischen Imports in Java.

Trotzdem sind viele meiner Python-Skripte sehr kurz und knapp gehalten, mit teilweise deutlich unter 20 Zeilen, wobei dann ein ...

from os.path import basename, isfile
# ...
if isfile(foo):
bar = basename(foo)

... viel mehr zur Übersichtlichkeit beiträgt, als ein ...

import os.path
# ...
if os.path.isfile(foo):
bar = os.path.basename(foo)

... und ich denke, das gilt auch für Dritte, die über meinen Quelltext stolpern.

Wie gesagt, bei sehr kurzen (!) Skripten! Wenn man natürlich erst durch 10 Seiten scrollen muss, um zu erkennen, dass eine Funktion aus einem anderen Modul importiert wird, anstatt irgendwo definiert zu sein, ist das natürlich etwas ganz anderes.

(Wobei in so einem Falle vermutlich eher die IDE helfen würde ... aber auch hier schmeiße ich für 5 Zeilen Code nicht extra ein Schwergewicht an, wenn es ein einfacher Editor auch tut)

Man muss eben einfach immer abwägen, was für die aktuelle Situation am sinnvollsten ist. Prinzipien sind zwar gut und schön, aber nur so lange sie wirklich helfen, und nicht um ihrer selbst willen. :)

1
@TeeTier

Offen gestanden hatte ich erst nach meinem Kommentar gesehen, dass Du es bist. Du weißt allgemein was Du tust (*lobhudelei off* ;-)). Aber auf das Problem hinweisen ist vielleicht allgemein nicht falsch.

Ich find übrigens basename(foo) sehr viel besser als b(f) ;-)

1
@W00dp3ckr

Danke schön! :)

Ich find übrigens basename(foo) sehr viel besser als b(f) ;-)

Dem schließe ich mich an! :)

0

Setz den Zufallsgenerator in eine while-Schleife. Als Bedingung nimmst du eine boolesche Variable als Flag.

gueltig = False
while not gueltig:
# Zufallsgenerator hier

Nach Erzeugung einer Zahl kannst du dann mit einer if-Abfrage prüfen und dein Flag gegebenenfalls auf True setzen.

#!/usr/bin/env python
# import random module
import random
# initialize
 randomrandom.seed()
# get random integer value between 1 and 1000
x = random.randint(1,1000)
# print random valueprint(x)

Das Ergebnis in if variable setze wenn eine der nicht gewollten zahlen auftrit Script wiederholen. 

Du könntest es so angehen: Eine Zufallszahl wird berechnet, dann überprüfst du mit if, ob es eine der unerwünschten ist. Wenn ja, dann generierst du eine neue. Ist zwar nicht sehr sauber, aber etwas besseres fällt mir nicht ein.