Код на Python уходит в бесконечный цикл

def reverse(text):
    return text[::-1]
def is_palindrome(text):
    return text == reverse(text)
something = input('Введите текст: ')
something = something.lower()
forbidden = (',', '.', '!', '?', ';', ':', '-', ' ')
working = True
for i in something:
    if i in forbidden:
        something = something.replace(i, '')
while working:
    if (is_palindrome(something)):
        print("Да, это палиндром")
        working = False
    else:
        print("Нет, попробуй еще раз")     
print('Конец!')

Это дз из книги «Укус Питона», в котором я хотел вставить цикл while, чтобы не запускать програму каждый раз, когда вводится не палиндром, но она впадает в бесконечный цикл. Как это можно решить?


Ответы (3 шт):

Автор решения: Victor VosMottor

У вас слишком много всего. По-моему надо подойти проще:

forbidden = (',', '.', '!', '?', ';', ':', '-', ' ')

while True:
    smth = input('Введите текст: ')

    for i in forbidden:
        smth = smth.replace(i, '')

    if smth == smth[::-1]:
        print('Да, это палиндром')
        break
    else:
        print('Нет, попробуй еще раз')

print('Конец!')
→ Ссылка
Автор решения: Владислав Харламов

Вам нужно этот блок кода:

something = input('Введите текст: ')
something = something.lower()
forbidden = (',', '.', '!', '?', ';', ':', '-', ' ')
working = True
for i in something:
    if i in forbidden:
        something = something.replace(i, '')

перенести как:

while working:
    something = input('Введите текст: ')
    something = something.lower()
    forbidden = (',', '.', '!', '?', ';', ':', '-', ' ')
    for i in something:
        if i in forbidden:
            something = something.replace(i, '')

(разве что working = True переносить не надо), тогда каждый раз вы будете считывать строку до тех пор, пока она не окажется палиндромом, в вашем же варианте, вы считаете строку и если она не палиндром будете бесконечно ее проверять на палиндромность, но откуда же ей стать палиндромом, если она не меняется? :)

→ Ссылка
Автор решения: Daniil Frolov

надо создать кнопку со ссылкой на команду exit(), это команда на выход из программы. Но если не в окне, а в консоли, тогда создаем такой код:

print("1-выход\n2-Отказ")
ex = int(input("выход"))

 if ex == 1:
      exit()
 else:
      print("Отказ")
→ Ссылка