Язык Python. Первое знакомство.
О языке Python
Python — современный язык программирования, работающий на всех распространенных операционных системах для настольных компьютеров. Язык программирования Питон разрабатывается чуть более 20 лет. В настоящее время активно используется две версии языка — более старая версия 2 и современная версия. Версия 2 более не развивается, но до сих пор еще используется, поскольку очень много программного обеспечения и библиотек разработано именно для версии 2. Между версиями есть существенная несовместимость, в том числе в синтаксисе команд ввода-вывода (программа на языке Python 2-й версии может не работать в 3-й версии и наоборот), но в целом они очень похожи. Мы будет использовать именно версию 3, как более современную и совершенную.
Python — современный универсальный интерпретируемый язык программирования. Его достоинства:
Кроссплатформенность и бесплатность.
Простой синтаксис и богатые возможности позволяют записывать программы очень кратко, но в то же время понятно.
По простоте освоения язык сравним с бейсиком, но куда более богат возможностями и значительно более современен.
Богатая стандартная библиотека, возможность разработки промышленных приложений (для работы с сетью, GUI, базами данных и т.д.)
Большинство школьных олимпиад по информатике поддерживают язык Python. C 2015 года в текстах задач ЕГЭ примеры приводятся также и на языке Python.
Практика показывает, что задания ЕГЭ по информатике, в которых требуется написать программу, существенно проще решать с использованием языка Python, чем классических языков Бейсик, Паскаль, C/C++.
Марк Лутц. Изучаем Python. 4-е издание – очень толстый и подробный учебник.
Марк Саммерфилд. Программирование на Python 3 – менее толстый, не столь подробный учебник
Python — стабильный и достаточно распространенный язык программирования. Он используется в некоторых проектах и в различных качествах: как основной язык программирования или для создания расширений и интеграции приложений, а также для написания скриптов. На Python реализовано некоторое количество проектов, также он активно используется для создания прототипов будущих программ.
Многие компании активно используют Python для написания своих продуктов или некоторых их частей. Среди крупнейших можно выделить:
Яндекс
Mail.Ru
Apple( использует Python и Twisted для разработки сервера календарей iCal)
IBM
CERN
DreamWorks
NASA
Nokia
Кроме того, Python активно используется в различных проектах:
CherryPy — среда для разработки веб-приложений
Django — среда для разработки веб-приложений
Google App Engine — Google-хостинг
Matplotlib — визуализация научных данных в стиле MATLAB
BitTorrent — первый клиент-сервер для популярного протокола файлообменных сетей.
Dropbox — приложение для прозрачной синхронизации данных на множестве компьютеров.
Следующие проекты используют Python для написания скриптов:
Википедия использует Python для написания ботов
OpenOffice.org — набор офисных программ, альтернатива Microsoft Office
Vim — текстовый редактор
Python также активно используется разработчиками компьютерных игр (Eve Online, Civilization IV и др.)
Синтаксис языка Python, как и сам язык, очень прост. Он не содержит сложных неинтуитивных конструкций, поэтому достаточно прост в изучении.
Основные приципы синтаксиса языка Python
Конец строки является концом инструкции (точка с запятой не требуется).
ПРИМЕР
a = 5
b = 3
print(a + b)
Вложенные инструкции объединяются в блоки по величине отступов. Отступ может быть любым, главное, чтобы в пределах одного вложенного блока отступ был одинаков.
ПРИМЕР
if a == 5:
print('yes')
a += 1
Вложенные инструкции в Python записываются в соответствии с одним и тем же шаблоном, когда основная инструкция завершается двоеточием, вслед за которым располагается вложенный блок кода, обычно с отступом под строкой основной инструкции.
Для считывания строки со стандартного ввода используется функция input(), которая считывает строку с клавиатуры и возвращает значение считанной строки, которое сразу же можно присвоить переменным:
a = input()
b = input()
Правда, функция input возвращает текстовую строку. Если нужно сделать так, чтобы переменные имели целочисленные значения, то сразу же после считывания выполним преобразование типов при помощи фунцкии int, и запишем новые значения в переменные a и b:
a = int(a)
b = int(b)
Можно объединить считывание строк и преобразование типов, если вызывать функцию int для того значения, которое вернет функция input():
a = int(input())
b = int(input())
Сложнее считать значения переменных, если они записаны в отдельной строке. Здесь нужно применить к считанной строке метод split(), который разделяет строку на части по одному или двум пробелам. Затем результат выполнения этой функции присвоим кортежу из двух или нескольких чисел. Например, если в строке вводятся два числа через пробел, то считать их можно так:
a, b = input().split()
a = int(a)
b = int(b)
Аналогично, три переменные можно считать, записав слева от оператора присваивания кортеж из трех переменных:
a, b, c = input().split()
Можно также сразу же преобразовать считанные значения в числовой тип (например, int), если воспользоваться функцией map, которая применяет к каждому элементу списка заданную функцию (для преобразования к типу int нужно, соответственно, задать функцию int для применения к каждому элементу). Для начала можно просто запомнить эту конструкцию:
a, b, c = map(int, input().split())
Для вывода данных используется функция 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 = '')
Задача 1. Что делают функции?
Установите соответствие между функцией и тем, что она делает.
Начало формы
int()
str()
input()
print()
Конец формы
Превращает в число то, что внутри скобок
Превращает в строку то, что внутри скобок
Считывает данные с клавиатуры
Выводит что-то на экран
Задача 2. Списки – комоды
Чтобы хранить много вещей, можно использовать комод. В языке python роль комода играют списки. Например, программа
Family = ['мама', 'папа', 'бабушка', 'дедушка', 'я']
создаст "комод" Family с пятью ящиками. В ящике №0 хранится строка 'мама', в ящике №1 хранится строка 'папа', и т.д. Нумерация ящиков начинается с 0.
Обратиться к содержимому ящика можно по номеру, например, программа
Family = ['мама', 'папа', 'бабушка', 'дедушка', 'я']
print(Family[0])
напечатает слово мама.
Что напечатает такая программа:
Family = ['мама', 'папа', 'бабушка', 'дедушка', 'я']
print(Family[3])
Подсказка 1 из 2
Напишите программу и запустите.
Подсказка 2 из 2
Строка выводится без кавычек.
Правильный ответ: дедушка
Задача 3. Многократный вывод
Какое число нужно написать вместо знака вопроса в такой программе
for i in range(1, ?):
print('Hello!')
чтобы строка Hello! была напечатана 17 раз?
Решение задачи
range(1, 11) создает последовательность чисел 1, 2, …, 10 (то есть, от 1 до 11, не включая при этом 11). Следовательно, вместо знака вопроса нужно записать число на 1 большее нужного количества итераций, то есть, 18.
Задача 4. Сложение строк
В языке python строковые переменные можно складывать, результатом такого сложения будет тоже строка, состоящая из двух слагаемых, записанных друг за другом. Например, напишем такую программу:
a = 'Fox'
b = 'Ford'
c = a + b
print(c)
В результате ее работы в переменной c будет храниться строка 'FoxFord' (в результат сначала записывается первая строка a, а потом к ней приписывается вторая строка b).
Раз можно складывать, то можно и умножать:
a = 'Fox'
c = a * 3
print(c)
В результате работы такой программы в переменной с будет храниться строка 'FoxFoxFox' (умножить на 3 означает сложить три раза).
Определите, что выведет такая программа:
a = 'Fox'
a = a * 2
b = 'Ford'
b = b * 3
c = b + a
print(c)
Решение задачи
В результате работы программы
a = 'Fox'
a = a * 2
в переменной a будет храниться строка 'FoxFox'.
В результате работы программы
b = 'Ford'
b = b * 3
в переменной b будет храниться строка 'FordFordFord'.
c = b + a
означает, что сначала записывается строка b, а затем к ней (без пробела!) приписывается строка a.
Кавычки при выводе не печатаются, поэтому будет напечатано FordFordFordFoxFox.
Задача 5. Превращения
В языке python строковые переменные типа a = '123' можно превращать в числовые, и наоборот, числа можно превращать в строки. Для этого используются функции int() и str(). Например.
a = 123 # это число
a = str(a) # уже строка
a = int('321') # опять число, но другое.
Определите, что напечатает такая программа:
a = '111'
a = int(a)
a = a + 5
a = str(a)
a = a + '7'
print(a)
Решение задачи
Можно просто запустить программу и посмотреть. Но можно понять ответ и так:
a = '111' # сейчас это строка
a = int(a) # теперь это число 111
a = a + 5 # теперь это число 116
a = str(a) # теперь это строка
a = a + '7' # приписали к строке еще символ, получили строку 1167
print(a) # будет напечатано 1167
1. Программа, угадывающая число
input('Загадай число! Нажми enter, как будешь готов.')
input('Вычти из своего числа 3. Нажми enter, как будешь готов.')
input('Результат умножь на 2. Нажми enter, как будешь готов.')
input('К полученному числу прибавь 7. Нажми enter, как будешь готов.')
ans = input('А теперь скажи, что у тебя получилось.')
print('Ты задумал число', (int(ans) - 7) // 2 + 3)
2. Программа, отгадывающая дату рождения
D = {1: 'января', 2:'февраля', 3:'марта', 4:'апреля', 5:'мая', 6:'июня', 7:'июля', 8:'августа', 9:'сентября', 10:'октября', 11:'ноября', 12:'декабря'}
input('Привет! Я отгадаю дату твоего рождения. Нажми enter, как будешь готов.')
input('Умножь день, в который ты родился, на 2. Если ты родился 15 февраля, умножай на 2 число 15. Нажми enter, как будешь готов. ')
input('К результату прибавь 5. Нажми enter, как будешь готов.')
input('Полученное число умножь на 50. Нажми enter, как будешь готов.')
input('К результату прибавь номер месяца, в который ты родился (число от 1 до 12). Нажми enter, как будешь готов.')
ans = int(input('А теперь скажи, что у тебя получилось.'))
ans = ans - 250
print('Ты родился', ans//100, D[ans % 100])
3. Программа, загадывающая число.
from random import*
print('Я загадал число от 1 до 20. Попробуйугадать!')
secret = randint(1, 20)
ans = int(input())
while ans != secret:
if ans > secret:
print('Слишкомбольшоечисло!')
else:
print('Маловато…')
ans = int(input('Попробуйещераз!\n'))
print('Молодец,угадал!')
4.Генераторпаролей
from random import *
import string
adjs = ['green', 'blue', 'yellow', 'good', 'cold']
nouns = ['ball', 'panda', 'dinosaur', 'cat', 'dog']
while True:
adj = choice(adjs)
noun = choice(nouns)
number = randint(1, 20)
special = choice(string.punctuation)
password = adj + noun + str(number) + special
print('Новыйпароль:', password)
ans = input('Нужендругойпароль? да/нет\n')
if ans == 'нет':
break
Задача 6. Найди ошибку
Перед вами три фрагмента кода. Какие из них написаны без ошибок (имеются в виду ошибки, связанные с синтаксисом языка Python)?
A.
if lives < 0
print('Выпроиграли!')
B.
if lives = 0:
print('Выпроиграли!')
C.
if lives < 0:
print('Выпроиграли!')
D.
if lives == 0:
print('Вы проиграли!')
else:
print('Игра продолжается.')
Начало формы
Решение задачи
Верен только вариант C.
Ошибка в A: нет двоеточия после условия if lives < 0.
Ошибка в B: проверка на равенство пишется с помощью двух знаков равно: if lives == 0:.
Ошибка в D: после if и else следующие строки кода должны быть написаны с отступами.
Задача 7. str() и int()
Вы, конечно, помните про то, что функции str() и int() помогают превращать числа в строки и строки в числа. Как вы думаете, чему будет равно значение переменной ans после выполнения такого кода:
a = '1'
b = 5
ans = int(a * 2 + str(b) + '1') * 2
?
Решение задачи
Разберем, что и почему у нас получится
ans = int(a * 2 + str(b) + '1') * 2
В переменной a хранится строка '1', str(b) превращает число 5 в строку '5', поэтому результатом операции a * 2 + str(b) + '1' будет строка '1151'. Функция int() превращает ее в число 1151, а в переменной ansв результате будет храниться число 1151∗2=2302.
Задача 8. Много звезд
Какое число нужно записать вместо ? в программе
for i in range(1, ?):
print('*')
, чтобы она напечатала 35 звездочек?
Решение задачи
Цикл
foriinrange(1, 11):
делает 10 итераций: при i равном 1, 2, 3, …, 10 (граница 11 не включается).
Следовательно, чтобы получить 35 звездочек, вместо знака вопроса нужно записать число 36.
Задача 9. Hello!
Сколько раз напечатает слово Hello! такая программа:
count = 5
while count > 0:
print('Hello!')
if count == 3:
break
count = count - 1
?
Решениезадачи
Такаяпрограмма:
count = 5
while count > 0:
print('Hello!')
count = count - 1
напечатала бы слово Hello! 5 раз, поскольку условие count > 0 было бы верно при count равном 5, 4, 3, 2, 1.
В нашей же программе еще на каждой итерации цикла проверяется условие if count == 3, и в тот момент, когда count действительно равно 3, будет выполнена команда break, то есть, выполнение цикла завершится.
Следовательно, Hello! успеет напечататься всего 3 раза: при count равном 5, 4 и 3.
Задача 10. Длина пароля
Измените программу-генератор паролей, написанную на уроке так, чтобы выбор прилагательных был из слов 'red' и 'hot', а выбор существительных — из слов 'giraffe', 'crocodile', 'dinosaur'. Сгенерируйте пароль. Какова его длина (то есть, из скольки символов он состоит)?
Решение задачи
Удобно воспользоваться функцией len(), которая определяет длину строки. Измененная программа может выглядеть, например, так:
from random import *
import string
adjs = ['red', 'hot']
nouns = ['giraffe', 'crocodile', 'dinosaur']
while True:
adj = choice(adjs)
noun = choice(nouns)
number = randint(1, 20)
special = choice(string.punctuation)
password = adj + noun + str(number) + special
print('Новыйпароль:', password)
print('Длинапароля:', len(password))
ans = input('Нужендругойпароль?да/нет\n')
if ans == 'нет':
break
Возможная длина пароля при таких исходных данных: 12, 13, 14 или 15.