Как мне заставить мой код повторяться в цикле?

#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 да, об этом не спрашивали, но я думаю, было бы неплохо указать, что его код не выполняет ожидаемого (и это довольно простая проблема, рассматриваемая во многих вводных курсах, поэтому я предполагаю, что он новый программист). Также его последнее предложение указывает на то, что он частично заметил проблему