Почему это печатает первый индекс?

#python #python-3.x #while-loop

#python #python-3.x #цикл while

Вопрос:

Работаю над этой проблемой для курса Python и ни за что на свете не могу понять, почему это не работает. Я бы предпочел, чтобы он выдал мне ошибку, чем напечатал 0!

Проблема выдает мне переменную x с показанной строкой, и мне нужно напечатать индекс первого использования y .

 x = 'Poisson geometry plays an important role in noncommutative geometry.'
y = 'u'

i = 0
while i == 0:
    for o in x:
        if o == y:
            print(y, "is first seen in index = ", y.index(o))
            i  = 1
  

Показанный код возвращает:

 u is first seen in index =  0
  

Комментарии:

1. y.index(o) находится в ветке, где o == y . Позиция любой строки сама по себе равна 0.

2. Хотя основная проблема решается приведенными ниже ответами, ваш while цикл также кажется ненужным. Обратите внимание, что он будет выполняться через весь for цикл во время первой итерации цикла while. Включение цикла while в том виде, в каком вы его написали, просто приводит к тому, что программа продолжает цикл вечно (даже после поиска по всей строке) в случае, когда совпадение не найдено.

3. И, как указывает @T4roy, вам также не нужен for цикл, если вы уже используете .index для поиска искомого символа.

Ответ №1:

Вы хотели индексировать x ? В этом случае используйте x.index(o) где выполняется поиск o в x .

 x = 'Poisson geometry plays an important role in noncommutative geometry.'
y = 'u'

i = 0
while i == 0:
    for o in x:
        if o == y:
            print(y, "is first seen in index = ", x.index(o))
            i  = 1
  

Однако правильный способ его записи — без цикла:

 x = 'Poisson geometry plays an important role in noncommutative geometry.'
y = 'u'

print(y, "is first seen in index = ", x.index(y))
  

вывод:

 u is first seen in index =  51
  

Комментарии:

1. Да, я вижу, что теперь вам не нужен цикл, но это было в разделе обучения «While», поэтому я пошел прямо туда, не думая о самом простом способе.

Ответ №2:

По сути, вы заставляете его искать 'u'.index('u')

y.index(o) должно быть x.index(o) для этого примера.

Ответ №3:

Вам нужно выполнить итерацию? Если вы сохраните свои первые 2 строки, а затем используете x.index(y) , вы получите тот же результат без использования while , for или if .

 x = 'Poisson geometry plays an important role in noncommutative geometry.'
y = 'u'
print(y, "is first seen in index = ", x.index(y))
  

Комментарии:

1. Похоже, вам не нужно повторять. Проблема в разделе «Пока» обучения, поэтому мой мозг пошел прямо туда.