Okay, ich habe an einem Code gearbeitet, der alle möglichen Kombinationen der eingegebenen verschlüsselten Buchstaben enthält. Hier ist es:Duplikate landen trotz "if statement" in der Liste
import random, math
words = []
original = raw_input("What do you need scrambled? ")
def word_scramble(scrambled):
original_length = len(scrambled)
loops = math.factorial(original_length)
while loops > 0:
new_word = []
used_numbers = []
while len(new_word) < original_length:
number = random.randint(0, original_length - 1)
while number in used_numbers:
number = random.randint(0, original_length - 1)
while number not in used_numbers:
used_numbers.append(number)
new_word.append(scrambled[number])
if new_word not in words:
words.append(("".join(str(x) for x in new_word)))
loops -= 1
word_scramble(original)
print ("\n".join(str(x) for x in words))
Das Problem ist, es gibt immer noch Duplikate, obwohl es nicht soll. Zum Beispiel kann ich "imlk" eingeben und bekomme manchmal zweimal "Milch", während ich immer noch nur 24 Permutationen habe, was bedeutet, dass einige Permutationen ausgeschlossen werden. Das:
if new_word not in words:
words.append(("".join(str(x) for x in new_word)))
loops -= 1
soll verhindern, dass Duplikate in der Liste sind. Ich bin mir also nicht wirklich sicher, was das Problem ist. Und tut mir leid, dass der Haupttitel der Frage so vage/seltsam war. Ich war mir nicht sicher, wie ich es besser ausdrücken sollte.
Die Länge ist standardmäßig die Länge des Iterablen. So ist 'len (original)' nicht erforderlich. – SilentMonk
@SilentMonk: Guter Fang. Vielen Dank. –
Standardbibliothek FTW. – u8y7541