Seite 2 von 2

Re: Buchstaben eines Wortes in eine Liste einlesen

Verfasst: Mittwoch 28. März 2012, 21:23
von BlackJack
@problembär: Bei der Aufgabenstellung "Sortieren Sie eine Liste nach dem Zufall neu" ist `random.shuffle()` genau die richtige Antwort und selber schreiben wäre Overkill, weil das in der Aufgabenstellung nicht gefordert ist.

Re: Buchstaben eines Wortes in eine Liste einlesen

Verfasst: Mittwoch 28. März 2012, 21:31
von DasIch
Selbst wenn man random.shuffle() selber schreiben muss ist eine Implementation doch wesentlich eleganter zu bewerkstelligen.

Code: Alles auswählen

# coding: utf-8
import random


def shuffled(l):
    return sorted(l, key=lambda _: random.randrange(len(l)))


def main():
    word = list(raw_input(u"Bitte ein Wort eingeben: "))
    tries = 0
    while word != shuffled(word):
        tries += 1
    print u"Es wurden %d Versuche benötigt" % tries


if __name__ == "__main__":
    main()

Re: Buchstaben eines Wortes in eine Liste einlesen

Verfasst: Mittwoch 28. März 2012, 21:46
von BlackJack
@DasIch: Mir ist das heute zu spät um tatsächlich drüber nachzudenken, aber bist Du sicher dass Dein `shuffle()` unter der Voraussetzung das der Sortieralgorithmus stabil ist, nicht eventuell mehr dazu neigt Buchstaben nicht zu tauschen als `random.shuffle()`? Weil durch die Beschränkung auf ganze Zahlen im Bereich der Indexe deutlich wahrscheinlicher ist, dass man die gleiche Zahl mehr als einmal erwischt. Ich hätte da als `key` einfach nur ``lambda _: random.random()`` genommen.

Re: Buchstaben eines Wortes in eine Liste einlesen

Verfasst: Mittwoch 28. März 2012, 21:49
von DasIch
Ja, stimmt. Die Wertemenge ist so recht klein, random.random wäre da besser.