Skip to content

Небольшое FAQ

Переменные

Список использованных команд:

print('Какой то текст') - печатает текст

print(a) - печатает значение переменной a (вместо a может быть любое имя переменной)

a=input('Пояснение что надо ввести') - ожидает от пользователя ввода какого то значения и помещает его в переменную с типом строка (вместо a может быть любое имя переменной). В скобках у input может ничего не быть, тогда input будет ожидать ввод, не напечатав поясняющей надписи

int(a) - преобразовывает строку в число (вместо a может быть любое имя переменной), в том случае, если она состоит из чисел. Это важно учитывать в программе, например, если вы запрашиваете от пользователя число через input('Введите число: '), он может ввести не числом, а словами "двадцать семь" и обрушить вашу программу.

str(i) - преобразовывает любой тип данных в строку (вместо i может быть любое имя переменной)

Python относится к языкам строгой типизации и не будет складывать разные типы данных. Выражение '4' + 5 может вызвать ошибку. Поэтому следите, чтобы вы не складывали числа со строками, а если их нужно сложить, предварительно преобразуйте их в нужный тип.

Условный оператор

Список использованных команд:

Итак, в этом уроке мы узнали что такое условия

if условие:
    команда
    еще какая то команда
    еще сколько угодно команд
else:
    команда
    еще какая то команда
    еще сколько угодно команд

Также мы разобрались со сложными условиями, где используются подусловия в скобках, объединенные командами И - AND ИЛИ - OR. В условиях можно также использовать значения True и False которые обозначают Да и Нет.

Если солнце == есть и сезон == лето: Эмоции = Ура, лето!

if sun == True and season == 'Лето': emotion = 'Ура, лето!' print(emotion)

В качестве сравнения внутри услови могут выступать знаки

a == 9 a равно 9

a != 7 a не равно 7

a > 5 a больше 5

a < 5 a меньше 5

a >= 3 a больше или равно 3

a <= 8 a меньше или равно 8

Стоит понимать, как работают операторы условия, сравнения и при чем тут Булевый тип данных.

Булевый тип данных - это true и false. Эти понятия должны быть знакомы вам из школьной информатики. Это истина и ложь, все или ничего. Оператор условия (if) принимает булевое значение и в зависимости от результата идет по ветке if(условие истинно) или ветке else(условие ложно). If может принять любой тип данных и преобразовать его в булевый. Python обработает строки и числа как true, а пустую строку '', None и 0 как false. Например, чтобы проверить, что строка не пустая, мы можем использовать два способа

str = 'abc'
if str != '': 
    print('Строка не пустая')
if str: 
    print('Строка не пустая')

Вы так же можете заменить true на false и обратно с помощью слова not

str = 'abc' if str != '': print('Строка не пустая')
if not str: print('Строка пустая')

Эта тема требует повторения и закрепления, так как является основополагающей во всех языках программирования. Важно, чтобы вы поняли как задавать простые и сложные условия. В следующем уроке мы разберем тему условного оператора подробнее, и попробуем написать более сложные программы с условиями.

Сложные условия

Если вам нужно определить наличие какого-то слова или словосочетания в строке, можно использовать в условии ключевое слово IN. Это - оператор вхождения. Возвращает true в случае, когда элемент входит в состав другого элемента, false, если не входит. Допустим, у нас есть в виде строки список гостей, которых мы пригласили на какое-то мероприятие. Напишем программу, которая будет искать имя в этом списке, и если оно есть, пропускать гостей в ресторан.

s = 'Елена Малышева, Дмитрий Нагиев, Андрей Малахов, Иосиф Кобзон, Гарик Мартиросян' x = input('Введите ваше имя: ') if x in s: print('Добро пожаловать на праздник!') else: print('Извините, но вас нет в списке гостей')

В данном примере мы проверили наличие подстроки x в строке s, если она там есть, то условие выполняется, если нет - управление передается блоку команд после ELSE.

Давайте сделаем простейший текстовый квест - игру, где нужно делать выбор из нескольких вариантов развития событий.

print('Вы проснулись на космическом корабле, ничего не понимаете, ваши действия?') x = input('Введите 1 чтобы связаться с Землёй, 2 чтобы осмотреть корабль: ') if x == '1': print('Земля не отвечает, в эфире помехи и чья-то ругань...') y = input('Введите 1 чтобы подать сигнал SOS, 2 чтобы нажать большую красную кнопку на пульте: ') if y == '1': print('После долгого ожидания, ваш сигнал был услышан, и за вами послали команду спасения.') else: print('После нажатия кнопки на Землю была сброшена кварковая бомба, вы случайно уничтожили родную планету, и застрелились, поняв это.') else: print('Все каюты на корабле пусты, вы один, и не умеете управлять кораблём') y = input('Введите 1 чтобы попробовать включить автопилот, 2 чтобы подать сигнал SOS: ') if y == '1': print('После включения автопилота, вы стартовали в неизвестном направлении, и вскоре умерли от голода, не обнаружив на борту ничего съестного.') else: print('После долгого ожидания, ваш сигнал был услышан, и за вами послали команду спасения.')

Можно делать такие текстовые квесты гораздо более интересными и сложными. Зная только условный оператор, мы написали с вами простейшую текстовую игру. Если эта программа кажется вам слишком сложной, постарайтесь вникнуть в неё, прочитав несколько раз, и проследив логику выбора того или иного действия. Здесь внутрь блоков действий одного условного оператора if/else вложено еще по одному оператору if/else, которые в свою очередь, задают собственные условия. Попробуйте скопировать пример в IDLE и поиграть в текстовый квест, вводя цифры 1 или 2 и нажимая Enter.

Если вам необходимо инвертировать ваше условие, используйте ключевое слово NOT. Например мы хотим чтобы человек ввёл число НЕ(NOT) больше 10.

x = int(input('Введите число: ')) if not (x > 10): print('Всё верно, число НЕ больше десяти') else: print('К сожалению, ваше число больше десяти.')

И еще один пример по составлению сложного условия:

Если (машина == 'есть' ИЛИ деньги == 'много') И вы == 'красивый': print('Девушка с дискотеки будет ваша.') Иначе: print('Вам ничего не светит')

Переведем всё это условие на язык Python

car=0 money=0

if (car == 1 or money > 10000) and beauty == 1: print('Девушка с дискотеки будет ваша.') else: print('Вам ничего не светит')

Попробуйте усложнить условие добавив каких-то факторов, например если девушка достаточно пьяна, или если вы хорошо танцуете и.т.д.


Список использованных команд:

Когда нам нужно проверить не одно а сразу два или три условия мы можем заключить каждое из них в скобки а между ними ставить операторы or или and. В случае or общее условие выполняется если выполняется хотя бы одно из входящих в него условий. В случае с and, чтобы общее условие выполнилось, должны выполниться оба входящие в него условия.


Домашнее задание (которое не является обязательным, но поможет вам закрепить знания)

Сделайте программу которая вычисляет ваш идеальный вес, в зависимости от роста и возраста. Найдите формулу для вычисления идеального веса в гугле, и реализуйте условие для расчёта идеального веса.

Составьте программу, которая проведёт несложный тест, один из психологических тестов, которых полно в женских журналах, и развлекательных сайтах. В зависимости от результатов вашего выбора, программа должны вынести какой-то вердикт на тему вашего характера.

Сделайте более сложную текстовую игру с вашим сюжетом.

Списки и Циклы

print('Висит груша, нельзя скушать. Что это такое?') s = '' while s != 'Лампочка' or s != 'лампочка': s = input('Введите ответ и нажмите Enter: ') print('Вы отгадали загадку!')

В следующем уроке мы научимся останавливать циклы до того как они прокрутят все число повторений, и вообще разберём тему циклов и списков более подробно.

Вы также можете получить срез списка через знак ":"


Список использованных команд:

a = [] - объявление пустого списка

a.append('новый элемент списка') - добавляет в список новую строку, вместо строки может быть переменная

a.sort() - сортировка списка по алфавиту или числовым значениям

Чтобы последовательно произвести с каждым элемнтом списка какое-то действие используют цикл for x in a. Переменная x последовательно принимает значения каждого элемента списка a, пока они не закончатся. Например в данном случае мы просто печатаем каждый элемент списка.

for x in a: print(x)

Цикл while заканчивается тогда, когда во время его исполнения рано или поздно выполняется истиннность его условия. Он может и не закончиться (зациклиться) если внутри цикла нет команд которые изменят истинность условия.

a=1 while a < 3: print(a) a = a + 1

Список помещается в []. Функция list() преобразует любую последовательность в список Кортеж - (). Функция tuple() преобразует последовательность в кортеж Множество - {}. Функция set() преобразует последовательность во множество

Пустая последовательность(список, кортеж или множество) при преобразовании в булевый тип вернет false

Домашнее задание:

Напишите программу, которая в цикле ожидает последовательного ввода десяти чисел по отдельности, добавляет их в список, а после этого сортирует данный список, и печатает его, умножив каждое число на 10.

первая программа

Иногда возникает необходимость выйти из цикла, раньше, чем завершится запланированное количество его повторений. Для этого применяется ключевое слово break.

Давайте напишем программу, которая считает количество гласных во вводимых строках, а строки можно вводить до тех пор, пока не будет введена строка "Конец". Программа будет полезна поэтам, которые хотят посчитать количество слогов(гласных букв) в своем произведении. Стихи с правильным размером обычно имеют одинаковое количество гласных в рифмующихся строках. Цикл сделаем бесконечным, поставив условие, которое всегда выполняется (True). Реализуем выход из цикла с помощью break в случае если введенное слово=="Конец" или "конец".

print('Построчно вводите стих, отделяя строки нажатием Enter, чтобы посчитать количество слогов в строке.  Последней строкой введите слово Конец')
while True:
    s = str(input())
    if s == 'Конец' or s == 'конец':
        break
    k = 0
    for x in s:
        if x in 'аеёиоуыэюя':
            k = k + 1
    print(k)

Работа со строками

Сегодня мы изучим некоторые приёмы для работы со строками и с текстом. Очень много программ созданы для того чтобы работать с текстами- как-то преобразовывать их, изменять, анализировать. Любой текст можно представить либо как одну длинную очень строку, либо разбить его по предложениям или абзацам и получить на выходе список(массив) строк.

Начнём с простейших функций для обработки текстовых строк.

Замена подстроки в строке

В одном советском анекдоте, Крокодилу Гене и Чебурашке учительница поручила написать сочинение "Как я провёл лето". Проблема была в том, что всё лето друзья пили водку. Пришлось сперва написать как есть, а потом заменить некоторые слова. Давайте поможем сказочным героям. Для этого мы используем функцию replace, которая работает так

s = s.replace('строка которую заменяем', 'строка вместо неё')

Длинные тексты, разбитые на несколько строк можно поместить в одну строку, заключив их в три одинарные кавычки с каждой стороны строки.

s = '''Всё лето мы пили водку. Вот как-то открываю дверь, а на пороге Чебурашка, весь такой пьяный-пьяный, и бутылка из кармана торчит.''' s = s.replace('пили','читали') s = s.replace('водку','книги') s = s.replace('пьяный','начитанный') s = s.replace('бутылка','энциклопедия') print(s)

Программа выдаёт результат:

Всё лето мы читали книги. Вот как-то открываю дверь, а на пороге Чебурашка, весь такой начитанный-начитанный, и энциклопедия из кармана торчит.

Как видим, теперь сочинение Чебурашки и Гены успешно пройдет проверку строгой учительницы.

Иногда функцию replace можно использовать, чтобы удалить какие-то слова из строки, заменив их на пустую строку(просто открыть и закрыть кавычку - будет пустая строка). Например, давайте полностью удалим из какого-то текста слово 'какашка'.

s = '''Ах ты какашка! - сказал маленький мальчик на девочку, которая ему понравилась.''' s = s.replace('какашка','') print(s)

Программа напечатает

Ах ты ! - сказал маленький мальчик на девочку, которая ему понравилась.

Мы удалили из текста плохое слово, заменив его на пустую строку.

Получение части строки

Извлечь из строки какой-то отрезок(срез), можно указав начальную и конечную позицию подстроки через двоеточие, в квадратных скобках после имени переменной. Позиция начинается с нуля.

Поясним на примере.

s = 'Меня зовут Бонд, Джеймс Бонд' a = s[:4] print(a)

Обратите внимание, что мы пропустили первый элемент перед двоеточием, так срез начинается с начала

Напечатает подстроку:

Меня

s = 'Меня зовут Бонд, Джеймс Бонд' a = s[10:15] print(a)

Напечатает подстроку:

Бонд

Предположим у нас есть несколько строк в списке, и какие то из них начинаются на строку 'http'(то есть являются ссылками на веб страницы). Нам нужно найти их в списке, и вывести на экран. Для того чтобы их найти, нам нужно получить часть строки с первого по четвёртый символы, и если это 'http', то вывести эту строку на экран. Составим программу, которая перебирает строки из списка и ищет те, которые начинаются с 'http'.

mas = ['Это просто строка','http://golos.io','Ещё одна строка','http://golosboard.ru'] for x in mas: if x[:4] == 'http': print(x)

В результате работы программы увидим:

http://golos.io http://golosboard.ru

Поиск подстроки в строке

Для того чтобы определить наличие подстроки в строке, можно использовать функцию find. Работает она так -

n = s.find('строка которую ищем')

Если искомая подстрока имеется в строке,то в переменную n попадёт её позиция в строке, а если подстрока не будет найдена n станет равно -1.

Давайте попробуем определить есть ли в строке адрес электронной почты с mail.ru. Для этого попробуем найти в строке подстроку '@mail.ru'. Для начала получим список всех слов. Для этого разобьем строку на массив подстрок, по разделителю с помощью функции words = s.split('разделитель'). Если оставить скобки пустыми, то разделителем по умолчанию служит пробел

s = 'Это обычная строка, а в ней адрес почты golos@mail.ru' words = s.split() for w in words: n = w.find('@mail.ru') if n != -1: print('В строке присутствует емайл: ' +str(w))

Программа выведет на экран:

В строке присутствует емайл: golos@mail.ru

Метод join() - обратный функции split(). Она принимает список и возвращает строку, в которой каждый элемент списка соединен с другим через строку, у которой мы вызываем данный метод.

str1 = 'Море волнуется ' list1 = ['1 ', '2 ', '3 '] str1 += str1.join(list1) # str1 = str1 + str1.join(list1) print(str1) # Море волнуется 1 Море волнуется 2 Море волнуется 3

Но этот метод работает только в том случае, если мы получаем список строк.

На практике вам не раз потребуется вставить какую-то переменную в середину строки. При этом это могут быть перемнные, содержащие как числа, так и строки. Чтобы не морочить себе голову и не думать лишний раз, где какой тип данных, можно воспользоваться форматированными строками. Как это проще всего сделать?

Существует два основных способа вставки переменной в строку:

  1. С помощью метода format

name = 'Иван Иванов' age = 32 address = 'Улица Пушкина Дом Колотушкина' info = 'Имя: {}. Возраст: {}. Адрес: {}'.format(name, age, address) print(info) # Имя: Иван Иванов. Возраст: 32. Адрес: Улица Пушкина Дом Колотушкина

Вы можете передать информацию списком через *

data = ['Иван Иванов', 32, 'Улица Пушкина Дом Колотушкина'] info = 'Имя: {}. Возраст: {}. Адрес: {}'.format(*data) print(info) # Имя: Иван Иванов. Возраст: 32. Адрес: Улица Пушкина Дом Колотушкина

Недостаток этого метода в том, что вам нужно следить, что вы передаете элементы в правильном порядке, но format очень удобен в работе со списками

  1. Через f-строки

name = 'Иван Иванов' age = 32 address = 'Улица Пушкина Дом Колотушкина' info = f'Имя: {name}. Возраст: {age}. Адрес: {address}' print(info) # Имя: Иван Иванов. Возраст: 32. Адрес: Улица Пушкина Дом Колотушкина

Главное примущество этого метода в том, что вы можете вставить значение в строку несколько раз, также вы можете как-либо менять эти значения прямо в фигурных скобках: сперва python выполнит все действия в них, а затем вставит полученный результат в строку. Например, upper() в примере ниже переводит все буквы строки в верхний регистр

name = 'Иван Иванов' age = 32 address = 'Улица Пушкина Дом Колотушкина' info = f'Имя: {name.upper()}. Возраст: {age//3}. Адрес: {address}' print(info) # Имя: ИВАН ИВАНОВ. Возраст: 10. Адрес: Улица Пушкина Дом Колотушкина


Список использованных команд:

s = s.replace('строка которую заменяем', 'строка вместо неё') - заменяет подстроку в строке

a = s[:4] - дает кусок строки начиная с укзанной позиции, и до конечной (в данном случае с 0 до 4)

n = s.find('строка которую ищем') - дает номер позиции искомой подстроки в строке

mas = s.split(',') - делит строку по указанному разделителю на подстроки и помещает их в список. В данном случае строка s делится по разделителю ',' и подстроки записываются в список mas. В качестве разделителя можно использовать любой символ, например '\n' тогда можно разделить текст на абзацы по переносу строк.

Сделайте программу в которую можно ввести длинный текст из нескольких предложений, заканчивающихся точкой, восклицательным или вопросительным знаком. Программа должна разделить введенный текст на предложения и вывести каждое из них на экран с новой строки.

Длина строки, буфера обмена


Чтобы получить количество символов(длину строки), используется функция len().

s = 'Если очень вам неймётся, код пишите как придётся'
n = len(s)
print(n)

Напечатает: 48

Для работы с буфером обмена нам будет необходимо установить сторонний модуль. На линуксах работает только если установлена утилита xsel или xclip (спасибо внимательным читателям!).

pip install pyperclip
Чтобы подключить модуль к программе в её начале пишем import pyperclip. Этот модуль с помощью команды pyperclip.paste() позволит нам получить текст, скопированный в буфер обмена с любого документа. Таким образом, программа при запуске посчитает нам количество символов в любом тексте, который мы заранее выделили и скопировали.

Количество символов должно показывать как с пробелами, так и без них. Сперва нужно удалить знаки переноса строк, которые в Python пишется как '\n' и '\r'. Чтобы высчитать количество символов без пробелов, просто удалим с помощью replace из строки пробелы. Можно еще удалить знаки препинания, добавив несколько replace, но мы не станем это делать, чтобы не усложнять пример. Это вы сможете сделать сами, в качестве домашнего задания.

Для красоты в вывод программы добавим еще несколько команд print().

import pyperclip
print('Убедитесь что вы заранее скопировали текст')
print('------------------------------------------')
s = pyperclip.paste()
s = s.replace('\n', '').replace('\r', '')
n1 = len(s)
s = s.replace(' ', '')
n2 = len(s)
print('Количество символов с пробелами: ' + str(n1))
print('Количество символов без пробелов: ' + str(n2))
print('------------------------------------------')
print(pyperclip.paste())

В качестве примера, я скопировал в буфер обмена кусочек текста, запустил нашу программу и она посчитала мне количество символов в этом тексте.

Убедитесь что вы заранее скопировали текст

Количество символов с пробелами: 163 Количество символов без пробелов: 139

В этом уроке мы научились устанавливать сторонние модули, с помощью команды pip install имя_модуля, узнали как получить текст из буфера обмена, а также функцию len() которая высчитывает длину строки.


Список использованных команд:

n = len(s) - получает длину строки s в виде числа в переменной n

import название_модуля - подключает к программе сторонний модуль. Модули должны быть заранее установлены путем копирования их в каталог программы, или через командную строку pip install имя_модуля. Команда import обычно располагается в начале программы, и может использоваться многократно для подключения нескольких модулей, например:

import requests import sys import os

Домашнее задание (которое не является обязательным, но поможет вам закрепить знания):

Напишите программу, которая в цикле мониторит буфер обмена, периодически получая из него текст с помощью pyperclip.paste(), и если видит что кем-то был скопирован какой-либо e-mail, заменяет этот e-mail на другой, заранее прописанный в коде, помещая его в буфер обмена командой pyperclip.copy('hackemail@mail.ru'). Найдите в поисковой системе как внутри цикла сделать задержки на секунду с помощью команды sleep(1) и модуля time. Эти задержки нужны, чтобы программа не получала содержимое буфера обмена слишком часто.

Back to top