Я думаю, что у вас есть бесконечный l oop.
newchar = random.choice(word)
, случайным образом выбирающий букву в word
.
Если word
содержит повторяющиеся буквы, то newword
будет содержать все буквы в word
до того, как ваш for i in range(len(word))
l oop будет завершен. Это создаст бесконечное число l oop с while (newchar in newword)
Рассмотрим «перец»:
Представьте, что в первых трех итерациях вы выбрали «p», «r» и «e». for i
l oop еще не завершено, но newchar = random.choice(word)
всегда будет выбирать символ уже в newword
Я бы попытался создать список букв в слове, которое вы скремблируете, и затем случайным образом удаляя одну букву за раз из этого списка, пока она не станет пустой.
========================= ============================================
Позднее редактирование, но хотел покажи 1 способ сделать это вручную ....
import random
randomwords = ['pepper', 'lightning', 'bored', 'teeth',
'floor', 'special', 'coffee', 'dopamine']
shuffledwords = []
for j in range(len(randomwords)):
word = randomwords[j] # original word to scramble
newword = '' #scrambled word
num_letters = len(word) #original number of letters in word
for i in range(num_letters):
# pick raandom letter from those still in word
curr_idx = random.randrange(len(word))
newchar = word[curr_idx]
#print (newchar)
# remove chosen letter from original word
if curr_idx == 0:
word = word[1:]
elif curr_idx == len(word)-1:
word = word[0:-1]
else:
word = word[0:curr_idx] + word[curr_idx+1:]
# Add chosen letter to scrambled word
newword = newword[:i]+str(newchar)+newword[i:]
#print(newword)
shuffledwords.append(newword)