У меня есть этот код, который должен сломаться, если он выполняет определенное условие, то есть когда функция isuniquestring (listofchar) возвращает True, но иногда она этого не делает, и она переходит в бесконечный цикл. Я попробовал распечатать условие, чтобы проверить, что что-то не так с условием, но даже когда условие напечатано верно, функция все еще продолжает работать, я понятия не имею, почему.Почему моя рекурсивная функция Python не сломается?
Одна из строк, которая генерирует бесконечный цикл, является «thisisazoothisisapanda», поэтому, когда я получаю список повторений ('thisisazoothisisapanda'), он переходит в бесконечный цикл.
был бы очень благодарен, если бы кто-то мог помочь спасибо!
Вот мой код:
def getunrepeatedlist(listofchar):
for ch in listofchar:
if isrepeatedcharacter(ch,listofchar):
listofindex = checkrepeatedcharacters(ch,listofchar)
listofchar = stripclosertoends(listofindex,listofchar)
print (listofchar)
print (isuniquestring(listofchar))
if isuniquestring(listofchar):
return listofchar
#print (listofchar)
else:
getunrepeatedlist(listofchar)
return listofchar
только для справки, эти функции я назвал
def isrepeatedcharacter(ch,list):
if list.count(ch) == 1 or list.count(ch) == 0:
return False
else:
return True
def checkrepeatedcharacters(ch,list):
listofindex=[]
for indexofchar in range(len(list)):
if list[indexofchar] == ch:
listofindex.append(indexofchar)
return listofindex
def stripclosertoends(listofindices,listofchar):
stringlength = len(listofchar)-1
if listofindices[0] > (stringlength-listofindices[-1]):
newstring = listofchar[:listofindices[-1]]
elif listofindices[0] < (stringlength-listofindices[-1]):
newstring = listofchar[listofindices[0]+1:]
elif listofindices[0] == (stringlength-listofindices[-1]):
beginningcount = 0
endcount = 0
for index in range(listofindices[0]):
if isrepeatedcharacter(listofchar[index],listofchar):
beginningcount += 1
for index in range(listofindices[-1]+1,len(listofchar)):
if isrepeatedcharacter(listofchar[index],listofchar):
endcount += 1
if beginningcount < endcount:
newstring = listofchar[:listofindices[-1]]
else:
#print (listofindices[0])
newstring = listofchar[listofindices[0]+1:]
#print (newstring)
return newstring
def isuniquestring(list):
if len(list) == len(set(list)):
return True
else:
return False
Что такое 'isuniquestring'? И, если на то пошло, все остальные функции, которые вы называете? – jedwards
uniquestring проверяет, имеет ли строка повторяющиеся символы, isrepeatedcharacter проверяет, является ли этот символ повторяющимся, и возвращает true или false, checkrepeatedcharacters проверяет индексы повторений этого символа и возвращает список, а stripclosertoends удаляет все повторяющийся символ, который ближе к любому концу строки. извините за начальную неопределенность, подумал, что будет слишком долго публиковать весь код здесь – user3881923
@ user3881923 Единственное, что приходит в голову здесь, это то, что либо «checkrepeatedcharacters» в какой-то момент начинают сравнивать сам символ, что означает 'stripclosertoend' never полоса одного символа. Или 'stripclosertoend' начинает работать некорректно в какой-то момент. Не видя кода для тех, маловероятно, что люди смогут вам помочь. – ljetibo