Добавил:
Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Программирование на языке Python. Учебное пособие.pdf
Скачиваний:
0
Добавлен:
07.09.2026
Размер:
1 Мб
Скачать
☆
Вывод:
Пример вложенного цикла for:
for i in range(1, 3):
print(i)
for letter in ['a', 'b', 'c']:
print(letter) >> 1 >> 'a' >> 'b' >> 'c' >> 2 >> 'a' >> 'b' >> 'c'
Следующий пример показывает суммирование чисел из разных списков.
list1 = [ 1 , 2 , 3 , 4 ]
list2 = [ 5 , 6 , 7 , 8 ]
added_up = []
for i in list1:
for j in list2:
added_up.append(i + j)
print (added _up) >> [6, 7, 8, 9, 7, 8, 9, 10, 8, 9, 10, 11, 9, 10, 11, 12]
61
Пример вложенного цикла while. Программа формирует и выводит таб-
лицу умножения:
i = 1 # инициализация параметра внешнего цикла while i < 10: # условие внешнего цикла j = 1 # инициализация параметра вложенного цикла while j < 10: # условие вложенного цикла print(i, '*', j, '=', i * j, end='\t') # вывод j += 1 # изменение параметра вложенного цикла i += 1 # изменение параметра внешнего цикла print() # переход на новую строку
Пример комбинированного вложения циклов for и while. Не имеет прин-
ципиального значения, какой из циклов является внутренним и внешним. Про­грамма будет печатать цифры 0-4 до тех пор, пока пользователь не введет n.
while input('Continue y or n?') != 'n': for i in range(1, 5):
print(i) >> Continue y or n?y >> 1 >> 2 >> 3 >> 4 >> 5 >> Continue y or n?y >> 1 >> 2 >> 3 >> 4 >> 5 >> Continue y or n?n >>>
Подводя итог сказанному, отметим, что хотя while – простой универ­сальный цикл, он довольно медленный, а вот цикл for несколько сложнее, ме­нее универсальнее, но гораздо быстрее цикла while и в отличие от него не требует никаких условий.
62

Настройка функции print()

Подробнее рассмотрим различные способы вызова print(), иначе гово-
ря, познакомимся с сигнатурой функции. Сигнатура – формальное описание типов аргументов и типа возвращаемого значения функции.
По умолчанию в функции print() предусмотрены дополнительные ар-
гументы, которые выводятся через пробел, а затем переводится строка. Но если использовать параметры sep (разделитель) и end (окончание), то функция print() будет работать по-другому.
В частности, с помощью параметра sep можно указать отличный от про-
бела разделитель:
print("Mon","Tue","Wed","Thu","Fri","Sat","Sun",sep="-")
>> Mon-Tue-Wed-Thu-Fri-Sat-Sun
print(1, 2, 3, sep="//")
>> 1//2//3
С помощью параметра end можно указать, что делать после вывода стро-
ки. По умолчанию осуществляется перевод строки. Но можно указать любой другой символ:
print(10, end="")
>> 10
Переход на новую строку обозначается символом '\n'. В этом случае ни-
каких изменений в работе функции print не наблюдается, так как функция по умолчанию итак осуществляет перевод строки:
print(10, end='\n') >> 10 >>
Если использовать символ '\n\n', то произойдет пропуск еще одной до-
полнительной строки:
print(10, end='\n\n') >> 10
>>
63
Полный синтаксис print выглядит так:
print(object1, object2, . .., sep=' ', end='\n', file=sys.stdout, flush=False),
где
o *objects – объект/объекты вывода; o sep – разделитель между объектами. В качестве своего значения можно
передавать строку или None (по умолчанию пробел " ");
o end – символ в конце строки (по умолчанию перенос строки \n); o file – file-like объект [поток] (по умолчанию sys.stdout); o flush – принудительный сброс потока [работает с версии Python 3.3] (по
умолчанию False).
Функция print выводит значения в sys.stdout по умолчанию на экран. Ниже приводятся примеры использования функции print при выводе па-
раметров разных типов:
print('one', 'two', 'three') # str
>> one two three
print(45) # int
>> 45
print(3.14) # float
>> 3.14
print(True) # bool
>> True
print([1, 2, 3]) # list
>> [1, 2, 3]
print({'red', 'green', 'blue'}) # set
>> {'red', 'green', 'blue'}
print({'name': 'Alex', 'age': 37}) # dict
>> {'name': 'Alex', 'age': 37}
print((1, 2, 3)) # tuple
>> (1, 2, 3)
64
Примеры использования параметра sep:
print('hello', 'world', sep=None) >> hello world
print('hello', 'world', sep=' ') >> hello world
print('hello', 'world') >> hello world
Для того чтобы вывести аргументы в столбик, используют символ экра-
нирования: \ – обратный слэш.
print('hello', 'world', sep='\n') >> hello >> world
В приведенном ниже примере экранируют кавычки вокруг No, чтобы ин-
терпретатор распознал их как часть строки, а не начало или конец строки:
print("Alex's mom said \"No\"") >> Alex's mom said "No"
В этом примере не пришлось экранировать одинарную кавычку (апостроф
's), потому что сама строка заключена в двойные кавычки. Если бы строка была заключена в одинарные кавычки, то символ экранирования нужен был бы перед апострофом, но не перед двойными кавычками.
При выводе символа обратного слеша работает то же правило: как и любой
специальный символ, его надо экранировать:
print("\\") >> \
В связи с приведенным выше примером с использованием различного вида
кавычек ("Alex's mom said \"No\"") необходимо понять, что такое строка и какую роль играют кавычки.
Строкой считается все, что находится внутри кавычек, включая пробел,
один символ или вообще отсутствие символов.
65
В отношении кавычек действует простое правило: если строка началась с двойной кавычки, то и закончиться она должна тоже двойной кавычкой, а одинарные кавычки внутри становятся частью строки.
Верно и обратное: если внутри строки нужно использовать двойные ка­вычки, то саму строку надо делать в одинарных. Причем количество кавычек внутри самой строки неважно.
Помимо экранированных символов существуют и экранированные по-
следовательности.
Допустим, надо вывести на экран следующий текст:
– Are you hungry?
– Yes!
Если для этого воспользоваться следующим программным кодом:
print("- Are you hungry?- Yes!")
>> - Are you hungry?- Yes!,
то результат получится не такой, как задумывался.
Чтобы получить желаемый результат, необходимо сделать перевод строки после вопросительного знака, для чего можно воспользоваться символом \n:
print("- Are you hungry?\n- Yes!") >> - Are you hungry? >> - Yes!
Символ \n – это пример экранированной последовательности (escape
sequence). Такие последовательности еще называют управляющими конструк­циями.
При работе с символом перевода необходимо руководствоваться следую-
щими правилами.
1. Неважно, что стоит перед или после \n: символ или пустая строка. Пе-
ревод выполнится в любом случае.
2. Строка может содержать только \n:
print('John Kennedy') # Строка с текстом
print("\n") # Строка с невидимыми символами перевода строки
print('Hemingway') # Строка с текстом
66
>> John Kennedy
>> Hemingway
3. В коде последовательность \n выглядит как два символа, но с точки
зрения интерпретатора – это один специальный символ.
4. Если нужно вывести \n как текст (два отдельных печатных символа), то можно воспользоваться экранированием – добавить еще один \ в начале. По­следовательность \\n отобразится как символы \ и n, которые идут друг за другом:
print("Alex loves using \\n")
>> Alex loves using \n
Рассмотрим вывод значений переменных в функции print посред-
ством метода format, передавая ему значения переменных для вывода. При этом нужно указывать номера индексов в строке в фигурных скобках {}, кото­рые выступают заполнителями. В этом случае print выступает в качестве
шаблона.
Рассмотрим пример:
a = 7 b = "Python" print("{0} – целое число, а {1} – строка.".format(a,b))
>> 7 – целое число, а Python – строка.
Вместо аргумента format можно использовать знак процента (%) для вы-
вода значений переменных. Этот способ тоже работает по принципу заполните­лей, но здесь не нужно указывать номера индексов, а можно только обозначить тип данных, которые получит функция.
Рассмотрим пример:
pupil = "Alex" old = 17 grade = 9.5 print("It's %s, %d. Level: %f" % (pupil, old, grade))
>> It's Alex, 17. Level: 9.500000
67
Здесь вместо трех символов %s, %d, %f подставляются значения перемен­ных pupil, old, grade. Буквы s, d, f обозначают типы данных – строку, це­лое число, вещественное число.
Хотя в качестве значения переменной grade было указано число 9.5, на экран оно вывелось с дополнительными нулями. Чтобы указать, сколько требу­ется знаков после запятой, надо перед f поставить точку, а после нее указать желаемое количество знаков в дробной части:
pupil = "Alex" old = 17 grade = 9.5 print("It's %s, %d. Level: %.1f" % (pupil, old, grade))
>> It's Alex, 17. Level: 9.5
Вернемся к первому примеру, где номера индексов в фигурных скобках {} выступают заполнителями, и перепишем его с использованием символов %s,
%d.
a = 7 b = "Python" print("%d – целое число, а %s – строка."%s(a,b))
>> 7 – целое число, а Python – строка.
Теперь посмотрим, что произойдет, если для переменной a, являющейся целым числом, указать %s:
print("%s – целое число, а %s – строка."%(a,b))
>> 7 – целое число, а Python – строка.
Как видно, ошибки не произошло, так как функция print неявно выпол­няет typecasting (преобразование типа) и конвертирует целое число в строку, но обратно конвертировать строку в целое число недопустимо и в случае такой попытки выводится сообщение об ошибке преобразования типов TypeError:
print("%d – целое число, а %d – строка."%(a,b))
>> TypeError: %d format: a number is required, not str
68

7. Модули

Коммерческие приложения, написанные на Python, могут иметь сотни, ты­сячи и даже миллионы строк кода. Очевидно, что умещать такое количество строк кода в одном файле практически невозможно и нецелесообразно. Логич­но разбить такой код на части. В таком случае обычно работают с главным файлом, а отдельные функции помещают в разные модули. Затем модули им­портируют в главный (основной) файл main.py с помощью ключевого слова import. В итоге команда разработчиков получает удобный читабельный код, который удобно обслуживать.
Отметим, что любой файл с кодом называется модулем.
Python также поставляется со встроенными модулями, которые обеспе- чивают дополнительную функциональность. Таким образом, модули или биб­лиотеки расширяют возможности Python и упрощают написание программ.
Модуль можно повторно использовать в других программах.
Описание модулей, входящих в стандартную библиотеку Python, есть на официальном сайте: https://docs.python.org/3/library/
Итак, чтобы использовать модуль, его надо импортировать, то есть сделать доступным для программы с помощью оператора import и названия импорти­руемого модуля. Как правило, модули импортируются первой строкой в верх­ней части файла. Синтаксис команды имеет вид
import имя_модуля
Проиллюстрируем импортирование математического модуля math:
import math
После того как модуль math импортировали, его можно использовать. Синтаксис команды использования кода модуля выглядит следующим образом:
имя_модуля.код,
где имя_модуля – имя импортированного модуля, а код – имя требуемой функции, или переменной, из модуля.
Приведем примеры использования нескольких функций из модуля math:
import math math.fabs(-7.25)
>> 7.25
69
Заметим, что функция fabs() возвращает абсолютное значение числа.
Она аналогична функции abs(), но между ними имеются вполне определен­ные различия:
abs() – встроенная функцией, а fabs() включена в модуль math, поэтому вызов abs() в отличие от вызова fabs() осуществляется следую­щим образом: print(abs(-7.25));
fabs()оперирует только с вещественными и целыми аргументами, а abs()– и с комплексными;
abs() возвращает значения разных типов. Это зависит от типа аргу­мента, а fabs() всегда приводит аргумент к вещественному типу, если же это невозможно – выбрасывает ошибку.
Приведенные ниже примеры иллюстрируют сказанное.
print(type(abs(1)))
>> <class 'int'>
print(type(abs(1.0)))
>> <class 'float'>
print(type(abs(complex(1.0, 1.0))))
>> <class 'float'>
print(type(math.fabs(complex(2,3))))
>> TypeError: can't convert complex to float
Примеры использования различных модулей:
import math math.pow(2, 3)
>> 8.0
import math print(math.cos(1))
>> 0.5403023058681398
Познакомимся еще с одним встроенным модулем Python – random. Если требуется сгенерировать случайное целое число в определенном интервале, то нужно использовать функцию randint. Эта функция имеет в качестве пара-
70
Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]