Код на 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 шт):
У вас слишком много всего. По-моему надо подойти проще:
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 переносить не надо), тогда каждый раз вы будете считывать строку до тех пор, пока она не окажется палиндромом, в вашем же варианте, вы считаете строку и если она не палиндром будете бесконечно ее проверять на палиндромность, но откуда же ей стать палиндромом, если она не меняется? :)
надо создать кнопку со ссылкой на команду exit(), это команда на выход из программы. Но если не в окне, а в консоли, тогда создаем такой код:
print("1-выход\n2-Отказ")
ex = int(input("выход"))
if ex == 1:
exit()
else:
print("Отказ")