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.