#python
#python
Вопрос:
str = input("Enter the String")
l = len(str)
p = l-1
index = 0
while index < p:
if str[index] == str[p]:
index = index 1
p = p-1
print("String is a Palindrome")
break
else:
print("String is not a Palindrome")
break
мне это нужно, чтобы иметь возможность спрашивать пользователя, хочет ли он повторить процесс или нет, но я не могу понять это, потому что каждый раз, когда я пытаюсь, он повторяет только строку «string не является палиндромом»
Комментарии:
1. не используйте str в качестве имени переменной. потому что это встроенное имя из python (для создания строки)
2. Добавьте свою попытку заставить его повторяться.
3. @ppwater укажите причину: str не должен использоваться, потому что это встроенное имя из python (для создания строки)
4. В общем: если вы заканчиваете каждый путь кода в итерации,
break
он не будет зацикливаться.
Ответ №1:
Вы ищете это:
while True:
user_input = input("Enter the String")
l = len(user_input)
p = l-1
index = 0
while index < p:
if user_input[index] == user_input[p]:
index = index 1
p = p-1
print("String is a Palindrome")
break
else:
print("String is not a Palindrome")
break
gonext = input("continue?(no to exit) ")
if gonext == "no":
break
elif gonext == "yes":
continue
добавьте операторы ввода и if для запроса пользователя и while True для repeat .
и str является встроенным из Python, поэтому не используйте его в качестве имени переменной.
Комментарии:
1. Было бы лучше заменить имя переменной на что-то вроде,
user_input
чтобы избежать путаницы со встроенными типами2. Кроме того, я думаю, что логика по-прежнему неверна. «anna», «kayak», «civic» должны быть распознаны как палиндромы.
3. да @dbrrt, но ОП сказал, что мне это нужно, чтобы иметь возможность спросить пользователя, не хочет ли он повторить процесс, поэтому я просто исправил повторяющуюся часть
4. Достаточно справедливо 🙂 , теперь, по крайней мере, он повторяет процесс
5. @dbrrt ваш пример правильно указан как палиндромы, но логика по-прежнему неверна. проверьте также мой ответ. проблемы возникают при простой проверке первого и последнего символа (adsa классифицируется как палиндром)
Ответ №2:
Если вы хотите, чтобы ваш код мог повторять любую задачу, вам нужно обернуть его в цикл. Также вы не должны использовать str
в качестве имени для переменной, потому что это имя используется в python для создания новой строки.
одним из возможных решений было бы
repeat = True
while repeat:
# your code
repeat = input("repeat? (y for yes, everything else is tretaed as no)n") == "y"
Кроме того, я хочу отметить, что ваш код не выполняет то, что вы ожидаете.
Палиндром определяется как строка, которая читается в обратном направлении так же, как и в прямом.
В вашем коде вы на самом деле просто проверяете, совпадают ли первый и последний символ. В if
ветке проблема не решена. Положительный результат может быть получен только в конце цикла.
Кроме того, вы не покрываете пустую строку (вообще не выводите), что я бы рассматривал как палиндром.
некоторые случаи, которые вы могли бы протестировать:
- ada -> исправить положительный
- asd -> исправить отрицательный
- asda -> ложное срабатывание
- «» -> вообще ничего — [строка арбитража] a -> положительный?
Правильная реализация проверки палиндрома была бы примерно такой:
user_input = input("Enter the Stringn")
isPalindrome = True
for i in range(len(user_input)//2): # check till center from both ends
if user_input[i] != user_input[-i-1]: # index -1 is last character
isPalindrome = False
break
if isPalindrome:
print("String is a Palindrome")
else:
print("String is not a Palindrome")
Комментарии:
1. Я думал, вопрос в том, как повторить, а не как исправить логику?
2. @ppwater да, об этом не спрашивали, но я думаю, было бы неплохо указать, что его код не выполняет ожидаемого (и это довольно простая проблема, рассматриваемая во многих вводных курсах, поэтому я предполагаю, что он новый программист). Также его последнее предложение указывает на то, что он частично заметил проблему