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



Pdf көрінісі
бет40/266
Дата03.03.2023
өлшемі7,86 Mb.
#170986
түріКнига
1   ...   36   37   38   39   40   41   42   43   ...   266
Байланысты:
Изучаем Python. Программирование игр, визуализация данных, веб-приложения ( PDFDrive )


Глава 4 • Работа со списками
блоки кода с отступами нескольких разных уровней. Эти уровни способствуют 
пониманию общей структуры программы.
Когда разработчики только начинают писать код, работа которого зависит 
от правильности отступов, в их коде нередко встречаются распространенные 
ошибки. Например, иногда они расставляют отступы в коде, в котором эти отступы 
не нужны, или наоборот — забывают ставить отступы в блоках, где это необходимо. 
Несколько примеров помогут вам избежать подобных ошибок в будущем и успеш-
но исправлять их, когда они встретятся в ваших программах.
Итак, рассмотрим несколько типичных ошибок при использовании отступов.
Пропущенный отступ
Строка после команды 
for
в цикле всегда должна снабжаться отступом. Если вы 
забудете поставить отступ, Python напомнит вам об этом:
magicians.py
magicians = ['alice', 'david', 'carolina'] 
for magician in magicians: 
 
print(magician)
Команда 
print
в точке 

должна иметь отступ, но здесь его нет. Когда Python ожи-
дает увидеть блок с отступом, но не находит его, появляется сообщение с указанием 
номера строки:
File "magicians.py", line 3 
print(magician) 

IndentationError: expected an indented block
Обычно для устранения подобных ошибок достаточно поставить отступ в строке 
(или строках), следующей непосредственно после команды 
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
в точке 

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


Перебор всего списка
67
элемента в списке, потому что в ней есть отступ. Вторая команда 
print
отступа 
не имеет, поэтому она будет выполнена только один раз после завершения цикла. 
Так как последним значением 
magician
является строка 
'carolina'
, второе сообще-
ние будет выведено только с этим именем:
Alice, that was a great trick! 
David, that was a great trick! 
Carolina, that was a great trick! 
I can't wait to see your next trick, Carolina.
Это пример 
логической ошибки
. Код имеет действительный синтаксис, но он не 
приводит к желаемому результату, потому что проблема кроется в его логике. 
Если некоторое действие должно повторяться для каждого элемента в списке, но 
выполняется только один раз, проверьте, не нужно ли добавить отступы в строке 
или нескольких строках кода.
Лишние отступы
Если вы случайно поставите отступ в строке, в которой он не нужен, Python со-
общит об этом:
hello_world.py
message = "Hello Python world!"
 
print(message)
Отступ команды 
print
в точке 

не нужен, потому что эта строка не подчинена 
предшествующей; Python сообщает об ошибке:
File "hello_world.py", line 2
print(message)
^
IndentationError: unexpected indent
Чтобы избежать непредвиденных ошибок с отступами, используйте их только там, 
где для этого существуют конкретные причины. В тех программах, которые вы 
пишете на этой стадии изучения Python, отступы нужны только в строках действий, 
повторяемых для каждого элемента в цикле 
for
.
Лишние отступы после цикла
Если вы случайно снабдите отступом код, который должен выполняться 
после
за-
вершения цикла, то этот код будет выполнен для каждого элемента. Иногда Python 
выводит сообщение об ошибке, но часто дело ограничивается простой логической 
ошибкой.
Например, что произойдет, если случайно снабдить отступом строку с выводом 
завершающего приветствия для группы фокусников?
magicians = ['alice', 'david', 'carolina'] 
for magician in magicians: 
print(magician.title() + ", that was a great trick!")


68

Достарыңызбен бөлісу:
1   ...   36   37   38   39   40   41   42   43   ...   266




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

    Басты бет