Добавил:
Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:

Алгоритмизация и программирование. Язык Python. Учебное пособие

.pdf
Скачиваний:
0
Добавлен:
06.09.2026
Размер:
1 Мб
Скачать
Пример word = 'Python'
print(word[0]) # первый символ строки с индексом 0 Результат: 'P' Print(word[5]) # символ с индексом 5
Результат: 'n'
Для отсчета символов строки справа индексы принимают отрицательные
значения. Пример
Print(word[-1]) # последний символ Результат: 'n' Print(word[-2]) # второй с конца символ Результат: 'o' Print(word[-6]) # первый символ
Результат: 'P'
Отрицательные индексы в отличии от положительных начинаются с -1.
В дополнение к индексации также поддерживаются срезы. В то время как индексация используется, чтобы получать отдельные символы, срезы позволяют получать подстроки. Индексы указываются в квадратных скобках,
разделенные двоеточием, в соответствии с форматом:
[индекс1:индекс2],
где индекс1 – индекс символа, включаемого в подстроку первым;
индекс2 – индекс последнего символа, не включаемого в подстроку.
Пример
Print(word[0:2]) # символы от позиции 0 (включая) до 2 (исключая) Результат: 'Py' Print(word[2:5]) # символы от позиции 2 (включая) до 5 (исключая)
Результат: 'tho'
На основании рассмотренных примером можно сделать вывод, что начало
всегда включается, а конец всегда исключается. Индексация срезов имеет полезные свойства по умолчанию: опущенный индекс1 – обозначает ноль, опущенный индекс 2 – обозначает размер строки, с которой берется срез. Это обеспечивает то, что s[:i] + s[i:] всегда равно s.
Примеры
ps=word[:2] + word[2:] print(ps) Результат: 'Python'
21
ps=word[:4] + word[4:] print(ps) Результат: 'Python' ps=word[:2] # символ от начала до позиции 2 (исключая) print(ps) Результат: 'Py' ps=word[4:] # символ от позиции 4 (включая) до конца print(ps) Результат: 'on' ps=word[-2:] # символы от второго с конца (включая) до конца print(ps)
Результат: 'on'
Строки Python не подлежат изменению, поэтому присвоение по индекси­рованной позиции в строке приводит к ошибке.
Пример
word[0] = 'J'
Результат: TypeError: 'str' object does not support item assignment
В то же время возможно использование подстрок для формирования но­вых строковых переменных.
Примеры
pp='J' + word[1:] print(pp) Результат: 'Jython' pp=word[:2] + 'py' print(pp)
Результат: 'Pypy'
Для определения длины строки (количества символов) используется
встроенная функция len(). Индекс последнего символа в строке меньше на еди­ницу длины строки.
Пример
s = 'supercalifragilisticexpialidocious' k=len(s) print(k) Результат: 34
22
2.8. Списки
Наиболее гибким типом для группировки данных является list (список –
прим. пер.), который может быть описан как список разделенных запятой значений (элементов) между квадратными скобками. Списки могут включать
элементы различных типов, но обычно все элементы имеют одинаковый тип. Пример
squares = [1, 4, 9, 16, 25] print(squares)
Результат: [1, 4, 9, 16, 25]
Списки, так же как и строки, подлежат индексированию, для получения доступа к отдельным элементам – среза. Обозначение индексов аналогична ра­боте со строками.
Пример
Print(squares[0]) # индекс возвращает элемент Результат: 1
Print(squares[-1]) Результат: 25
Print(squares[-3:]) # срез возвращает новый список
Результат: [9, 16, 25]
Все операции взятия среза возвращают новый список, содержащий
запрошенные элементы. Это значит, что срез возвращает новую (поверхност­ную) копию списка.
Пример
Print(squares[:])
Результат: [1, 4, 9, 16, 25]
Списки также поддерживают такую операцию, как конкатенацию (склеи­вания).
Пример
nl=squares + [36, 49, 64, 81, 100]
Результат: [1, 4, 9, 16, 25, 36, 49, 64, 81, 100]
В отличие от строк, которые неизменяемые, списки являются изменяе­мым типом, т. е. есть возможность изменить их содержание.
Пример
cubes = [1, 8, 27, 65, 125] # что-то здесь не так с = 4 ** 3 # 4 в кубе равно 64, а не 65
23
cubes[3] = с # замена ошибочного значения print(cubes)
Результат: [1, 8, 27, 64, 125]
С помощью метода append() в конец списка можно добавлять новые значения.
Пример
cubes.append(216) # добавление куба 6-ти cubes.append(7 ** 3) # и куба 7-ми print(cubes)
Результат: [1, 8, 27, 64, 125, 216, 343]
Присвоение срезов также возможно, и этим можно даже изменить размер
списка или полностью его очистить. Пример
letters = ['a', 'b', 'c', 'd', 'e', 'f', 'g'] letters[2:5] = ['C', 'D', 'E'] # замена нескольких значений print(letters) Результат: ['a', 'b', 'C', 'D', 'E', 'f', 'g']
letters = ['a', 'b', 'c', 'd', 'e', 'f', 'g'] letters[2:5] = ['C', 'D', 'E'] # замена нескольких значений letters[2:5] = [] # теперь удалим их print(letters) Результат: ['a', 'b', 'f', 'g']
letters = ['a', 'b', 'c', 'd', 'e', 'f', 'g'] letters[:] = [] # очистим список, заменив все элементы на пустой список print(letters)
Результат: []
Встроенная функция len() также применима к спискам, для определения количества элементов.
Пример
letters = ['a', 'b', 'c', 'd'] print(len(letters))
Результат: 4
Возможно вкладывать списки (создавать списки, включающие другие
списки). Пример
a = ['a', 'b', 'c'] n = [1, 2, 3]
24
x = [a, n] print(x) Результат: [['a', 'b', 'c'], [1, 2, 3]]
Print(x[0]) Результат: ['a', 'b', 'c']
Print(x[0][1]) Результат: 'b'
2.9. Ввод и вывод данных
2.9.1. Ввод данных
Для организации ввода данных с клавиатуры в языке Python используется функция input(). По умолчанию все значения принимают строковый тип. Син­таксис функции имеет следующий вид:
переменной = input([строка-приглашение])
где переменной – идентификатор переменной в которую будет записано вво­димое значение; строка-приглашение – необязательный параметр; сообщение, которое бу­дет выведено на экран при выполнении программы.
Примеры
# организация ввода значения в переменную a
a = input()
# организация ввода значения в переменную b со строкой-приглашением
b = input(“Введите значение b: ”)
# организация ввода значения в переменную c со строкой-приглашением # автоматически осуществляется перевод в целое значение в десятичной си­стеме счисления с помощью функции int()
c = int(input(“Введите значение c: ”))
# организация ввода значения в переменную l со строкой-приглашением # с автоматическим преобразованием строки в список с помощью функции split() – по умолчанию в качестве разделителя используется пробел
l = input(“Введите значения строки через пробел: ”).split() l = input(“Введите значения строки через пробел: ”).split(“-“)
# организация ввода значения в переменную l со строкой-приглашением # с автоматическим преобразованием строки в список с помощью функции split() и переводом в целое значение # функция map() принимает два аргумента: первый – функция, которая будет применена к каждому элементу списка; вторая – список, который следует об­работать
l = map(int, input(“Введите значения строки через пробел: ”).split(“-“))
25
2.9.2. Вывод данных
Функция print Python выводит заданные объекты на стандартное устрой­ство вывода (экран) или отправляет их текстовым потоком в файл. Синтаксис функции имеет следующий вид:
print(*args[, sep=' ', end='\n', file=sys.stdout])
где *args – выводимые объекты; sep – разделитель между выводимыми значениями (по умолчанию – про- бел); end – символ, которым заканчивается вывод (по умолчанию – символ но- вой строки); file – file-like – объект, в который мы можем перенаправить вывод, который
по умолчанию производится в sys.stdout. Примеры
# вывод одной переменной строкового типа
a = “Hello print (a) Результат: Hello
# вывод нескольких переменных строкового типа через пробел
a = “A” b = “B c = “C” print (a,b,c) Результат: A B C
# вывод нескольких переменных строкового типа через знак # с помощью па­раметра sep
a = “A” b = “B” c = “C” print (a,b,c,sep=”#”) Результат: A#B#C
# вывод нескольких значений: первая фраза строкового типа, значение пере­менной числового типа преобразованной с помощью функции str() в строковый тип и вторая фраза строкового типа
v=18 print (“Ваш возраст “+ str(v)+” лет“ )
Результат: Ваш возраст 18 лет
Функция str() используется для перевода читабельных значений в строко­вый тип, в то время как функция repr() предназначена для преобразования с помощью интерпретатора.
26
Примеры
# вывод одной переменной строкового типа
a = “Hello print repr(a) Результат: “Hello
v=18 print repr(“Ваш возраст “+ str(v)+” лет“ )
Результат: “”Ваш возраст” 18 “лет””
При организации вывода данных может быть организовано форматирова-
ние. Язык Python поддерживает несколько способов форматирования:
определение характер выравнивания выводимых значений в строке с помощью методов rjust() – в право, ljust() – в лево и center() – по центру. Все перечисленный методы имеют одинаковый синтаксис:
строковое значение.метод(ширина[,заполнитель])
где ширина – количество символов в новой строке;
заполнитель – символ, который заполнит свободные позиции строки: rjust() – слева, ljust() – справа и center()слева и справа симметрично;
использование метода format(). Метод форматирования format() до-
бавляет в строку один или несколько заполнителей, которые определяются фи-
гурными скобками ({}). Причем передать методу можно любое значение, кото­рое необходимо вставить в строку. При выполнении программы значение будет добавлено в строку в то место, где находятся фигурные скобки. Следует отме-
тить, что количество пар фигурных скобок должно соответствовать количеству
значений, в противном случае, будет получено сообщение об ошибке. Примеры
# Добавление вместо пустых фигурных скобок значение 5
print("I have {} apples.".format(5)) Результат: I have 5 apples.
new_apple_string = "I love {} {}." #2 {} заменителя print(new_apple_string.format("red", "apples")) #Значения нужно разделить за-
пятой
Результат: I love red apples.
Рассмотренные примеры демонстрируют, что при отсутствии параметра в
фигурной скобке значения, переданные с помощью метода format(), вставляют­ся по порядку.
В то же время передаваемые значения имеют индексы, которые могут ис­пользоваться в качестве параметров в фигурных скобках.
27
Число
Формат
Результат
Примечание
3.1415926
{:.2f}
3.14
Два знака после запятой
3.1415926
{:+.2f}
+3.14
Два знака после запятой со знаком
-1
{:+.2f}
-1.00
Два знака после запятой со знаком
2.71828
{:.0f}
3
Без знаков после запятой
5
{:0>2d}
05
Заполнение нулями слева (2 знака)
5
{:x<4d}
5xxx
Заполнение х справа (4 знака)
Примеры
# Значение “Sam” имеет индекс 0, а " winged dinosaur" 1
print("My friend {0} has a pet {1}!".format("Sam", " winged dinosaur")) Результат: My friend Sam has a pet winged dinosaur!
# Поменяем индексы местами: значение “Sam” с индексом 0 встанет в конце фразы, а " winged dinosaur" с индексом 1 в начале
print("My friend {1} has a pet {0}!".format("Sam", " winged dinosaur"))
Результат: My friend winged dinosaur has a pet Sam!
Кроме позиционных аргументов существуют также именованные аргу­менты, которые можно вызвать по имени. Именованный аргумент pr можно ис-
пользовать вместе с позиционными. Пример
print("Tom {0} {1} a {pr}.".format("has", "made", pr = "pull request"))
Результат: Tom has made a pull request.
В фигурные скобки кроме индекса аргумента может быть указан тип дан­ных с помощью односимвольного кода. Синтаксис параметра приобретает сле-
дующий вид:
{field_name:conversion}
где field_name – индекс аргумента метода format(). При отсутствии индекса, обрабатываются значения по умолчанию;
conversion – тип данных с помощью односимвольного кода: s – строки (string); d – десятичные числа (decimal); f – число с плавающей точкой (float).
По умолчанию строки выравниваются внутри поля по левому краю, а
числа – по правому краю. Это можно изменить с помощью символов:
 < — выравнивание по левому краю;
 ^ — выравнивание по центру;
 > — выравнивание по правому краю.
В табл. 5 представлены примеры использования параметров. Т а б л и ц а 5. Примеры параметров для значений числовых типов
28
Окончание табл. 5
Число
Формат
Результат
Примечание
10
{:x<4d}
10xx
Заполнение х справа (4 знака)
1000000
{:,}
1,000,000
Форматирование числа с разделителем за-
пятой
0.25
{:.2%}
25.00%
Форматирование процентов
1000000000
{:.2e}
1.00e+09
Обозначение экспоненты
13
{:10d}
13
Выровненный по правому краю (по умол­чанию, ширина 10, пустое место заполня-
ется пробелами)
13
{:<10d}
13
Выровненный слева (ширина 10)
13
{:^10d}
13
Выровненный по центру (ширина 10)
Примеры
# В первых фигурных скобках использован синтаксис {field_name:conversion}, во вторых – номер индекса
print("Sam ate {0:f} percent of a {1}!".format(75, "pizza")) Результат: Sam ate 75.000000 percent of a pizza!
# Организация вещественного значения. Три знака после запятой
print("Sam ate {0:.3f} percent of a pizza!".format(75.765367)) Результат: Sam ate 75.765 percent of a pizza!
# Чтобы создать внутренние отступы можно увеличить размер поля с помо­щью дополнительных параметров. Для этого добавьте в фигурные скобки по­сле индекса через двоеточие длину поля (в символах)
print("Tom has {0:4} red {1:10}!".format(5, "apples")) Результат: Sammy has 5 red apples !
# Символ указывается после двоеточия. Например, для выравнивания по левому краю в первых фигурных скобках ставится знак меньше, а во вторых – по цен­тру - ^
print("Tom has {0:<4} red {1:^10}!".format(5, "apples")) Результат: Sammy has 5 red apples !
# По умолчанию Python заполняет свободное пространство внутри поля про­белами, для использования другого символа для заполнения его следует указать сразу после двоеточия
print("{:*^20s}".format("Hello")) Результат: ******* Hello********
nApples = 8 print("Tommy has {} apples today!".format(nApples)) Результат: Tommy has 8 apples today!
29
2
as
22
2 da
Начало
Ввод s
Вывод a,d
Конец
tommy = "Tommy has {} apples today!" nApples = 8 print(tommy.format(nApples)) Результат: Tommy has 8 apples today!
2.10. Пример исходного кода программы
Задача: необходимо определить величину стороны и диагонали квадрата на основании его площади.
2.10.1. Математическая постановка задачи
Введем обозначения величин: a – сторона квадрата; d – диагональ квадра-
та; s – площадь квадрата.
Для выполнения вычислений следует воспользоваться формулами:
а)
б)
– формула площади квадрата;
– теорема Пифагора.
Из представленных формул выводим формулы для определения величи-
ны стороны и диагонали квадрата:
а) – сторона квадрата;
б) диагональ квадрата.
2.10.2. Алгоритм решения задачи
30
Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]