Python | Vermeiden Sie den vorherigen Wert aus der zufälligen Auswahl aus der Liste

Grundsätzlich, was ich möchte, dass mein Code zu tun ist, um 5 wrong() func's auszudrucken, ohne dass es 2 in einer Reihe des gleichen Textes gibt. Und natürlich will ich nicht, dass es Glück hat. 🙂

Obwohl Sorgen Sie sich nicht um den Teil davon drucken 5 wrong() s, ich möchte nur sicherstellen, wenn ich diese Funktion mindestens zweimal benutze ich bin 100% sicher, dass der vorherige Wert nicht der gleiche wie der nächste ist.

Zum Beispiel, was ich vermeiden möchte:

 Wrong! Wrong! 

Obwohl das noch gut geht:

 Wrong! Incorrect! Wrong! 

Mein Code:

 import random def wrong(): wrong_stats=["\n Wrong!","\n Tough Luck!","\n Better Luck Next Time!","\n Not there yet!","\n Incorrect!"] rand = random.choice(wrong_stats) rand3 = random.choice(wrong_stats) norep(rand,rand3,wrong_stats) def norep(rand,rand3,wrong_stats): if rand == rand3: same = True while same: rand = random.choice(wrong_stats) if rand != rand3: print(rand) break elif rand != rand3: print(rand) wrong() wrong() wrong() wrong() wrong() 

5 Solutions collect form web for “Python | Vermeiden Sie den vorherigen Wert aus der zufälligen Auswahl aus der Liste”

Du musst den letzten Wert behalten, den du zurückgegeben hast. du könntest

  • Verwenden Sie ein Modul global für diese (in der Regel chaotisch in der Praxis) ,
  • Oder verwandle es in eine Klasse (Art von verbose) ,
  • Oder halten Sie den Gleis nach außen und geben Sie es in jeder Zeit (klobig und langweilig) ,

Aber imo der schönste Weg, es zu tun wäre es, Ihre wrong Funktion in einen Generator zu verwandeln stattdessen: auf diese Weise können Sie den letzten zurückgegebenen Wert im Generatorausführungszustand verfolgen und es beim nächsten Mal vermeiden, ohne sich darum kümmern zu müssen In externem Code überall.

 def wrong(): wrong_stats = ["Wrong!","Tough Luck!","Better Luck Next Time!","Not there yet!","Incorrect!"] previous_value = None while True: value = random.choice(wrong_stats) if value != previous_value: yield value previous_value = value 

Und Gebrauch:

 w = wrong() for i in range(5): print(next(w)) # Tough Luck! # Incorrect! # Not there yet! # Tough Luck! # Better Luck Next Time! 

Sie können weiter anrufen mit Ihrem Generator und es wird eine unendliche Anzahl von Saiten, ohne jemals wiederholen den vorherigen Wert zu produzieren.

Globale Variablen sind eine schlechte Praxis.

Sie sollten den Wert, den Sie zuletzt auf wrong gedruckt haben, und wählen Sie dann zwischen allen Werten außer diesem Wert. So was:

 import random def wrong(last): chosen = random.choice([stat for stat in WRONG_STATS if stat != last]) print(chosen) return chosen if "__main__" == __name__: last = None for i in xrange(5): last = wrong(last) 

Speichern Sie den vorherigen Wert in einer globalen Variablen und wählen Sie zufällig aus der Liste (ohne den vorherigen Wert):

 import random wrong_stats=["\n Wrong!","\n Tough Luck!","\n Better Luck Next Time!","\n Not there yet!","\n Incorrect!"] prev = "" def wrong(): global prev if prev == "": prev = random.choice(wrong_stats) else: prev = random.choice(wrong_stats[:wrong_stats.index(prev)] + wrong_stats[wrong_stats.index(prev)+1:]) print prev if __name__ == "__main__": wrong() wrong() wrong() wrong() wrong() 

Verwenden Sie random.shuffle:

 from random import shuffle >>> shuffle(wrong_stats) >>> wrong_stats ['\n Better Luck Next Time!', '\n Wrong!', '\n Incorrect!', '\n Tough Luck!', '\n Not there yet!'] >>> shuffle(wrong_stats) >>> wrong_stats ['\n Incorrect!', '\n Tough Luck!', '\n Better Luck Next Time!', '\n Not there yet!', '\n Wrong!'] >>> shuffle(wrong_stats) >>> wrong_stats ['\n Incorrect!', '\n Wrong!', '\n Better Luck Next Time!', '\n Not there yet!', '\n Tough Luck!'] >>> shuffle(wrong_stats) >>> wrong_stats ['\n Wrong!', '\n Incorrect!', '\n Better Luck Next Time!', '\n Tough Luck!', '\n Not there yet!'] 

Hier ist ein weiteres Beispiel, das dir eine Idee geben könnte:

 import random country = ["Spain", "Sweden", "Netherlands", "Germany"] lastcountry = '' i = 0 while i <= 5: country = (random.choice(country)) if (country != lastcountry): i = i + 1 print (country) lastcountry = country 

Es erinnert sich an die letzte Option, die ausgewählt wurde.
Und wenn es eine neue Auswahl macht, sieht es aus, wenn es nicht dasselbe ist wie die Previeus-Auswahl.

  • Zufällige Interleave 2 Arrays In Python
  • Erstellen eines niemals wiederholenden zufälligen hexadezimalen Generators
  • Wie man eine Liste von zufälligen Integer-Vektor erstellt, deren Summe x ist
  • Auswählen einer Zufallszahl innerhalb einer Serie (Python)
  • Getrandbits erzeugt keine konstanten längenzahlen
  • Generiere mehrere unabhängige zufällige Ströme in Python
  • Python, generieren zufällige String von Klammern
  • Beste Weg, um eine Liste von Strings in Python zu randomisieren
  • Generieren zufällige Wörter
  • Wie kann ich zufällig einen Artikel aus einer Liste auswählen?
  • Making numpy zufällige zeichnet konsequent für Reproduzierbarkeit
  • Python ist die beste Programmiersprache der Welt.