Вложенные операторы Кодирование на Python

Мне нужна помощь, что-то не так в моем коде, и я не могу понять, что ... я уверен, что это простая ошибка, просто я не могу найти ее в данный момент.

    string = raw_input("Enter String->")
    length = len(string)
    index = 0
    while index < length:
       if string(index) == 'a':
            print "Character found is a"
       index = length
       elif string(index) != 'a':
            print "Character", index"is not an a, sorry"

Ошибка, конечно, "неверный синтаксис"

Это новый код на данный момент

   string = raw_input("Enter String->")
   length = len(string)
   index = 0
   while index < length:
       if string[index] == 'a':
           print "Character found is a"
           index = length
       elif string[index] != 'a':
           print "Character", index,"is not an a, sorry"

отсюда, когда я запускаю код, он работает бесконечно, говоря: «символ 0 не является»

3-е редактирование

    string = raw_input("Enter String->")
    length = len(string)
    index = 0
    while index < length:
        if string[index] == 'a':
            index += 1
            print "Character found is a"
            break
        elif string[index] != 'a':
            print "Character", index, "is not an a, sorry"

person user1695993    schedule 06.10.2012    source источник
comment
В вашем третьем редактировании вы перемещаете индекс только в том случае, если символ «а». Как только вы нажмете символ, который не является «а», вы зациклитесь навсегда   -  person John La Rooy    schedule 06.10.2012


Ответы (6)


index = length перейдет прямо в конец строки. Вместо этого вам нужно использовать index += 1, если вы хотите проверить каждый символ

Обычно вы бы написали циклы так

string = raw_input("Enter String->")
for idx, c in enumerate(string):
   if c == 'a':
        print "Character found is a"
   else:
        print "Character", idx, "is not an a, sorry"

Что легче читать и значительно усложняет такие ошибки

person John La Rooy    schedule 06.10.2012
comment
@user1695993 user1695993, это потому, что вы закончили оператор if, когда сделали отступ в строке index = length - person John La Rooy; 06.10.2012

Доступ к индексу осуществляется с помощью [i], а не с помощью (i), что обозначает вызов функции.

Итак, вы должны сделать:

if string[index] == 'a':

Также обратите внимание на остальные ответы о других проблемах с вашим кодом.

person rantanplan    schedule 06.10.2012

У вас есть несколько проблем:

  • Используйте квадратные скобки для доступа к элементам в итерации: a[1],
  • Поднимите index = length на один уровень вверх. Это разрывает вашу петлю, находясь между if и elif.
  • print отсутствует одна запятая.

Лучший способ сделать это будет так:

string = raw_input("Enter String->")

for index, character in enumerate(string):
   if character == 'a':
        print "Character found is a"
        break
   else:
        print "Character", index, "is not an a, sorry"
person Blender    schedule 06.10.2012
comment
как бы я мог сделать это, используя тот же синтаксис, что и выше, если и операторы elif также без разрыва, спасибо. - person user1695993; 06.10.2012
comment
Я обозначил проблемы с вашим кодом в пунктах своего ответа. Поскольку вы изучаете Python, я не хочу писать для вас его код, поэтому попробуйте исправить его самостоятельно и опубликуйте, что вы сделали. - person Blender; 06.10.2012
comment
В своем коде вы никогда не меняете index. После вашего блока if добавьте index += 1, чтобы index увеличивал каждый цикл. - person Blender; 06.10.2012
comment
Кроме того, index = length эквивалентно break. - person Blender; 06.10.2012
comment
я все еще получаю тот же результат :( - person user1695993; 06.10.2012
comment
Отредактируйте свой вопрос еще раз с внесенными изменениями. Вероятно, вы сделали слишком большой отступ index += 1. - person Blender; 06.10.2012
comment
index += 1 находится не в том месте. Поместите его all после всего блока if и elif. Это должно происходить каждый раз, когда цикл зацикливается. - person Blender; 06.10.2012
comment
в выводе, хотя он останавливается, когда находит a, возможно, это было то, что он хотел, в любом случае спасибо вам за все, спасибо всем за всю потрясающую помощь - person user1695993; 06.10.2012

print "Character", index"is not an a, sorry"

Должен прочесть

print "Character " + str(index) + " is not an a, sorry"
person Jakob Bowyer    schedule 06.10.2012

Вам нужно увеличивать index после каждого цикла, иначе цикл while будет работать вечно по одному и тому же индексу:

string = raw_input("Enter String->")
length = len(string)
index = 0
while index < length:
    if string[index] == 'a':
       print "Character found is a"
       break
    else:
       print "Character" + str(index) + " is not an a, sorry"
       index += 1

Тем не менее, вы должны изучить предложение @gnibbler и использовать его вместо цикла while для этой конкретной цели.

person K Z    schedule 06.10.2012

Во-первых, очень быстрый совет — использование переменных с именами типа «строка» приведет к головной боли.

Итак, код, который вы написали, говорит мне, что вам нужно видеть, что каждый символ позиция предшествует первому 'a', но не его фактическое значение, которое вам нужно знать находится ли «а» в строке, и что вас вообще не волнует ни один символ после первого «а». Эти цели кажутся мне немного маловероятными, поэтому я подозреваю, что ваш реальный вопрос немного отличается от того, что вы спросили, как это сделать.

Я действительно вижу здесь два основных вопроса:

<сильный>1. Как мне найти индекс первой буквы «а» в заданной строке? Если это ваша основная задача, все, что вам нужно сделать, это

response = raw_input('Prompt: ')
index_a = response.find('a')

foo.find(bar) даст вам индекс бара, или -1, если его вообще нет в foo. Но если вам все равно, где находится бар, и вам просто нужно убедиться, что он там, используйте вместо этого bar in foo.

<сильный>2. Как проверить каждый символ в строке? Во многих случаях Python не заставляет вас строить итерацию — он дает вам структуру for, которая делает всю черновую работу за вас. Этот пример позволит вам отслеживать предварительно сопоставленные позиции символов, если вам это действительно нужно, но обратите внимание, что counter не имеет никакого отношения к управлению потоком:

response = raw_input('Prompt: ')
counter = 0
for r in response:
    if r is 'a':
        print('We found it.')
        break
    else:
        print('Not ' + str(counter))
        counter += 1
person toxotes    schedule 06.10.2012