Seite 1 von 1

zufallszahlen, aber nicht zwei gleiche hintereinander

Verfasst: Sonntag 9. November 2014, 10:16
von blutigeranfaenger
Hallo zusammen,
mit diesem Skript kann ich Zuallszahlen zwischen 0 und 5 erzeugen:

Code: Alles auswählen

#!/usr/bin/env python3
from random import randint
zahlen = [ ]
for i in range(10):
    zufallszahl = randint(0,5)
    zahlen.append(zufallszahl)
for i in zahlen:
    print(i, end=",")
Ein Ergebnis z.B. war:

Code: Alles auswählen

5,0,2,0,3,4,1,1,3,0,
Ich möchte das Skript nun so verändern, dass Wiederholungen zwar grundsätzlich möglich sind, direkte Wiederholungen desselben Wertes (hier z.B. 1,1) möchte ich aber ausschließen.
Ist das überhaupt möglich und wenn ja, wie?

Re: zufallszahlen, aber nicht zwei gleiche hintereinander

Verfasst: Sonntag 9. November 2014, 10:49
von karolus

Code: Alles auswählen

zahlen = [randint(0,5)]
while len(zahlen)<10:
    nextnum = randint(0,5)
    if not zahlen[-1] == nextnum:
        zahlen.append(nextnum)

Re: zufallszahlen, aber nicht zwei gleiche hintereinander

Verfasst: Sonntag 9. November 2014, 10:57
von blutigeranfaenger
Danke, Du hast mir sehr geholfen!

Re: zufallszahlen, aber nicht zwei gleiche hintereinander

Verfasst: Sonntag 9. November 2014, 11:11
von BlackJack
Die ``while``-Schleife passt da irgendwie nicht hin, das würde man eher als ``for``-Schleife ausdrücken. Und ``if not … == …`` wäre als ``if … != …`` IMHO ein wenig direkter und damit einfacher ausgedrückt.

Eine ``while``-Schleife könnte man in einer Lösung mit einer Generatorfunktion verwenden:

Code: Alles auswählen

from itertools import islice
from random import randint


def generate_random_integers(a, b):
    previous = None
    while True:
        result = randint(a, b)
        if result != previous:
            previous = result
            yield result


def main():
    numbers = list(islice(generate_random_integers(0, 5), 10))
    print(', '.join(map(str, numbers)))


if __name__ == '__main__':
    main()