Мне нужно понять логику Python для операторов / while. Python 3.6 - PullRequest
0 голосов
/ 04 мая 2018

Ниже у меня есть код:

student_names = ["Mark", "Katarina", "Jessica"]
for name in student_names:
    print("Student name is {0}".format(name))

Этот код напечатает:

Student name is Mark
Student name is Katarina
Student name is Jessica

ОДНАКО, если я изменю name в операторе for на i или x или student, например:

student_names = ["Mark", "Katarina", "Jessica"]
for i in student_names:
    print("Student name is {0}".format(name))

Распечатывает:

Student name is Jessica
Student name is Jessica
Student name is Jessica

Мне нужна помощь в понимании того, как python понимает, что «имя» относится к именам в списке. Откуда он это знает?

Ответы [ 3 ]

0 голосов
/ 04 мая 2018

Python не знает, что «имя» относится к именам в списке, с которыми он будет работать, и к x, но вы должны изменить его как для, так и для печати

    student_names = ["Mark", "Katarina", "Jessica"]
for i in student_names:
    print("Student name is {0}".format(i))

но я думаю, что вы меняли его только в части

0 голосов
/ 04 мая 2018

Вы, вероятно, изменили бы name на i в элементе for в итерируемом операторе, но забыли изменить name на i в форматированном операторе печати и запустить этот новый цикл for сразу после первый.

Обратите внимание на тонкие различия между i и name в каждом из следующих трех циклов.

В

student_names = ["Mark", "Katarina", "Jessica"]
for name in student_names:
    print("Student name is {0}".format(name))

for i in student_names:
    print("Student name is {0}".format(name))

for i in student_names:
    print("Student name is {0}".format(i))

Из:

Student name is Mark
Student name is Katarina
Student name is Jessica
Student name is Jessica
Student name is Jessica
Student name is Jessica
Student name is Mark
Student name is Katarina
Student name is Jessica

Обратите внимание, что средний цикл печатает только фамилию в вашем списке имен. Это потому, что name последний раз был присвоен последнему элементу в student_names, но он используется для форматирования вместо i в среднем цикле.

В цикле Python вы назначаете переменную для итерации по элементам итерируемого объекта. Общие итерируемые типы включают list, str, dict и tuple. Можно использовать любой объект с методом __iter__.

В вашем примере вы перебираете list, который содержит три элемента. Это означает, что ваш цикл for будет повторяться три раза, по одному разу для каждого элемента в вашем списке. Если вы также хотите отслеживать индекс для каждого элемента в вашем списке, вы можете использовать enumerate.

В

for i, name in enumerate(student_names):
    print('Student {0}: {1}'.format(i, name))

Из:

Student 0: Mark
Student 1: Katarina
Student 2: Jessica

Здесь первая переменная i присваивается индексу элемента, который соответствует name. Старайтесь избегать добавления или удаления элементов из всего, что вы повторяете, поскольку вы можете столкнуться с неожиданными результатами.

В

for i, name in enumerate(student_names):
    student_names.remove(name)
    print("Student {0}: {1}".format(name))

Из:

Student 0: Mark
Student 1: Jessica

Существует множество скучных объяснений того, почему это происходит, но лучше избегать удаления или добавления элементов в то, что вы можете повторять.

0 голосов
/ 04 мая 2018

«Мне нужна помощь в понимании того, как python понимает, что« имя »относится к именам в списке. Откуда оно это знает?»

Это не правда. Я поставил ваш код с «i» и «x» вместо «name», и он распечатал то же самое.

Для Python не имеет значения, как называется ваша переменная. И я и х делают то же самое, что и имя.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...