Напишите программу которая считывает строку разделитель и три строки


Скачай курс
в приложении
Перейти в приложение
Открыть мобильную версию сайта
© 2013 — 2023. Stepik
Наши условия использования и конфиденциальности

Public user contributions licensed under cc-wiki license with attribution required
Параметры sep, end. Переменные. Комментарии, PEP8. Урок 2
![]()
Вспоминаем прошлый урок
1.
Что такое компьютерная программа?
2. Что такое язык программирования?
3. Сильные и слабые стороны языка Python?
4. Для чего используется команда print()?
5. Для чего используется команда input()?
3
4.
Необязательные параметры sep, end
5.
Параметр sep
5
Что он делает?
print(‘a’, ‘b’, ‘c’)
print(‘d’, ‘e’, ‘f’)
a b c
d e f
print(‘a’, ‘b’, ‘c’, sep=’*’)
print(‘d’, ‘e’, ‘f’, sep=’**’)
a*b*c
d**e**f
sep = separator, разделитель
6.
Параметр sep
6
Необязательный параметр sep, позволяет задать набор символов, с
помощью которых будут разделены аргументы при выводе данных:
print(‘a’, ‘b’, ‘c’)
print(‘d’, ‘e’, ‘f’)
a b c
d e f
print(‘a’, ‘b’, ‘c’, sep=’*’)
print(‘d’, ‘e’, ‘f’, sep=’**’)
a*b*c
d**e**f
sep = separator, разделитель
7.
Параметр end
7
Что он делает?
print(‘a’, ‘b’, ‘c’)
print(‘d’, ‘e’, ‘f’)
a b c
d e f
print(‘a’, ‘b’, ‘c’, end=’@’)
print(‘d’, ‘e’, ‘f’, end=’@@’)
a b c@d e f@@
end = end, конец
8.
Параметр end
8
По умолчанию команда print() после вывода ставит перевод строки
Необязательный параметр end, позволяет установить специальное
окончание с помощью которого будет завершаться вывод данных:
print(‘a’, ‘b’, ‘c’)
print(‘d’, ‘e’, ‘f’)
a b c
d e f
print(‘a’, ‘b’, ‘c’, end=’@’)
print(‘d’, ‘e’, ‘f’, end=’@@’)
a b c@d e f@@
по завершении первой печати вставлена строка @
по завершении второй печати вставлена строка @@
9.
Примечания
Вызов команды print() с пустыми скобками ставит перевод строки
Последовательность символов \n задает перевод на новую строку
Значения по умолчанию у параметров sep и end следующие:
sep = ‘ ‘
end = ‘\n’
# пробел
# перевод строки
Чтобы убрать все дополнительные выводимые символы можно
вызывать команду print() так:
print(‘a’, ‘b’, ‘c’, sep=», end=»)
9
10.
11.
Задача
Что будет выведено на экран в результате выполнения
следующего кода?
print(’31’, ’12’, ‘2019’, sep=’-‘)
11
12.
Задача
Что будет выведено на экран в результате выполнения
следующего кода?
print(’31’, ’12’, ‘2019’, sep=’-‘)
Ответ:
31-12-2019
12
13.
Задача
Что будет выведено на экран в результате выполнения
следующего кода?
print(‘Mercury’, ‘Venus’, sep=’*’, end=’!’)
print(‘Mars’, ‘Jupiter’, sep=’**’, end=’?’)
13
14.
Задача
Что будет выведено на экран в результате выполнения
следующего кода?
print(‘Mercury’, ‘Venus’, sep=’*’, end=’!’)
print(‘Mars’, ‘Jupiter’, sep=’**’, end=’?’)
Ответ:
Mercury*Venus!Mars**Jupiter?
14
15.
Задача «Кастомный разделитель»
Напишите программу, которая считывает строку
разделитель и три строки, а затем выводит указанные
строки через разделитель.
Ввод
Вывод
*
Раз
Два
Три
Раз*Два*Три
В курсе: урок 2.3 стэп 6
15
16.
Переменные
17.
Переменные
17
Переменная — это именованный участок памяти, в котором хранятся
данные
name = ‘Roman’
surname = input()
print(‘Привет,’, name, surname)
в переменной name хранится строка ‘Roman’
в переменной surname хранится вводимый пользователем текст
Любая переменная имеет имя и значение
18.
Имя переменной
1.
18
может содержать только латинские буквы a-z, A-Z, цифры и
символ нижнего подчеркивания _
2. не может начинаться с цифры
3. по возможности должно отражать её назначение
Верное имя
Имя с ошибкой
name1
my_variable
_sum
a
TotalAmount
qwerty12my
5name
переменная
surname$%
19.
Имя переменной
Python — регистрозависимый язык программирования
name и Name — две совершенно разные переменные
Для именования переменных принято использовать стиль
lower_case_with_underscores (маленькие буквы с
подчеркиваниями)
19
20.
Значение переменной
20
Значение переменной — информация, хранящаяся в переменной
В переменной может храниться текст, число и т. д.
Если вы хотите, чтобы у вас была переменная, нужно написать:
=
Оператор
присваивания
Имя переменной всегда должно быть слева
от знака равенства
21.
Значение переменной
Значение переменной можно переприсваивать:
subject = ‘Math’
subject = ‘Computer science’
print(subject)
Оператор присваивания сообщает переменной значение
независимо от того, была ли эта переменная введена
раньше или нет
name1 = ‘Taylor’
name2 = name1
Если у нас имеется переменная, мы
можем делать с её значением все что
угодно, например присвоить другой
переменной
21
22.
Задача
22
Что покажет приведенный ниже фрагмент кода?
language = ‘Python’
language = ‘Pascal’
print(language)
23.
Задача
23
Что покажет приведенный ниже фрагмент кода?
language = ‘Python’
language = ‘Pascal’
print(language)
Ответ:
Pascal
24.
Задача
24
Какое значение будет находится в переменной s1 после
выполнения следующего кода?
s1 = ‘C++’
s2 = ‘Python’
s3 = ‘Java’
s3 = s2
s1 = s3
25.
Задача
25
Какое значение будет находится в переменной s1 после
выполнения следующего кода?
s1 = ‘C++’
s2 = ‘Python’
s3 = ‘Java’
s3 = s2
s1 = s3
Ответ:
Python
26.
27.
Резюме 1.
27
Нео Андерсен
Достиг больших успехов, делал проект
Matrix, в трех версиях.
В командной работе игнорирует общие
правила, любит их нарушать. Но при этом
работает очень быстро.
Его бывшие работодатели говорят, что после его ухода
пришлось переделывать работу заново, потому что никто не
смог разобраться в тексте написанных им программ.
28.
Резюме 2.
28
Бильбо Бэггинс
Считает, что код читается намного больше
раз, чем пишется. Стремится к тому, чтобы
весь код был написан в едином стиле, и
любой мог легко его прочесть.
Придирается к каждой мелочи, работает
вдумчиво, медленно.
Его бывшие работодатели говорят, что за время его работы из
команды уволилось три человека, потому что не могли терпеть
такое занудство.
29.
Резюме 3.
29
Кот Леопольд
Работал в разных компаниях, накопил
много опыта. Считает, что нужно писать в
едином стиле с кодом, который уже есть в
проекте и который может не совпадать с
классическими правилами.
Идеальный командный игрок.
Его бывшие работодатели говорят, что стремление избегать
конфликтов мешало его карьерному росту, но готовы снова с
ним работать.
30.
PEP 8
PEP 8 — это документ, описывающий общепринятый стиль
написания программ на языке Python
Документ создан по рекомендациям Гвидо Ван Россума
PEP = Python Enhancement Proposal
30
31.
Некоторые рекомендации PEP 8
Рекомендация 1. Избегайте использования пробелов сразу
перед открывающей скобкой, после которой начинается
список аргументов функции
Правильно:
print(‘Follow PEP8!’)
Неправильно:
print (‘Follow PEP8!’)
31
32.
Некоторые рекомендации PEP 8
Рекомендация 2. После запятой обязательно нужно добавлять
ровно один пробел
Правильно:
print(‘PEP8’, ‘Rocks!’)
Неправильно:
print(‘PEP8′,’Rocks!’)
print(‘PEP8’,
‘Rocks!’)
32
33.
Некоторые рекомендации PEP 8
Рекомендация 3. Не используйте пробелы для отделения знака
=, когда он употребляется для обозначения необязательных
параметров
Правильно:
print(‘My name’, ‘is’, ‘Python’, sep=’**’, end=’+’)
Неправильно:
print(‘My name’, ‘is’, ‘Python’, sep = ‘**’, end = ‘+’)
33
34.
Wing IDE и PEP 8
Среда Wing IDE имеет встроенную поддержку по
форматированию кода по стандарту PEP 8
Для включения PEP8 в
Wing IDE зайдите в меню
Edit → Preferences
Перейдите к категории
Editor → PEP 8
34
35.
Комментарии
36.
Комментарии
Комментарий — примечание в коде программы, которое
Python игнорирует
Комментарии могут помочь вам или кому-то другому, глядя на
программу спустя некоторое время, понять принцип её
работы
Любую строку можно превратить в комментарий, поместив
перед ней символ #
36
37.
Комментарии
37
Однострочные комментарии:
# Это комментарий
print(‘Python rocks!’)
Комментарий в конце строки:
print(‘Python rocks!’)
# Это комментарий
38.
Чек-лист: повторение пройденного
❏ Я понял/а как работает команда input() и могу применять ее.
❏ Я решил/а ….. задач на Stepik.
❏ Мне понятны преимущества хорошего тона в написании кода.
❏ Я знаю два дополнительных параметра команды print().
❏ Я примерно понимаю, зачем нужны переменные.
❏ Я установил/а дома IDE Wing 101
❏ Мне еще нужно разобраться в .
38
39.
Над созданием курса работали:
«Поколение Python»: курс для начинающих» разработан специально для
Благотворительного фонда развития образования «Айкью Опшн»
авторским коллективом школы BEEGEEK.
Авторы методических указаний для преподавателей:
Ольга Скобина (Ассоциация Российских Тренеров, АРТа)
Тимур Гуев (ОАНО Новая школа)
Роман Белых (БФ развития образования «Айкью Опшн»)
Дизайнеры:
Юлия Уебельман
Ольга Галак (БФ развития образования «Айкью Опшн»)
Редактор:
Наталья Белых
39
Теоретический материал: Python (версия 3)
Итак, мы видим, что Питон умеет работать как минимум с двумя видами данных — числами и строками. Числа записываются последовательностью цифр, также перед числом может стоять знак минус, а строки записываются в одинарных кавычках. 2 и ‘2’ — это разные объекты, первый объект — число, а второй —строка. Операция + для целых чисел и для строк работает по-разному: для чисел это сложение, а для строк —конкатенация.
Кроме целых чисел есть и другой класс чисел: действительные (вещественные числа), представляемые в виде десятичных дробей. Они записываются с использованием десятичной точки, например, 2.0. В каком-то смысле, 2 и 2.0 имеют равные значение, но это—разные объекты. Например, можно вычислить значения выражения ‘ABC’ * 10 (повторить строку 10 раз), но нельзя вычислить ‘ABC’ * 10.0.
Определить тип объекта можно при помощи функции type:
>>> type(2)
>>> type(‘2’)
>>> type(2.0)
Обратите внимание —type является функцией, аргументы функции указываются в скобках после ее имени.
Вот список основных операций для чисел:
A + B — сумма;
A — B — разность;
A * B — произведение;
A / B — частное;
A ** B — возведение в степень. Полезно помнить, что квадратный корень из числа x — это x ** 0.5, а корень степени n это x ** (1 / n).
Есть также унарный вариант операции -, то есть операция с одним аргументом. Она возвращает число, противоположное данному. Например: -A.
В выражении может встречаться много операций подряд. Как в этом случае определяется порядок действий? Например, чему будет равно 1 + 2 * 3 ** 1 + 1? В данном случае ответ будет 8, так как сначала выполняется возведение в степень, затем – умножение, затем — сложение.
Более общие правила определения приоритетов операций такие:
- Выполняются возведения в степень справа налево, то есть 3 ** 3 ** 3 это \(3^\) .
- Выполняются унарные минусы (отрицания).
- Выполняются умножения и деления слева направо. Операции умножения и деления имеют одинаковый приоритет.
- Выполняются сложения и вычитания слева направо. Операции сложения и вычитания имеют одинаковый приоритет.
Основные операции над строками:
A + B — конкатенация;
A * n — повторение n раз, значение n должно быть целого типа.
Интерактивный интерпретатор
Данный курс будет посвящен изучению программирования с использованием языка Python. Это — современный язык программирования, работающий на всех распространных операционных системах.
В настоящее время существует две версии языка Python: более старая, но пока ещё более распространненая версия 2 и современная версия 3. Они не вполне совместимы друг с другом: программа, написанная для одной версии языка может оказаться невыполнимой для другой версии. Но в основном обе версии очень похожи.
Мы будем использовать версию 3 данного языка, некоторые из используемых примеров не будут работать с версией 2. Последняя версия языка, доступная в сентябре 2010 года — 3.1.2, именно её необходимо установить дома, скачав данную версию с сайта www.python.org.
Запустить интерпретатор python можно из командной строки:
$ python3
Будьте внимательны — команда python запустит интерпретатор версии 2, с которым мы работать не будем. В системе Windows можно использовать пункт меню “Python (command line)”
Вы увидите примерно следующее приглашение командной строки:
Python 3.1.2 (r312:79147, Jun 12 2010, 15:29:06)
[GCC 4.4.3 20100316 (ALT Linux 4.4.3-alt2)] on linux2
Type "help", "copyright", "credits" or "license" for more information.
>>>
Смело вводите команды и наслаждайтесь результатом. А что можно вводить? Несколько примеров:
>>> 2 + 2
4
>>> 2 ** 100
1267650600228229401496703205376
>>> 'Hello' + 'World'
'HelloWorld'
>>> 'ABC' * 100
'ABCABCABCABCABCABCABCABCABCABCABCABCABCABCABCABCABCABCABCABCABC
ABCABCABCABCABCABCABCABCABCABCABCABCABCABCABCABCABCABCABCABCABC
ABCABCABCABCABCABCABCABCABCABCABCABCABCABCABCABCABCABCABCABCABC
ABCABCABCABCABCABCABCABCABCABCABCABCABCABCABCABCABCABCABCABCABC
ABCABCABCABCABCABCABCABCABCABCABCABCABCABCABCABC'
Первая команда вычисляет сумму двух чисел, вторая команда вычисляет 2 в степени 100, третья команда выполняет операцию конкатенации для строк, а четвертая команда печатает строку ‘ABC’, повторенную 100 раз.
Хотите закончить работу с питоном? Введите команду exit() (именно так, со скобочками, так как это — функция), или нажмите Ctrl+D.
Преобразование типов
Иногда бывает полезно целое число записать, как строку. И, наоборот, если строка состоит из цифр, то полезно эту строку представить в виде числа, чтобы дальше можно было выполнять арифметические операции с ней. Для этого используются функции, одноименные с именем типа, то есть int, float, str. Например, int(‘123’) вернет целое число 123, а str(123) вернет строку ‘123’.
>>> str(2 + 2) * int('2' + '2')
'4444444444444444444444'
Результатом будет строка из числа 4, повторенная 22 раза.
Пишем простейшие программы
В предыдущем задании мы использовали Питон для простых разовых вычислений, используя интерактивный режим. Например, было задание вычислить длину гипотенузы прямоугольного треугольника по ее катетам. Запустите текстовый редактор и напишите следующий текст:
a = 179
b = 197
c = (a ** 2 + b ** 2) ** 0.5
print (c)
Здесь мы используем переменные — объекты, в которых можно сохранять различные (числовые, строковые и прочие) значения. В первой строке переменной a присваивается значение 179, затем переменной b присваивается значение 971, затем переменной c присваивается значение арифметического выражения, равному длине гипотенузы.
После этого значение переменной c выводится на экран.
Сохраните этот текст в файле с именем hypot.py . Запустите терминал, перейдите в каталог, где лежит этот файл и выполните эту программу:
$ python3 hypot.py
Интерпретатор языка Питон, запущенный с указанием имени файла, запускается не в интерактивном режиме, а выполняет ту последовательность команд, которая сохранена в файле. При этом значения вычисленных выражений не выводятся на экран (в отличии от интерактивного режима), поэтому для того, чтобы вывести результат работы программы, то есть значение переменной c , нам понадобится специальная функция print .
Ввод данных: функция input()
Пример выше неудобен тем, что исходные данные для программы заданы в тексте программы, и для того, чтобы использовать программу для другого треугольника необходимо исправлять текст программы. Это неудобно, лучше, чтобы текст программы не менялся, а программа запрашивала бы у пользователя данные, необходимые для решения задачи, то есть запрашивала бы значения двух исходных переменных a и b . Для этого будем использовать функцию input() , которая считывает строку с клавиатуры и возвращает значение считанной строки, которое сразу же присвоим переменым a и b :
a = input()
b = input()
Правда, функция input возвращает текстовую строку, а нам нужно сделать так, чтобы переменные имели целочисленные значения. Поэтому сразу же после считывания выполним преобразование типов при помощи фунцкии int , и запишем новые значения в переменные a и b .
a = int(a)
b = int(b)
Можно объединить считывание строк и преобразование типов, если вызывать функцию int для того значения, которое вернет функция input :
a = int(input())
b = int(input())
Далее в программе вычислим значение переменной c и выведем результат на экран.
Теперь мы можем не меняя исходного кода программы многократно использовать ее для решения различных задач. Для того нужно запустить программу и после запуска программы ввести с клавиатуры два числа, нажимая после кажого числа клавишу Enter . Затем программа сама выведет результат.
Ввод данных: функция input()
Ввод данных: функция input()
Вывод данных: функция print()
Функция print может выводить не только значения переменных, но и значения любых выражений. Например, допустима запись print(2 + 2 ** 2) . Также при помощи функции print можно выводить значение не одного, а нескольких выражений, для этого нужно перечислить их через запятую:
a = 1
b = 2
print(a, '+', b, '=', a + b)
В данном случае будет напечатан текст 1 + 2 = 3 : сначала выводится зание переменной a , затем строка из знака “+”, затем значение переменной b , затем строка из знака “=”, наконец, значение суммы a + b .
Обратите внимание, выводимые значение разделяются одним пробелом. Но такое поведение можно изменить: можно разделять выводимые значения двумя пробелами, любым другим символом, любой другой строкой, выводить их в отдельных строках или не разделять никак. Для этого нужно функции print передать специальный именованный параметр, называемый sep , равный строке, используемый в качестве разделителя (sep — аббревиатура от слова separator, т.е. разделитель). По умолчанию параметр sep равен строке из одного пробела и между значениями выводится пробел. Чтобы использовать в качестве разделителя, например, символ двоеточия нужно передать параметр sep , равный строке ‘:’ :
print(a, b, c, sep = ':')
Аналогично, для того, чтобы совсем убрать разделитель при выводе нужно передать параметр sep , равный пустой строке:
print(a, '+', b, '=', a + b, sep = '')
Для того, чтобы значения выводились с новой строке, нужно в качестве параметра sep передать строку, состоящую из специального символа новой строки, которая задается так:
print(a, b, sep = '\n')
Символ обратного слэша в текстовых строках является указанием на обозначение специального символа, в зависимости от того, какой символ записан после него. Наиболее часто употребляется символ новой строки ‘\n’ . А для того, чтобы вставить в строку сам символ обратного слэша, нужно повторить его два раза: ‘\\’ .
Вторым полезным именованным параметром функции print является параметр end , который указывает на то, что выводится после вывода всех значений, перечисленных в функции print . По умолчанию параметр end равен ‘\n’ , то есть следующий вывод будет происходить с новой строки. Этот параметр также можно исправить, например, для того, чтобы убрать все дополнительные выводимые символы можно вызывать функцию print так:
print(a, b, c, sep = '', end = '')
Целочисленная арифметика
Для целых чисел определены ранее рассматривавшиеся операции + , — , * и ** . Операция деления / для целых чисел возвращает значение типа float . Также функция возведения в степень возвращает значение типа float , если показатель степени — отрицательное число.
Но есть и специальная операция целочисленного деления, выполняющегося с отбрасыванием дробной части, которая обозначается // . Она возвращает целое число: целую часть частного. Например:
>>> 17 // 3
5
>>> -17 // 3
-6
Другая близкая ей операция: это операция взятия остатка от деления, обозначаемая % :
>>> 17 % 3
2
>>> -17 % 3
1
Напишите программу которая считывает строку разделитель и три строки
Большинство программ работает не с отдельными переменными, а с набором переменных. Например, программа может обрабатывать информацию об учащихся класса, считывая список учащихся с клавиатуры или из файла, при этом изменение количества учащихся в классе не должно требовать модификации исходного кода программы.
Раньше мы сталкивались с задачей обработки элементов последовательности, например, вычисляя наибольший элемент последовательности. Но при этом мы не сохраняли всю последовательность в памяти компьютера. Однако, во многих задачах нужно именно сохранять всю последовательность, например, если бы нам требовалось вывести все элементы последовательности в возрастающем порядке (“отсортировать последовательность”).
Для хранения таких данных можно использовать структуру данных, называемую в Питоне список (в большинстве же языков программирования используется другой термин “массив”). Список представляет собой последовательность элементов, пронумерованных от 0, как символы в строке. Список можно задать перечислением элементов списка в квадратных скобках, например, список можно задать так:
Primes = [2, 3, 5, 7, 11, 13] Rainbow = ['Red', 'Orange', 'Yellow', 'Green', 'Blue', 'Indigo', 'Violet']
В списке Primes — 6 элементов, а именно: Primes[0] == 2 , Primes[1] == 3 , Primes[2] == 5 , Primes[3] == 7 , Primes[4] == 11 , Primes[5] == 13 . Список Rainbow состоит из 7 элементов, каждый из которых является строкой.
Также как и символы в строке, элементы списка можно индексировать отрицательными числами с конца, например, Primes[-1] == 13 , Primes[-6] == 2 .
Длину списка, то есть количество элементов в нем, можно узнать при помощи функции len , например, len(Primes) == 6 .
В отличие от строк, элементы списка можно изменять, присваивая им новые значения.
Rainbow = ['Red', 'Orange', 'Yellow', 'Green', 'Blue', 'Indigo', 'Violet'] print(Rainbow[0]) Rainbow[0] = 'красный' print('Выведем радугу') for i in range(len(Rainbow)): print(Rainbow[i])
Рассмотрим несколько способов создания и считывания списков. Прежде всего, можно создать пустой список (не содержащий элементов, длины 0), а в конец списка можно добавлять элементы при помощи метода append . Например, пусть программа получает на вход количество элементов в списке n , а потом n элементов списка по одному в отдельной строке. Вот пример входных данных в таком формате:
5 1809 1854 1860 1891 1925
В этом случае организовать считывание списка можно так:
5 1809 1854 1860 1891 1925
a = [] # заводим пустой список n = int(input()) # считываем количество элемент в списке for i in range(n): new_element = int(input()) # считываем очередной элемент a.append(new_element) # добавляем его в список # последние две строки можно было заменить одной: # a.append(int(input())) print(a)
В этом примере создается пустой список, далее считывается количество элементов в списке, затем по одному считываются элементы списка и добавляются в его конец. То же самое можно записать, сэкономив переменную n :
5 1809 1854 1860 1891 1925
a = [] for i in range(int(input())): a.append(int(input())) print(a)
Для списков целиком определены следующие операции: конкатенация списков (сложение списков, т. е. приписывание к одному списку другого) и повторение списков (умножение списка на число). Например:
a = [1, 2, 3] b = [4, 5] c = a + b d = b * 3 print([7, 8] + [9]) print([0, 1] * 3)
В результате список c будет равен [1, 2, 3, 4, 5] , а список d будет равен [4, 5, 4, 5, 4, 5] . Это позволяет по-другому организовать процесс считывания списков: сначала считать размер списка и создать список из нужного числа элементов, затем организовать цикл по переменной i начиная с числа 0 и внутри цикла считывается i -й элемент списка:
5 1809 1854 1860 1891 1925
a = [0] * int(input()) for i in range(len(a)): a[i] = int(input())
Вывести элементы списка a можно одной инструкцией print(a) , при этом будут выведены квадратные скобки вокруг элементов списка и запятые между элементами списка. Такой вывод неудобен, чаще требуется просто вывести все элементы списка в одну строку или по одному элементу в строке. Приведем два примера, также отличающиеся организацией цикла:
a = [1, 2, 3, 4, 5] for i in range(len(a)): print(a[i])
Здесь в цикле меняется индекс элемента i , затем выводится элемент списка с индексом i .
a = [1, 2, 3, 4, 5] for elem in a: print(elem, end=' ')
В этом примере элементы списка выводятся в одну строку, разделенные пробелом, при этом в цикле меняется не индекс элемента списка, а само значение переменной (например, в цикле for elem in [‘red’, ‘green’, ‘blue’] переменная elem будет последовательно принимать значения ‘red’ , ‘green’ , ‘blue’ .
Обратите особое внимание на последний пример! Очень важная часть идеологии Питона — это цикл for , который предоставляет удобный способ перебрать все элементы некоторой последовательности. В этом отличие Питона от Паскаля, где вам обязательно надо перебирать именно индексы элементов, а не сами элементы.
Последовательностями в Питоне являются строки, списки, значения функции range() (это не списки), и ещё кое-какие другие объекты.
Приведем пример, демонстрирующий использование цикла for в ситуации, когда из строки надо выбрать все цифры и сложить их в массив как числа.
# дано: s = 'ab12c59p7dq' # надо: извлечь цифры в список digits, # чтобы стало так: # digits == [1, 2, 5, 9, 7] s = 'ab12c59p7dq' digits = [] for symbol in s: if '1234567890'.find(symbol) != -1: digits.append(int(symbol)) print(digits)
2. Методы split и join
Элементы списка могут вводиться по одному в строке, в этом случае строку целиком можно считать функцией input() . После этого можно использовать метод строки split() , возвращающий список строк, которые получатся, если исходную строку разрезать на части по пробелам. Пример:
1 2 3
# на вход подаётся строка # 1 2 3 s = input() # s == '1 2 3' a = s.split() # a == ['1', '2', '3']
Если при запуске этой программы ввести строку 1 2 3 , то список a будет равен [‘1’, ‘2’, ‘3’] . Обратите внимание, что список будет состоять из строк, а не из чисел. Если хочется получить список именно из чисел, то можно затем элементы списка по одному преобразовать в числа:
1 2 3
a = input().split() for i in range(len(a)): a[i] = int(a[i])
Используя специальную магию Питона — генераторы — то же самое можно сделать в одну строку:
1 2 3
a = [int(s) for s in input().split()]
Объяснение того, как работает этот код, будет дано в следующем разделе. Если нужно считать список действительных чисел, то нужно заменить тип int на тип float .
У метода split() есть необязательный параметр, который определяет, какая строка будет использоваться в качестве разделителя между элементами списка. Например, вызов метода split(‘.’) вернет список, полученный разрезанием исходной строки по символам ‘.’ :
a = '192.168.0.1'.split('.')
В Питоне можно вывести список строк при помощи однострочной команды. Для этого используется метод строки join . У этого метода один параметр: список строк. В результате возвращается строка, полученная соединением элементов переданного списка в одну строку, при этом между элементами списка вставляется разделитель, равный той строке, к которой применяется метод. Мы знаем, что вы не поняли предыдущее предложение с первого раза. Поэтому смотрите примеры:
a = ['red', 'green', 'blue'] print(' '.join(a)) # вернёт red green blue print(''.join(a)) # вернёт redgreenblue print('***'.join(a)) # вернёт red***green***blue
Если же список состоит из чисел, то придется использовать еще тёмную магию генераторов. Вывести элементы списка чисел, разделяя их пробелами, можно так:
a = [1, 2, 3] print(' '.join([str(i) for i in a])) # следующая строка, к сожалению, вызывает ошибку: # print(' '.join(a))
Впрочем, если вы не любитель тёмной магии, то вы можете достичь того же эффекта, используя цикл for .
3. Генераторы списков
Для создания списка, заполненного одинаковыми элементами, можно использовать оператор повторения списка, например:
n = 5 a = [0] * n
Для создания списков, заполненных по более сложным формулам можно использовать генераторы: выражения, позволяющие заполнить список некоторой формулой. Общий вид генератора следующий:
[выражение for переменная in последовательность]
где переменная — идентификатор некоторой переменной, последовательность — последовательность значений, который принимает данная переменная (это может быть список, строка или объект, полученный при помощи функции range ), выражение — некоторое выражение, как правило, зависящее от использованной в генераторе переменной, которым будут заполнены элементы списка.
Вот несколько примеров использования генераторов.
Создать список, состоящий из n нулей можно и при помощи генератора:
a = [0 for i in range(5)]
Создать список, заполненный квадратами целых чисел можно так:
n = 5 a = [i ** 2 for i in range(n)]
Если нужно заполнить список квадратами чисел от 1 до n , то можно изменить параметры функции range на range(1, n + 1) :
n = 5 a = [i ** 2 for i in range(1, n + 1)]
Вот так можно получить список, заполненный случайными числами от 1 до 9 (используя функцию randrange из модуля random ):
from random import randrange n = 10 a = [randrange(1, 10) for i in range(n)]
А в этом примере список будет состоять из строк, считанных со стандартного ввода: сначала нужно ввести число элементов списка (это значение будет использовано в качестве аргумента функции range ), потом — заданное количество строк:
5 a b 1 2 3
a = [input() for i in range(int(input()))]
4. Срезы
Со списками, так же как и со строками, можно делать срезы. А именно:
A[i:j] срез из j-i элементов A[i] , A[i+1] , . A[j-1] .
A[i:j:-1] срез из i-j элементов A[i] , A[i-1] , . A[j+1] (то есть меняется порядок элементов).
A[i:j:k] срез с шагом k : A[i] , A[i+k] , A[i+2*k] . . Если значение k
Каждое из чисел i или j может отсутствовать, что означает “начало строки” или “конец строки”
Списки, в отличии от строк, являются изменяемыми объектами: можно отдельному элементу списка присвоить новое значение. Но можно менять и целиком срезы. Например:
A = [1, 2, 3, 4, 5] A[2:4] = [7, 8, 9]
Получится список, у которого вместо двух элементов среза A[2:4] вставлен новый список уже из трех элементов. Теперь список стал равен [1, 2, 7, 8, 9, 5] .
A = [1, 2, 3, 4, 5, 6, 7] A[::-2] = [10, 20, 30, 40]
Получится список [40, 2, 30, 4, 20, 6, 10] . Здесь A[::-2] — это список из элементов A[-1] , A[-3] , A[-5] , A[-7] , которым присваиваются значения 10, 20, 30, 40 соответственно.
Если не непрерывному срезу (то есть срезу с шагом k , отличному от 1), присвоить новое значение, то количество элементов в старом и новом срезе обязательно должно совпадать, в противном случае произойдет ошибка ValueError .
Обратите внимание, A[i] — это элемент списка, а не срез!
Операции со списками
Со списками можно легко делать много разных операций.
| x in A | Проверить, содержится ли элемент в списке. Возвращает True или False |
| x not in A | То же самое, что not(x in A) |
| min(A) | Наименьший элемент списка |
| max(A) | Наибольший элемент списка |
| A.index(x) | Индекс первого вхождения элемента x в список, при его отсутствии генерирует исключение ValueError |
| A.count(x) | Количество вхождений элемента x в список |
