Книга «Изучаем Python»



Pdf көрінісі
бет44/238
Дата07.01.2022
өлшемі7,86 Mb.
#18670
түріКнига
1   ...   40   41   42   43   44   45   46   47   ...   238
ПРИМЕЧАНИЕ

Если в вашей программе произошла ошибка индексирования и вы не знаете, как с ней справиться, 

попробуйте вывести список или хотя бы его длину . Возможно, ваш список выглядит совсем не так, 

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

ское состояние списка или точное количество элементов в нем поможет вам выявить логические 

ошибки такого рода .



УПРАЖНЕНИЯ

3-11 . Намеренная ошибка: если ни в одной из предшествующих программ вы еще не стал-

кивались  с  ошибками  индексирования,  попробуйте  создать  такую  ошибку  искусственно . 

Измените индекс в одной из программ, чтобы вызвать ошибку индексирования . Не забудьте 

исправить ошибку перед тем, как закрыть программу .



Итоги    61

Итоги


В этой главе вы узнали, что представляют собой списки и как работать с отдельны-

ми элементами в списках. Вы научились определять списки, добавлять и удалять 

элементы, выполнять сортировку (постоянную или временную для отображения). 

Также вы узнали, как определить длину списка и как избежать ошибок индекси-

рования при работе со списком.

В главе 4 рассматриваются приемы более эффективной работы со списками. Пере-

бор всех элементов списка всего в нескольких строках кода, даже если список со-

держит тысячи или миллионы элементов, сокращает объем программы.




4

Работа со списками

В главе 3 вы научились создавать простые списки и работать с отдельными элемен-

тами списков. В этой главе вы узнаете, как перебрать весь список всего в несколь-

ких строках кода (независимо от длины списка). Механизм перебора позволяет 

выполнить одно действие или набор действий с каждым элементом в списке. С его 

помощью вы сможете эффективно работать со списками любой длины, даже со-

стоящими из тысяч и миллионов элементов.

Перебор всего списка

Типичная задача из области программирования — перебрать все элементы списка 

и выполнить с каждым элементом одну и ту же операцию. Например, в компью-

терной игре все экранные объекты могут смещаться на одинаковую величину, 

или в списке чисел к каждому элементу может применяться одна и та же стати-

стическая операция. А может быть, вам нужно вывести все заголовки из списка 

статей на  сайте. В ситуациях, требующих применения одного действия к каждому 

элементу списка, можно воспользоваться циклами 

for

.

Допустим, имеется список с именами фокусников, и вы хотите вывести каждое 



имя из списка. Конечно, можно обратиться к каждому элементу по отдельности, 

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

сведется к однообразным повторениям. Во-вторых, при любом изменении длины 

списка в программу придется вносить изменения. Цикл 

for

 решает обе проблемы: 



Python будет следить за всеми техническими деталями в своей внутренней реали-

зации.


В следующем примере цикл 

for


 используется для вывода имен фокусников:

magicians.py

magicians = ['alice', 'david', 'carolina'] 



for magician in magicians: 

print(magician)



Все начинается с определения списка , как и в главе 3. В точке  определяется 

цикл 


for

. Эта строка приказывает Python взять очередное имя из списка и сохра-

нить его в переменной 

magician


. В точке  выводится имя, только что сохранен-

ное в переменной 

magician

. Затем строки  и  повторяются для каждого имени 




Перебор всего списка    63

в списке. Этот код можно описать так: «Для каждого фокусника в списке вывести 

его имя». Результат представляет собой простой перечень имен из списка:

alice 


david 

carolina


Подробнее о циклах

Концепция циклов очень важна, потому что она представляет один из основных 

способов автоматизации повторяющихся задач компьютером. Например, в простом 

цикле, использованном в 

magicians .py

, Python сначала читает первую строку цикла:

for magician in magicians:

Эта строка означает, что нужно взять первое значение из списка 

magicians

 и со-


хранить его в переменной 

magician


. Первое значение в списке — 

'alice'


. Затем 

Python читает следующую строку:

    print(magician)

Python выводит текущее значение 

magician

, которое все еще равно 

'alice'

. Так 


как в списке еще остались другие значения, Python возвращается к первой строке 

цикла:


for magician in magicians:

Python берет следующее значение из списка — 

'david'

 — и сохраняет его в 

magician

Затем выполняется строка:



    print(magician)

Python снова выводит текущее значение 

magician

; теперь это строка 

'david'

. Весь 


цикл повторяется еще раз с последним значением в списке, 

'carolina'

. Так как 

других значений в списке не осталось, Python переходит к следующей строке в про-

грамме. В данном случае после цикла 

for


 ничего нет, поэтому программа просто 

завершается.

Помните, что все действия повторяются по одному разу для каждого элемента 

в списке независимо от их количества. Если список содержит миллион элементов, 

Python повторит эти действия миллион раз — обычно это происходит очень быстро.

Также помните, что при написании собственных циклов 

for

 временной переменной 



для текущего значения из списка можно присвоить любое имя. Однако на практи-

ке рекомендуется выбирать осмысленное имя, описывающее отдельный элемент 

списка. Несколько примеров:

for cat in cats:

for dog in dogs:

for item in list_of_items:

Выполнение этого правила поможет вам проследить за тем, какие действия выпол-

няются с каждым элементом в цикле 

for

. В зависимости от того, какое число ис-




64    Глава 4  •  Работа со списками

пользуется — одиночное и множественное, вы сможете понять, работает ли данная 

часть кода с отдельным элементом из списка или со всем списком.

Более сложные действия в циклах for

В цикле 

for


 с каждым элементом списка может выполняться практически любое 

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

фокусника отдельное сообщение:

magicians = ['alice', 'david', 'carolina']

for magician in magicians:

    print(magician.title() + ", that was a great trick!")



Единственное отличие этого кода от предыдущего заключается в том, что в точке  

для каждого фокусника строится сообщение с его именем. При первом проходе 

цикла переменная 

magician


 содержит значение 

'alice'


, поэтому Python начинает 

первое сообщение с имени 

'Alice'

. При втором проходе сообщение будет начи-

наться с имени 

'David'


, а при третьем — с имени 

'Carolina'

:

Alice, that was a great trick! 



David, that was a great trick! 

Carolina, that was a great trick!

Тело цикла 

for


 может содержать сколько угодно строк кода. Каждая строка с на-

чальным отступом после строки 

for magician in magicians

 считается находящейся 

в цикле и выполняется по одному разу для каждого значения в списке. Таким об-

разом, с каждым значением в списке можно выполнить любые операции на ваше 

усмотрение.

Включим в сообщение для каждого фокусника вторую строку:

magicians = ['alice', 'david', 'carolina'] 

for magician in magicians: 

    print(magician.title() + ", that was a great trick!")  

    print("I can't wait to see your next trick, " + magician. 



             title() + ".\n")

Так как обе команды 

print

 снабжены отступами, каждая строка будет выполнена 



по одному разу для каждого фокусника в списке. Символ новой строки (

"\n"


во второй команде print  вставляет пустую строку после каждого прохода цик-

ла. В результате будет создан набор сообщений, аккуратно сгруппированных для 

каждого фокусника в списке:

Alice, that was a great trick! 

I can't wait to see your next trick, Alice. 

David, that was a great trick! 

I can't wait to see your next trick, David. 

Carolina, that was a great trick! 

I can't wait to see your next trick, Carolina.




Перебор всего списка    65

Тело цикла 

for

 может содержать сколько угодно строк кода. На практике часто 



требуется выполнить в цикле 

for


 несколько разных операций для каждого эле-

мента списка.

Выполнение действий после цикла for

Что происходит после завершения цикла 

for

? Обычно программа выводит сводную 



информацию или переходит к другим операциям.

Каждая строка кода после цикла 

for

, не имеющая отступа, выполняется без по-



вторения. Допустим, вы хотите вывести сообщение для всей группы фокусников 

и поблагодарить их за превосходное представление. Чтобы вывести общее сообще-

ние после всех отдельных сообщений, разместите его после цикла 

for


 без отступа:

magicians = ['alice', 'david', 'carolina'] 

for magician in magicians: 

    print(magician.title() + ", that was a great trick!")  

    print("I can't wait to see your next trick, " + magician.title() + ".\n")

    


print("Thank you, everyone. That was a great magic show!")

Первые две команды 

print


 повторяются по одному разу для каждого фокусника 

в списке, как было показано ранее. Но поскольку строка  отступа не имеет, это 

сообщение выводится только один раз:

Alice, that was a great trick! 

I can't wait to see your next trick, Alice. 

David, that was a great trick! 

I can't wait to see your next trick, David. 

Carolina, that was a great trick! 

I can't wait to see your next trick, Carolina. 

Thank you, everyone. That was a great magic show!

При обработке данных в циклах 

for


 завершающее сообщение позволяет подвести 

итог операции, выполненной со всем набором данных. Например, цикл 

for

 может 


инициализировать игру, перебирая список персонажей и изображая каждого пер-

сонажа на экране. После цикла выполняется блок без отступа, который выводит 

кнопку 

Начать игру

 после того, как все персонажи появятся на экране.

Предотвращение ошибок с отступами

В Python связь одной строки кода с предшествующей строкой обозначается от-

ступами. В приведенных примерах строки, выводившие сообщения для отдельных 

фокусников, были частью цикла, потому что они были снабжены отступами. При-

менение отступов в Python сильно упрощает чтение кода. Фактически отступы 

заставляют разработчика писать аккуратно отформатированный код с четкой 

визуальной структурой. В более длинных программах Python могут встречаться 




66    Глава 4  •  Работа со списками

блоки кода с отступами нескольких разных уровней. Эти уровни способствуют 

пониманию общей структуры программы.

Когда  разработчики  только  начинают  писать  код,  работа  которого  зависит 

от  правильности отступов, в их коде нередко встречаются распространенные 

ошибки. Например, иногда они расставляют отступы в коде, в котором эти отступы 

не нужны, или наоборот — забывают ставить отступы в блоках, где это необходимо. 

Несколько примеров помогут вам избежать подобных ошибок в будущем и успеш-

но исправлять их, когда они встретятся в ваших программах.

Итак, рассмотрим несколько типичных ошибок при использовании отступов.

Пропущенный отступ

Строка после команды 

for

 в цикле всегда должна снабжаться отступом. Если вы 



забудете поставить отступ, Python напомнит вам об этом:



Достарыңызбен бөлісу:
1   ...   40   41   42   43   44   45   46   47   ...   238




©emirsaba.org 2024
әкімшілігінің қараңыз

    Басты бет