Добавил:
ivanov666
Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз:
Предмет:
Файл:Алгоритмизация и программирование. Язык Python. Учебное пособие
.pdf
Пример
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
Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]
