Мой код работает, но иногда попадает в бесконечный цикл

#python

Вопрос:

Поэтому я получил задание из школы, что код должен выбрать строку, удалить первый и последний индекс, затем рандомизировать средние буквы и вернуть строку с прикрепленным первым и последним индексом. Слово должно содержать не менее 4 символов и не должно возвращать исходную строку. Это колдовство и все такое, но после нескольких попыток произнести слово из 4 букв оно попадает в бесконечный цикл, и я не могу понять, почему. Это код на python. Спасибо вам за вашу помощь. Кроме того, в моем лаге есть некоторые переменные, которые не должны быть проблемой…просто чтобы уточнить странные имена переменных.

 import random n=0 while nlt;4:  slovo=input('Zadajte vase slovo: ')  n=len(slovo)  l=[] def shufle(slovo,l):  for i in range(len(slovo)):  if i==0:  continue  if i==len(slovo)-1:  continue  else:  l.append(slovo[i])  random.shuffle(l)  while True:  shufle(slovo,l)  s=slovo[0]  for i in l:  s =i  s =slovo[-1]  if s==slovo:  continue  elif len(s)!=len(slovo):  continue  else:  print(s)  break  

Комментарии:

1. Если вы получаете то же слово, что и исходное, с первой попытки, вы звоните shufle снова с существующим l списком, к которому добавляете новые буквы. Список просто становится длиннее, поэтому elif len(s)!=len(slovo): будет Правдой, что вы continue и будете бесконечно расширять свой список. Не переходите l к своей функции, она не имеет никакого отношения к своим параметрам. Просто создайте перетасованный список внутри своей функции и return он.

Ответ №1:

Вот совет: если ваша функция всегда ожидает одного и того же ввода для одного из своих параметров, то этот параметр, вероятно, не нужен. Это относится к передаче пустых списков или аналогичных объектов функциям. Была также проверка, имеют ли s и слово одинаковый размер, который не нужен, поэтому я удалил его. Попробуй это:

 import random n=0 while nlt;4:  slovo=input('Zadajte vase slovo: ')  n=len(slovo)  def shufle(slovo):  l = []  for i in range(len(slovo)):  if i == 0:  continue  if i == len(slovo)-1:  continue  else:  l.append(slovo[i])  random.shuffle(l)  return l  while True:  l = shufle(slovo)  s = slovo[0]  for i in l:  s  = i  s  = slovo[-1]  if s == slovo:  continue  else:  print(s)  break  

Комментарии:

1. Спасибо, что теперь это работает.

2. @Eidam Пожалуйста, примите мой ответ, если вы нашли его полезным