├── 06-Модули и Пакеты (Modules and Packages) ├── 00-Modules_and_Packages │ ├── MyMainPackage │ │ ├── __init__.py │ │ ├── SubPackage │ │ │ ├── __init__.py │ │ │ ├── mysubscript.py │ │ │ └── __pycache__ │ │ │ │ ├── __init__.cpython-36.pyc │ │ │ │ └── mysubscript.cpython-36.pyc │ │ ├── some_main_script.py │ │ └── __pycache__ │ │ │ ├── __init__.cpython-36.pyc │ │ │ └── some_main_script.cpython-36.pyc │ ├── mymodule.py │ └── myprogram.py ├── file2.py ├── file3.py ├── file1.py ├── __pycache__ │ └── file1.cpython-36.pyc └── 01-Name_and_Main │ ├── two.py │ ├── one.py │ └── Explanation.txt ├── 07-Ошибки и Обработка Исключений (Errors and Exception Handling) ├── testfile ├── cap.py ├── __pycache__ │ └── cap.cpython-36.pyc ├── simple1.py ├── simple2.py ├── test_cap.py ├── 03-Errors and Exceptions Homework - Solution.ipynb ├── .ipynb_checkpoints │ ├── 03-Errors and Exceptions Homework - Solution-checkpoint.ipynb │ └── 02-Errors and Exceptions Homework-checkpoint.ipynb └── 02-Errors and Exceptions Homework.ipynb ├── 00-Объекты и Структуры Данных Python (Python Object and Data Structure Basics) ├── test.txt └── .ipynb_checkpoints │ └── Untitled-checkpoint.ipynb ├── 12-Финальный Проект (Final Capstone Python Project) ├── .DS_Store ├── .ipynb_checkpoints │ ├── 01-Final Capstone Project-checkpoint.ipynb │ └── 03-Final Capstone Project-checkpoint.ipynb └── 03-Final Capstone Project.ipynb ├── README.md ├── 17-Параллельная Обработка Данных (Parallel Processing) ├── test2.py └── test.py ├── FAQ - Часто Задаваемые Вопросы.ipynb ├── 08-Проект - 2 (Milestone Project - 2) ├── 01-Milestone Project 2 - Assignment.ipynb └── .ipynb_checkpoints │ └── 01-Milestone Project 2 - Assignment-checkpoint.ipynb ├── 10-Декораторы Python (Python Decorators) ├── 02-Decorators Homework.ipynb └── .ipynb_checkpoints │ └── 02-Decorators Homework-checkpoint.ipynb ├── 04-Проект - 1 (Milestone Project - 1) ├── 01-Milestone Project 1 - Assignment.ipynb └── .ipynb_checkpoints │ └── 01-Milestone Project 1 - Assignment-checkpoint.ipynb ├── 09-Встроенные функции (Built-in Functions) ├── 07-Complex.ipynb ├── .ipynb_checkpoints │ ├── 07-Complex-checkpoint.ipynb │ ├── 05-Enumerate-checkpoint.ipynb │ ├── 06-all() and any()-checkpoint.ipynb │ └── 03-Filter-checkpoint.ipynb ├── 05-Enumerate.ipynb ├── 06-all() and any().ipynb └── 03-Filter.ipynb ├── 16-Бонусные Материалы - Введение в Графические Интерфейсы (Bonus Material - Introduction to GUIs) └── 08-Advanced Widget Styling with Layout.ipynb ├── 02-Операторы Python (Python Statements) ├── 01-Introduction to Python Statements.ipynb ├── .ipynb_checkpoints │ ├── 01-Introduction to Python Statements-checkpoint.ipynb │ ├── 05-range()-checkpoint.ipynb │ ├── 07-Statements Assessment Test-checkpoint.ipynb │ └── 09-Guessing Game Challenge-checkpoint.ipynb ├── 07-Statements Assessment Test.ipynb └── 09-Guessing Game Challenge.ipynb ├── 05-Объектно-Ориентированное Программирование (Object Oriented Programming) ├── 02-Object Oriented Programming Homework.ipynb ├── .ipynb_checkpoints │ ├── 02-Object Oriented Programming Homework-checkpoint.ipynb │ ├── 04-OOP Challenge-checkpoint.ipynb │ ├── 03-Object Oriented Programming Homework - Solution-checkpoint.ipynb │ └── 05-OOP Challenge - Solution-checkpoint.ipynb ├── 04-OOP Challenge.ipynb ├── 03-Object Oriented Programming Homework - Solution.ipynb └── 05-OOP Challenge - Solution.ipynb ├── 13-Продвинутые Модули Python (Advanced Python Modules) ├── 03-Python Debugger (pdb).ipynb ├── .ipynb_checkpoints │ ├── 03-Python Debugger (pdb)-checkpoint.ipynb │ └── 06-StringIO-checkpoint.ipynb └── 06-StringIO.ipynb ├── 14-Продвинутые Объекты и Структуры Данных (Advanced Python Objects and Data Structures) ├── 06-Advanced Python Objects Test.ipynb ├── .ipynb_checkpoints │ └── 06-Advanced Python Objects Test-checkpoint.ipynb └── 04-Advanced Dictionaries.ipynb ├── 01-Операторы Сравнения в Python (Python Comparison Operators) ├── 02-Chained Comparison Operators.ipynb └── .ipynb_checkpoints │ └── 02-Chained Comparison Operators-checkpoint.ipynb ├── 03-Методы и Функции (Methods and Functions) ├── 01-Methods.ipynb └── .ipynb_checkpoints │ └── 01-Methods-checkpoint.ipynb └── 11-Генераторы Python (Python Generators) ├── 02-Iterators and Generators Homework.ipynb └── .ipynb_checkpoints └── 02-Iterators and Generators Homework-checkpoint.ipynb /06-Модули и Пакеты (Modules and Packages)/00-Modules_and_Packages/MyMainPackage/__init__.py: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /07-Ошибки и Обработка Исключений (Errors and Exception Handling)/testfile: -------------------------------------------------------------------------------- 1 | Выполняем запись -------------------------------------------------------------------------------- /06-Модули и Пакеты (Modules and Packages)/00-Modules_and_Packages/MyMainPackage/SubPackage/__init__.py: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /00-Объекты и Структуры Данных Python (Python Object and Data Structure Basics)/test.txt: -------------------------------------------------------------------------------- 1 | First Line 2 | Second Line -------------------------------------------------------------------------------- /06-Модули и Пакеты (Modules and Packages)/file2.py: -------------------------------------------------------------------------------- 1 | import file1 2 | file1.list1.append(12) 3 | print(file1.list1) -------------------------------------------------------------------------------- /06-Модули и Пакеты (Modules and Packages)/00-Modules_and_Packages/mymodule.py: -------------------------------------------------------------------------------- 1 | def my_func(): 2 | print("Мы находимся в mymodule.py") -------------------------------------------------------------------------------- /06-Модули и Пакеты (Modules and Packages)/file3.py: -------------------------------------------------------------------------------- 1 | import sys 2 | import file1 3 | num = int(sys.argv[1]) 4 | print(file1.myfunc(num)) -------------------------------------------------------------------------------- /06-Модули и Пакеты (Modules and Packages)/file1.py: -------------------------------------------------------------------------------- 1 | def myfunc(x): 2 | return [num for num in range(x) if num%2==0] 3 | list1 = myfunc(11) -------------------------------------------------------------------------------- /07-Ошибки и Обработка Исключений (Errors and Exception Handling)/cap.py: -------------------------------------------------------------------------------- 1 | def cap_text(text): 2 | return text.title() # replace .capitalize() with .title() -------------------------------------------------------------------------------- /06-Модули и Пакеты (Modules and Packages)/00-Modules_and_Packages/MyMainPackage/SubPackage/mysubscript.py: -------------------------------------------------------------------------------- 1 | def sub_report(): 2 | print("Мы находимся в функции внутри mysubscript") -------------------------------------------------------------------------------- /12-Финальный Проект (Final Capstone Python Project)/.DS_Store: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Pierian-Data/Python-Russian/HEAD/12-Финальный Проект (Final Capstone Python Project)/.DS_Store -------------------------------------------------------------------------------- /06-Модули и Пакеты (Modules and Packages)/00-Modules_and_Packages/MyMainPackage/some_main_script.py: -------------------------------------------------------------------------------- 1 | def report_main(): 2 | print("Мы находимся в some_main_script в главном пакете (main package).") -------------------------------------------------------------------------------- /06-Модули и Пакеты (Modules and Packages)/__pycache__/file1.cpython-36.pyc: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Pierian-Data/Python-Russian/HEAD/06-Модули и Пакеты (Modules and Packages)/__pycache__/file1.cpython-36.pyc -------------------------------------------------------------------------------- /00-Объекты и Структуры Данных Python (Python Object and Data Structure Basics)/.ipynb_checkpoints/Untitled-checkpoint.ipynb: -------------------------------------------------------------------------------- 1 | { 2 | "cells": [], 3 | "metadata": {}, 4 | "nbformat": 4, 5 | "nbformat_minor": 2 6 | } 7 | -------------------------------------------------------------------------------- /06-Модули и Пакеты (Modules and Packages)/00-Modules_and_Packages/myprogram.py: -------------------------------------------------------------------------------- 1 | from MyMainPackage.some_main_script import report_main 2 | from MyMainPackage.SubPackage import mysubscript 3 | 4 | report_main() 5 | 6 | mysubscript.sub_report() 7 | -------------------------------------------------------------------------------- /07-Ошибки и Обработка Исключений (Errors and Exception Handling)/__pycache__/cap.cpython-36.pyc: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Pierian-Data/Python-Russian/HEAD/07-Ошибки и Обработка Исключений (Errors and Exception Handling)/__pycache__/cap.cpython-36.pyc -------------------------------------------------------------------------------- /06-Модули и Пакеты (Modules and Packages)/00-Modules_and_Packages/MyMainPackage/__pycache__/__init__.cpython-36.pyc: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Pierian-Data/Python-Russian/HEAD/06-Модули и Пакеты (Modules and Packages)/00-Modules_and_Packages/MyMainPackage/__pycache__/__init__.cpython-36.pyc -------------------------------------------------------------------------------- /06-Модули и Пакеты (Modules and Packages)/01-Name_and_Main/two.py: -------------------------------------------------------------------------------- 1 | import one 2 | 3 | print("print верхнего уровня в two.py") 4 | 5 | one.func() 6 | 7 | if __name__ == "__main__": 8 | print("two.py выполняется напрямую") 9 | else: 10 | print("two.py импортируется в другой модуль") 11 | -------------------------------------------------------------------------------- /06-Модули и Пакеты (Modules and Packages)/00-Modules_and_Packages/MyMainPackage/__pycache__/some_main_script.cpython-36.pyc: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Pierian-Data/Python-Russian/HEAD/06-Модули и Пакеты (Modules and Packages)/00-Modules_and_Packages/MyMainPackage/__pycache__/some_main_script.cpython-36.pyc -------------------------------------------------------------------------------- /07-Ошибки и Обработка Исключений (Errors and Exception Handling)/simple1.py: -------------------------------------------------------------------------------- 1 | """ 2 | A very simple script. 3 | """ 4 | 5 | def myfunc(): 6 | """ 7 | An extremely simple function. 8 | """ 9 | first = 1 10 | second = 2 11 | print(first) 12 | print(second) 13 | 14 | myfunc() -------------------------------------------------------------------------------- /07-Ошибки и Обработка Исключений (Errors and Exception Handling)/simple2.py: -------------------------------------------------------------------------------- 1 | """ 2 | A very simple script. 3 | """ 4 | 5 | def myfunc(): 6 | """ 7 | An extremely simple function. 8 | """ 9 | first = 1 10 | second = 2 11 | print(first) 12 | print('second') 13 | 14 | myfunc() -------------------------------------------------------------------------------- /06-Модули и Пакеты (Modules and Packages)/00-Modules_and_Packages/MyMainPackage/SubPackage/__pycache__/__init__.cpython-36.pyc: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Pierian-Data/Python-Russian/HEAD/06-Модули и Пакеты (Modules and Packages)/00-Modules_and_Packages/MyMainPackage/SubPackage/__pycache__/__init__.cpython-36.pyc -------------------------------------------------------------------------------- /06-Модули и Пакеты (Modules and Packages)/00-Modules_and_Packages/MyMainPackage/SubPackage/__pycache__/mysubscript.cpython-36.pyc: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Pierian-Data/Python-Russian/HEAD/06-Модули и Пакеты (Modules and Packages)/00-Modules_and_Packages/MyMainPackage/SubPackage/__pycache__/mysubscript.cpython-36.pyc -------------------------------------------------------------------------------- /06-Модули и Пакеты (Modules and Packages)/01-Name_and_Main/one.py: -------------------------------------------------------------------------------- 1 | def func(): 2 | print("func() выполняется в one.py") 3 | 4 | print("print верхнего уровня внутри one.py") 5 | 6 | if __name__ == "__main__": 7 | print("one.py выполняется напрямую") 8 | else: 9 | print("one.py импортируется в другой модуль") 10 | -------------------------------------------------------------------------------- /README.md: -------------------------------------------------------------------------------- 1 | # Полный Курс Python 3: от Новичка до Мастера (Питон, Пайтон) 2 | 3 | Материалы курса "Полный Курс Python 3: от Новичка до Мастера (Питон, Пайтон)" (Complete Python 3 Bootcamp) на Udemy 4 | 5 | 6 | Вы можете записаться на этот курс с 95% скидкой по следующей ссылке: 7 | https://www.udemy.com/course/complete-python-bootcamp-russian/?referralCode=C4474B876C493E8062DB 8 | 9 | Спасибо! 10 | -------------------------------------------------------------------------------- /07-Ошибки и Обработка Исключений (Errors and Exception Handling)/test_cap.py: -------------------------------------------------------------------------------- 1 | import unittest 2 | import cap 3 | 4 | class TestCap(unittest.TestCase): 5 | 6 | def test_one_word(self): 7 | text = 'python' 8 | result = cap.cap_text(text) 9 | self.assertEqual(result, 'Python') 10 | 11 | def test_multiple_words(self): 12 | text = 'monty python' 13 | result = cap.cap_text(text) 14 | self.assertEqual(result, 'Monty Python') 15 | 16 | def test_with_apostrophes(self): 17 | text = "monty python's flying circus" 18 | result = cap.cap_text(text) 19 | self.assertEqual(result, "Monty Python's Flying Circus") 20 | 21 | if __name__ == '__main__': 22 | unittest.main() -------------------------------------------------------------------------------- /17-Параллельная Обработка Данных (Parallel Processing)/test2.py: -------------------------------------------------------------------------------- 1 | from random import random 2 | from multiprocessing import Pool 3 | import timeit 4 | import sys 5 | 6 | N = int(sys.argv[1]) # these arguments are passed in from the command line 7 | P = int(sys.argv[2]) 8 | 9 | def find_pi(n): 10 | """ 11 | Function to estimate the value of Pi 12 | """ 13 | inside=0 14 | 15 | for i in range(0,n): 16 | x=random() 17 | y=random() 18 | if (x*x+y*y)**(0.5)<=1: # if i falls inside the circle 19 | inside+=1 20 | 21 | pi=4*inside/n 22 | return pi 23 | 24 | if __name__ == '__main__': 25 | 26 | with Pool(P) as p: 27 | print(timeit.timeit(lambda: print(f'{sum(p.map(find_pi, [N//P]*P))/P:0.5f}'), number=10)) 28 | print(f'{N} total iterations with {P} processes') -------------------------------------------------------------------------------- /17-Параллельная Обработка Данных (Parallel Processing)/test.py: -------------------------------------------------------------------------------- 1 | from random import random 2 | from multiprocessing import Pool 3 | import timeit 4 | 5 | def find_pi(n): 6 | """ 7 | Function to estimate the value of Pi 8 | """ 9 | inside=0 10 | 11 | for i in range(0,n): 12 | x=random() 13 | y=random() 14 | if (x*x+y*y)**(0.5)<=1: # if i falls inside the circle 15 | inside+=1 16 | 17 | pi=4*inside/n 18 | return pi 19 | 20 | if __name__ == '__main__': 21 | N = 10**7 # total iterations 22 | 23 | P = 1 # number of processes 24 | p = Pool(P) 25 | print(timeit.timeit(lambda: print(f'{sum(p.map(find_pi, [N//P]*P))/P:0.7f}'), number=10)) 26 | p.close() 27 | p.join() 28 | print(f'{N} total iterations with {P} processes') 29 | 30 | P = 5 # number of processes 31 | p = Pool(P) 32 | print(timeit.timeit(lambda: print(f'{sum(p.map(find_pi, [N//P]*P))/P:0.7f}'), number=10)) 33 | p.close() 34 | p.join() 35 | print(f'{N} total iterations with {P} processes\n') -------------------------------------------------------------------------------- /12-Финальный Проект (Final Capstone Python Project)/.ipynb_checkpoints/01-Final Capstone Project-checkpoint.ipynb: -------------------------------------------------------------------------------- 1 | { 2 | "cells": [ 3 | { 4 | "cell_type": "markdown", 5 | "metadata": {}, 6 | "source": [ 7 | "# Список вариантов для финального проекта - решения\n", 8 | "\n", 9 | "Некоторые варианты решений на английским языке приведены в папке [**Final Capstone Projects**](http://nbviewer.jupyter.org/github/jmportilla/Complete-Python-Bootcamp/tree/master/Final%20Capstone%20Projects/) !" 10 | ] 11 | }, 12 | { 13 | "cell_type": "code", 14 | "execution_count": null, 15 | "metadata": {}, 16 | "outputs": [], 17 | "source": [] 18 | } 19 | ], 20 | "metadata": { 21 | "kernelspec": { 22 | "display_name": "Python 3", 23 | "language": "python", 24 | "name": "python3" 25 | }, 26 | "language_info": { 27 | "codemirror_mode": { 28 | "name": "ipython", 29 | "version": 3 30 | }, 31 | "file_extension": ".py", 32 | "mimetype": "text/x-python", 33 | "name": "python", 34 | "nbconvert_exporter": "python", 35 | "pygments_lexer": "ipython3", 36 | "version": "3.7.3" 37 | } 38 | }, 39 | "nbformat": 4, 40 | "nbformat_minor": 2 41 | } 42 | -------------------------------------------------------------------------------- /12-Финальный Проект (Final Capstone Python Project)/03-Final Capstone Project.ipynb: -------------------------------------------------------------------------------- 1 | { 2 | "cells": [ 3 | { 4 | "cell_type": "markdown", 5 | "metadata": {}, 6 | "source": [ 7 | "# Список вариантов для финального проекта - решения\n", 8 | "\n", 9 | "Некоторые варианты решений на английским языке приведены в папке [**Final Capstone Projects**](https://github.com/jmportilla/Complete-Python-Bootcamp/blob/master/Final%20Capstone%20Projects/Projects-Solutions/Solution%20Links.md) !" 10 | ] 11 | }, 12 | { 13 | "cell_type": "code", 14 | "execution_count": null, 15 | "metadata": { 16 | "collapsed": true 17 | }, 18 | "outputs": [], 19 | "source": [] 20 | } 21 | ], 22 | "metadata": { 23 | "kernelspec": { 24 | "display_name": "Python 3", 25 | "language": "python", 26 | "name": "python3" 27 | }, 28 | "language_info": { 29 | "codemirror_mode": { 30 | "name": "ipython", 31 | "version": 3 32 | }, 33 | "file_extension": ".py", 34 | "mimetype": "text/x-python", 35 | "name": "python", 36 | "nbconvert_exporter": "python", 37 | "pygments_lexer": "ipython3", 38 | "version": "3.6.1" 39 | } 40 | }, 41 | "nbformat": 4, 42 | "nbformat_minor": 2 43 | } 44 | -------------------------------------------------------------------------------- /12-Финальный Проект (Final Capstone Python Project)/.ipynb_checkpoints/03-Final Capstone Project-checkpoint.ipynb: -------------------------------------------------------------------------------- 1 | { 2 | "cells": [ 3 | { 4 | "cell_type": "markdown", 5 | "metadata": {}, 6 | "source": [ 7 | "# Список вариантов для финального проекта - решения\n", 8 | "\n", 9 | "Некоторые варианты решений на английским языке приведены в папке [**Final Capstone Projects**](https://github.com/jmportilla/Complete-Python-Bootcamp/blob/master/Final%20Capstone%20Projects/Projects-Solutions/Solution%20Links.md) !" 10 | ] 11 | }, 12 | { 13 | "cell_type": "code", 14 | "execution_count": null, 15 | "metadata": { 16 | "collapsed": true 17 | }, 18 | "outputs": [], 19 | "source": [] 20 | } 21 | ], 22 | "metadata": { 23 | "kernelspec": { 24 | "display_name": "Python 3", 25 | "language": "python", 26 | "name": "python3" 27 | }, 28 | "language_info": { 29 | "codemirror_mode": { 30 | "name": "ipython", 31 | "version": 3 32 | }, 33 | "file_extension": ".py", 34 | "mimetype": "text/x-python", 35 | "name": "python", 36 | "nbconvert_exporter": "python", 37 | "pygments_lexer": "ipython3", 38 | "version": "3.6.1" 39 | } 40 | }, 41 | "nbformat": 4, 42 | "nbformat_minor": 2 43 | } 44 | -------------------------------------------------------------------------------- /FAQ - Часто Задаваемые Вопросы.ipynb: -------------------------------------------------------------------------------- 1 | { 2 | "cells": [ 3 | { 4 | "cell_type": "markdown", 5 | "metadata": {}, 6 | "source": [ 7 | "# FAQ - Часто Задаваемые вопросы\n", 8 | "В этом блокноте будут публиковаться ответы на вопросы, часто задаваемые в курсе." 9 | ] 10 | }, 11 | { 12 | "cell_type": "markdown", 13 | "metadata": {}, 14 | "source": [ 15 | "**Как можно увидеть подсказки? Например, DocStrings для функций?**\n", 16 | "\n", 17 | "Для этого нажмите Shift+Tab, когда курсор находится после объекта или функции, и тогда iPython покажет Docstring с дополнительной информацией." 18 | ] 19 | }, 20 | { 21 | "cell_type": "markdown", 22 | "metadata": {}, 23 | "source": [ 24 | "**Как можно написать только начало метода или функции, первые несколько букв, и затем автоматически получить всё название? (Автозаполнение)**\n", 25 | "\n", 26 | "Для этой цели используйте клавишу tab. Работает для методов, объектов и функций. Если подходящих названий несколько, то будет предложено несколько вариантов." 27 | ] 28 | }, 29 | { 30 | "cell_type": "code", 31 | "execution_count": null, 32 | "metadata": { 33 | "collapsed": true 34 | }, 35 | "outputs": [], 36 | "source": [] 37 | } 38 | ], 39 | "metadata": { 40 | "kernelspec": { 41 | "display_name": "Python 3", 42 | "language": "python", 43 | "name": "python3" 44 | }, 45 | "language_info": { 46 | "codemirror_mode": { 47 | "name": "ipython", 48 | "version": 3 49 | }, 50 | "file_extension": ".py", 51 | "mimetype": "text/x-python", 52 | "name": "python", 53 | "nbconvert_exporter": "python", 54 | "pygments_lexer": "ipython3", 55 | "version": "3.6.1" 56 | } 57 | }, 58 | "nbformat": 4, 59 | "nbformat_minor": 1 60 | } 61 | -------------------------------------------------------------------------------- /08-Проект - 2 (Milestone Project - 2)/01-Milestone Project 2 - Assignment.ipynb: -------------------------------------------------------------------------------- 1 | { 2 | "cells": [ 3 | { 4 | "cell_type": "markdown", 5 | "metadata": {}, 6 | "source": [ 7 | "# Домашнее задание - Проект 2 - Игра Блэк-Джек (Двадцать одно)\n", 8 | "В этом проекте Вы создадите карточную игру BlackJack в Python.\n", 9 | "\n", 10 | "Требования следующие:\n", 11 | "\n", 12 | "* Вы должны создать простую текстовую версию игры [Игра Блэк-Джек (Двадцать одно)](https://ru.wikipedia.org/wiki/Блэкджек)\n", 13 | "* В игре будет один игрок против компьютера-дилера (крупье)\n", 14 | "* Игрок может остаться при тех же картах (stand) или запросить ещё карту (hit).\n", 15 | "* Игрок может выбрать сумму, которую он ставит.\n", 16 | "* Нужно следить за общей суммой денег у игрока.\n", 17 | "* Вам нужно информировать игрока о выигрышах, проигрышах, переходе через двадцать один и так далее...\n", 18 | "\n", 19 | "И самое главное:\n", 20 | "\n", 21 | "* **Вы должны использовать объектно-ориентированное программирование и классы в части Вашего кода. Нельзя использовать только функции. Используйте классы для колоды карт и для набора карт у игрока. Есть много разных способов сделать это, так что подумайте!**\n", 22 | "\n", 23 | "\n", 24 | "Также можете дополнить и расширить игру. Например, добавить поддержку нескольких игроков. Реализовать дополнительные правила игры - удвоение ставки (double down), разбиение пар (split) и т.д.! Помните, что Вы можете использовать любые ресурсы для разработки. И, как всегда:\n", 25 | "\n", 26 | "# Наслаждайтесь процессом!" 27 | ] 28 | }, 29 | { 30 | "cell_type": "code", 31 | "execution_count": null, 32 | "metadata": { 33 | "collapsed": true 34 | }, 35 | "outputs": [], 36 | "source": [] 37 | } 38 | ], 39 | "metadata": { 40 | "kernelspec": { 41 | "display_name": "Python 3", 42 | "language": "python", 43 | "name": "python3" 44 | }, 45 | "language_info": { 46 | "codemirror_mode": { 47 | "name": "ipython", 48 | "version": 3 49 | }, 50 | "file_extension": ".py", 51 | "mimetype": "text/x-python", 52 | "name": "python", 53 | "nbconvert_exporter": "python", 54 | "pygments_lexer": "ipython3", 55 | "version": "3.6.1" 56 | } 57 | }, 58 | "nbformat": 4, 59 | "nbformat_minor": 1 60 | } 61 | -------------------------------------------------------------------------------- /08-Проект - 2 (Milestone Project - 2)/.ipynb_checkpoints/01-Milestone Project 2 - Assignment-checkpoint.ipynb: -------------------------------------------------------------------------------- 1 | { 2 | "cells": [ 3 | { 4 | "cell_type": "markdown", 5 | "metadata": {}, 6 | "source": [ 7 | "# Домашнее задание - Проект 2 - Игра Блэк-Джек (Двадцать одно)\n", 8 | "В этом проекте Вы создадите карточную игру BlackJack в Python.\n", 9 | "\n", 10 | "Требования следующие:\n", 11 | "\n", 12 | "* Вы должны создать простую текстовую версию игры [Игра Блэк-Джек (Двадцать одно)](https://ru.wikipedia.org/wiki/Блэкджек)\n", 13 | "* В игре будет один игрок против компьютера-дилера (крупье)\n", 14 | "* Игрок может остаться при тех же картах (stand) или запросить ещё карту (hit).\n", 15 | "* Игрок может выбрать сумму, которую он ставит.\n", 16 | "* Нужно следить за общей суммой денег у игрока.\n", 17 | "* Вам нужно информировать игрока о выигрышах, проигрышах, переходе через двадцать один и так далее...\n", 18 | "\n", 19 | "И самое главное:\n", 20 | "\n", 21 | "* **Вы должны использовать объектно-ориентированное программирование и классы в части Вашего кода. Нельзя использовать только функции. Используйте классы для колоды карт и для набора карт у игрока. Есть много разных способов сделать это, так что подумайте!**\n", 22 | "\n", 23 | "\n", 24 | "Также можете дополнить и расширить игру. Например, добавить поддержку нескольких игроков. Реализовать дополнительные правила игры - удвоение ставки (double down), разбиение пар (split) и т.д.! Помните, что Вы можете использовать любые ресурсы для разработки. И, как всегда:\n", 25 | "\n", 26 | "# Наслаждайтесь процессом!" 27 | ] 28 | }, 29 | { 30 | "cell_type": "code", 31 | "execution_count": null, 32 | "metadata": { 33 | "collapsed": true 34 | }, 35 | "outputs": [], 36 | "source": [] 37 | } 38 | ], 39 | "metadata": { 40 | "kernelspec": { 41 | "display_name": "Python 3", 42 | "language": "python", 43 | "name": "python3" 44 | }, 45 | "language_info": { 46 | "codemirror_mode": { 47 | "name": "ipython", 48 | "version": 3 49 | }, 50 | "file_extension": ".py", 51 | "mimetype": "text/x-python", 52 | "name": "python", 53 | "nbconvert_exporter": "python", 54 | "pygments_lexer": "ipython3", 55 | "version": "3.6.1" 56 | } 57 | }, 58 | "nbformat": 4, 59 | "nbformat_minor": 1 60 | } 61 | -------------------------------------------------------------------------------- /10-Декораторы Python (Python Decorators)/02-Decorators Homework.ipynb: -------------------------------------------------------------------------------- 1 | { 2 | "cells": [ 3 | { 4 | "cell_type": "markdown", 5 | "metadata": {}, 6 | "source": [ 7 | "# Декораторы - домашнее задание (опционально)\n", 8 | "\n", 9 | "Обычно декораторы не встречаются в начале карьеры программирования, поэтому это задание опционально. Посмотрите веб-фреймворк [Flask](http://flask.pocoo.org/). Этот фреймворк можно использовать для создания веб-страниц с помощью Python (предполагая что Вы немного знаете HTML и CSS), и в нём часто используются декораторы! Посмотрите, как в нём используются [view decorators](https://flask.palletsprojects.com/en/1.1.x/patterns/viewdecorators/). Не волнуйтесь, если Вы не полностью понимаете всё, что происходит во Flask. Главная цель этого опционального задания в том, чтобы Вы были в курсе того, что декораторы используются в веб-фреймворках. И если Вы решите стать \"Full-Stack\" веб-разработчиком на Python, то декораторы не будут для Вас сюрпризом. Также Вы можете посмотреть [Django](https://www.djangoproject.com/) - другой (и более популярный) веб-фреймворк для Python, который является более тяжеловесным.\n", 10 | "\n", 11 | "Дополнительная информация:\n", 12 | "\n", 13 | "Фреймворк - это тип библиотеки программного обеспечения, который предоставляет общую функциональность, которую программист может расширить для построения приложений. Flask и Django это хорошие примеры фреймворков, предназначенных для веб разработки.\n", 14 | "\n", 15 | "Фреймворк отличается от простой библиотеки или API. API это фрагмент программного обеспечения, который разработчик может использовать в своем приложении. Фреймворк это нечто более общее - всё ваше приложение структурируется вокруг фреймворка (то есть, фреймворк предоставляет структуру, вокруг которой Вы строите своё приложение).\n", 16 | "\n", 17 | "## Отличная работа!" 18 | ] 19 | }, 20 | { 21 | "cell_type": "code", 22 | "execution_count": null, 23 | "metadata": { 24 | "collapsed": true 25 | }, 26 | "outputs": [], 27 | "source": [] 28 | } 29 | ], 30 | "metadata": { 31 | "kernelspec": { 32 | "display_name": "Python 3", 33 | "language": "python", 34 | "name": "python3" 35 | }, 36 | "language_info": { 37 | "codemirror_mode": { 38 | "name": "ipython", 39 | "version": 3 40 | }, 41 | "file_extension": ".py", 42 | "mimetype": "text/x-python", 43 | "name": "python", 44 | "nbconvert_exporter": "python", 45 | "pygments_lexer": "ipython3", 46 | "version": "3.6.1" 47 | } 48 | }, 49 | "nbformat": 4, 50 | "nbformat_minor": 1 51 | } 52 | -------------------------------------------------------------------------------- /10-Декораторы Python (Python Decorators)/.ipynb_checkpoints/02-Decorators Homework-checkpoint.ipynb: -------------------------------------------------------------------------------- 1 | { 2 | "cells": [ 3 | { 4 | "cell_type": "markdown", 5 | "metadata": {}, 6 | "source": [ 7 | "# Декораторы - домашнее задание (опционально)\n", 8 | "\n", 9 | "Обычно декораторы не встречаются в начале карьеры программирования, поэтому это задание опционально. Посмотрите веб-фреймворк [Flask](http://flask.pocoo.org/). Этот фреймворк можно использовать для создания веб-страниц с помощью Python (предполагая что Вы немного знаете HTML и CSS), и в нём часто используются декораторы! Посмотрите, как в нём используются [view decorators](https://flask.palletsprojects.com/en/1.1.x/patterns/viewdecorators/). Не волнуйтесь, если Вы не полностью понимаете всё, что происходит во Flask. Главная цель этого опционального задания в том, чтобы Вы были в курсе того, что декораторы используются в веб-фреймворках. И если Вы решите стать \"Full-Stack\" веб-разработчиком на Python, то декораторы не будут для Вас сюрпризом. Также Вы можете посмотреть [Django](https://www.djangoproject.com/) - другой (и более популярный) веб-фреймворк для Python, который является более тяжеловесным.\n", 10 | "\n", 11 | "Дополнительная информация:\n", 12 | "\n", 13 | "Фреймворк - это тип библиотеки программного обеспечения, который предоставляет общую функциональность, которую программист может расширить для построения приложений. Flask и Django это хорошие примеры фреймворков, предназначенных для веб разработки.\n", 14 | "\n", 15 | "Фреймворк отличается от простой библиотеки или API. API это фрагмент программного обеспечения, который разработчик может использовать в своем приложении. Фреймворк это нечто более общее - всё ваше приложение структурируется вокруг фреймворка (то есть, фреймворк предоставляет структуру, вокруг которой Вы строите своё приложение).\n", 16 | "\n", 17 | "## Отличная работа!" 18 | ] 19 | }, 20 | { 21 | "cell_type": "code", 22 | "execution_count": null, 23 | "metadata": { 24 | "collapsed": true 25 | }, 26 | "outputs": [], 27 | "source": [] 28 | } 29 | ], 30 | "metadata": { 31 | "kernelspec": { 32 | "display_name": "Python 3", 33 | "language": "python", 34 | "name": "python3" 35 | }, 36 | "language_info": { 37 | "codemirror_mode": { 38 | "name": "ipython", 39 | "version": 3 40 | }, 41 | "file_extension": ".py", 42 | "mimetype": "text/x-python", 43 | "name": "python", 44 | "nbconvert_exporter": "python", 45 | "pygments_lexer": "ipython3", 46 | "version": "3.6.1" 47 | } 48 | }, 49 | "nbformat": 4, 50 | "nbformat_minor": 1 51 | } 52 | -------------------------------------------------------------------------------- /06-Модули и Пакеты (Modules and Packages)/01-Name_and_Main/Explanation.txt: -------------------------------------------------------------------------------- 1 | В некоторых случаях, когда Вы выполняете импорт из модуля, Вам может понадобиться узнать, 2 | используется ли функция модуля для импорта, или же Вы используете сам файл 3 | .py этого модуля. Чтобы проверить это, Вы можете использовать такое условие: 4 | 5 | if __name__ == "__main__": 6 | 7 | Например: 8 | 9 | Когда Ваш скрипт выполняется из командной строки с помощью интерпретатора Python: 10 | 11 | python myscript.py 12 | 13 | то выполняется весь код, который находится на нулевом уровне отступа. Функции 14 | и классы создаются, но они только создаются - их код не выполняется. 15 | В отличие от других языков программирования, здесь нет функции main(), которая бы 16 | автоматически запускалась - неявно этой функцией является весь код на верхнем уровне отступа. 17 | 18 | В этом случае, код на верхнем уровне отступа это блок if. __name__ это встроенная переменная, 19 | которая содержит название текущего модуля. Однако, если модуль выполняется напрямую, 20 | (как в примере myscript.py выше), то вместо этого __name__ принимает значение "__main__". 21 | Таким образом, Вы можете проверить, запускается ли Ваш скрипт напрямую, 22 | или же он импортируется откуда-то еще. Для этого можно сделать такую проверку: 23 | 24 | if __name__ == "__main__": 25 | ... 26 | 27 | Если этот код импортируется в другой модуль, то определения функций и классов импортируется, но код main() не выполняется. В качестве примера, рассмотрим два скрипта: 28 | 29 | # file one.py 30 | def func(): 31 | print("func() выполняется в one.py") 32 | 33 | print("print верхнего уровня в one.py") 34 | 35 | if __name__ == "__main__": 36 | print("one.py запускается напрямую") 37 | else: 38 | print("one.py импортируется в другой модуль") 39 | 40 | и затем: 41 | 42 | # file two.py 43 | import one 44 | 45 | print("print верхнего уровня в two.py") 46 | one.func() 47 | 48 | if __name__ == "__main__": 49 | print("two.py запускается напрямую") 50 | else: 51 | print("two.py импортируется в другой модуль") 52 | 53 | Теперь, если Вы запускаете интерпретатор вот так: 54 | 55 | python one.py 56 | 57 | то результат будет таким: 58 | 59 | print верхнего уровня в one.py 60 | 61 | one.py запускается напрямую 62 | 63 | Если вместо этого Вы запускаете two.py: 64 | 65 | python two.py 66 | 67 | то получите 68 | 69 | print верхнего уровня в one.py 70 | one.py импортируется в другой модуль 71 | print верхнего уровня в two.py 72 | func() выполняется в one.py 73 | two.py запускается напрямую 74 | 75 | Таким образом, когда модуль one загружается, его имя __name__ равно "one", а не __main__. 76 | -------------------------------------------------------------------------------- /04-Проект - 1 (Milestone Project - 1)/01-Milestone Project 1 - Assignment.ipynb: -------------------------------------------------------------------------------- 1 | { 2 | "cells": [ 3 | { 4 | "cell_type": "markdown", 5 | "metadata": {}, 6 | "source": [ 7 | "# Домашнее задание - Проект 1\n", 8 | "## Поздравляю Вас с тем, что Вы добрались до Проекта 1!\n", 9 | "Вы уже изучили очень много материала, и готовы работать над настоящим проектом.\n", 10 | "\n", 11 | "Ваше задание: напишите игру крестики-нолики (Tic Tac Toe) на Python. Можете использовать любую среду разработки IDE.\n", 12 | "\n", 13 | "Требования следующие:\n", 14 | "\n", 15 | "* В игру должны играть 2 игрока (оба за одним и тем же компьютером)\n", 16 | "* На каждом ходе игрока, текущее состояние поля выводится на экран\n", 17 | "* Вы должны получать на вход координаты клетки, куда следует поместить символ игрока, и затем помещать символ на поле\n", 18 | "\n", 19 | "Можете использовать поиск в Google, чтобы найти любой момент, который нужно (но не ищите готовое решение - что-то вроде \"Tic Tac Toe in Python\" - тогда Вы ничему не научитесь!). Имейте ввиду, что этот проект может занять от нескольких часов до нескольких дней.\n", 20 | "\n", 21 | "Для этого задания есть следующие 4 блокнота Jupyter Notebooks:\n", 22 | "\n", 23 | "* Этот блокнот\n", 24 | "* Блокнот \"Walkthrough Steps Workbook\" с шагами решения\n", 25 | "* Блокнот \"Complete Walkthrough Solution\" с решением\n", 26 | "* Блокнот \"Advanced Solution\" с другим решением (ОПЦИОНАЛЬНО)\n", 27 | "\n", 28 | "Рекомендую Вам постараться начать проект самостоятельно, без использования этих материалов. Если Вы застряли, то посмотрите следующую лекцию, в ней приведены полезные подсказки и шаги. Если и это не поможет, тогда посмотрите блокнот \"Walkthrough Steps Workbook\", в котором проект разбит на отдельные шаги для решения. Всё еще застряли? Тогда посмотрите видео с решением, чтобы получить больше помощи в выполнении проекта!" 29 | ] 30 | }, 31 | { 32 | "cell_type": "markdown", 33 | "metadata": {}, 34 | "source": [ 35 | "В этом задании есть сложные места... и это хорошо! Я уверен, что если Вы добрались до этого места в курсе, то у Вас есть все инструменты и знания, чтобы справиться с этим проектом. Помните - никто Вас не торопит, так что не торопитесь, проведите исследование, и помните:\n", 36 | "\n", 37 | "## Наслаждайтесь процессом!" 38 | ] 39 | }, 40 | { 41 | "cell_type": "code", 42 | "execution_count": null, 43 | "metadata": { 44 | "collapsed": true 45 | }, 46 | "outputs": [], 47 | "source": [] 48 | } 49 | ], 50 | "metadata": { 51 | "kernelspec": { 52 | "display_name": "Python 3", 53 | "language": "python", 54 | "name": "python3" 55 | }, 56 | "language_info": { 57 | "codemirror_mode": { 58 | "name": "ipython", 59 | "version": 3 60 | }, 61 | "file_extension": ".py", 62 | "mimetype": "text/x-python", 63 | "name": "python", 64 | "nbconvert_exporter": "python", 65 | "pygments_lexer": "ipython3", 66 | "version": "3.6.1" 67 | } 68 | }, 69 | "nbformat": 4, 70 | "nbformat_minor": 2 71 | } 72 | -------------------------------------------------------------------------------- /04-Проект - 1 (Milestone Project - 1)/.ipynb_checkpoints/01-Milestone Project 1 - Assignment-checkpoint.ipynb: -------------------------------------------------------------------------------- 1 | { 2 | "cells": [ 3 | { 4 | "cell_type": "markdown", 5 | "metadata": {}, 6 | "source": [ 7 | "# Домашнее задание - Проект 1\n", 8 | "## Поздравляю Вас с тем, что Вы добрались до Проекта 1!\n", 9 | "Вы уже изучили очень много материала, и готовы работать над настоящим проектом.\n", 10 | "\n", 11 | "Ваше задание: напишите игру крестики-нолики (Tic Tac Toe) на Python. Можете использовать любую среду разработки IDE.\n", 12 | "\n", 13 | "Требования следующие:\n", 14 | "\n", 15 | "* В игру должны играть 2 игрока (оба за одним и тем же компьютером)\n", 16 | "* На каждом ходе игрока, текущее состояние поля выводится на экран\n", 17 | "* Вы должны получать на вход координаты клетки, куда следует поместить символ игрока, и затем помещать символ на поле\n", 18 | "\n", 19 | "Можете использовать поиск в Google, чтобы найти любой момент, который нужно (но не ищите готовое решение - что-то вроде \"Tic Tac Toe in Python\" - тогда Вы ничему не научитесь!). Имейте ввиду, что этот проект может занять от нескольких часов до нескольких дней.\n", 20 | "\n", 21 | "Для этого задания есть следующие 4 блокнота Jupyter Notebooks:\n", 22 | "\n", 23 | "* Этот блокнот\n", 24 | "* Блокнот \"Walkthrough Steps Workbook\" с шагами решения\n", 25 | "* Блокнот \"Complete Walkthrough Solution\" с решением\n", 26 | "* Блокнот \"Advanced Solution\" с другим решением (ОПЦИОНАЛЬНО)\n", 27 | "\n", 28 | "Рекомендую Вам постараться начать проект самостоятельно, без использования этих материалов. Если Вы застряли, то посмотрите следующую лекцию, в ней приведены полезные подсказки и шаги. Если и это не поможет, тогда посмотрите блокнот \"Walkthrough Steps Workbook\", в котором проект разбит на отдельные шаги для решения. Всё еще застряли? Тогда посмотрите видео с решением, чтобы получить больше помощи в выполнении проекта!" 29 | ] 30 | }, 31 | { 32 | "cell_type": "markdown", 33 | "metadata": {}, 34 | "source": [ 35 | "В этом задании есть сложные места... и это хорошо! Я уверен, что если Вы добрались до этого места в курсе, то у Вас есть все инструменты и знания, чтобы справиться с этим проектом. Помните - никто Вас не торопит, так что не торопитесь, проведите исследование, и помните:\n", 36 | "\n", 37 | "## Наслаждайтесь процессом!" 38 | ] 39 | }, 40 | { 41 | "cell_type": "code", 42 | "execution_count": null, 43 | "metadata": { 44 | "collapsed": true 45 | }, 46 | "outputs": [], 47 | "source": [] 48 | } 49 | ], 50 | "metadata": { 51 | "kernelspec": { 52 | "display_name": "Python 3", 53 | "language": "python", 54 | "name": "python3" 55 | }, 56 | "language_info": { 57 | "codemirror_mode": { 58 | "name": "ipython", 59 | "version": 3 60 | }, 61 | "file_extension": ".py", 62 | "mimetype": "text/x-python", 63 | "name": "python", 64 | "nbconvert_exporter": "python", 65 | "pygments_lexer": "ipython3", 66 | "version": "3.6.1" 67 | } 68 | }, 69 | "nbformat": 4, 70 | "nbformat_minor": 2 71 | } 72 | -------------------------------------------------------------------------------- /09-Встроенные функции (Built-in Functions)/07-Complex.ipynb: -------------------------------------------------------------------------------- 1 | { 2 | "cells": [ 3 | { 4 | "cell_type": "markdown", 5 | "metadata": {}, 6 | "source": [ 7 | "# complex()\n", 8 | "\n", 9 | "complex() возвращает комплексное число real + imag*1j (вещественная и мнимая часть). \n", 10 | "\n", 11 | "Если первый параметр это строка, то она будет интерпретирована как комплексное число, и функция должна быть вызвана без второго параметра. Второй параметр не может быть строкой. Любой из параметров может быть числом (в том числе комплексным). Если imag не указано, то по умолчанию оно равно нулю, и конструктор создает число, похожее на int или float. Если оба параметра не указаны, то функция возвращает 0j.\n", 12 | "\n", 13 | "Если Вы занимаетесь математикой или инженерными науками, для которых нужны комплексные числа - например динамика, управляющие системы, сопротивление цепи, то этот инструментарий в Python будет Вам полезен.\n", 14 | "\n", 15 | "Рассмотрим несколько примеров:" 16 | ] 17 | }, 18 | { 19 | "cell_type": "code", 20 | "execution_count": 1, 21 | "metadata": {}, 22 | "outputs": [ 23 | { 24 | "data": { 25 | "text/plain": [ 26 | "(2+3j)" 27 | ] 28 | }, 29 | "execution_count": 1, 30 | "metadata": {}, 31 | "output_type": "execute_result" 32 | } 33 | ], 34 | "source": [ 35 | "# Create 2+3j\n", 36 | "complex(2,3)" 37 | ] 38 | }, 39 | { 40 | "cell_type": "code", 41 | "execution_count": 2, 42 | "metadata": {}, 43 | "outputs": [ 44 | { 45 | "data": { 46 | "text/plain": [ 47 | "(10+1j)" 48 | ] 49 | }, 50 | "execution_count": 2, 51 | "metadata": {}, 52 | "output_type": "execute_result" 53 | } 54 | ], 55 | "source": [ 56 | "complex(10,1)" 57 | ] 58 | }, 59 | { 60 | "cell_type": "markdown", 61 | "metadata": {}, 62 | "source": [ 63 | "Мы также можем передавать строки:" 64 | ] 65 | }, 66 | { 67 | "cell_type": "code", 68 | "execution_count": 3, 69 | "metadata": {}, 70 | "outputs": [ 71 | { 72 | "data": { 73 | "text/plain": [ 74 | "(12+2j)" 75 | ] 76 | }, 77 | "execution_count": 3, 78 | "metadata": {}, 79 | "output_type": "execute_result" 80 | } 81 | ], 82 | "source": [ 83 | "complex('12+2j')" 84 | ] 85 | }, 86 | { 87 | "cell_type": "markdown", 88 | "metadata": {}, 89 | "source": [ 90 | "Вот и всё, что касается этой функции. Имейте её ввиду, когда Вам понадобится работа с комплексными числами в Python!" 91 | ] 92 | } 93 | ], 94 | "metadata": { 95 | "kernelspec": { 96 | "display_name": "Python 3", 97 | "language": "python", 98 | "name": "python3" 99 | }, 100 | "language_info": { 101 | "codemirror_mode": { 102 | "name": "ipython", 103 | "version": 3 104 | }, 105 | "file_extension": ".py", 106 | "mimetype": "text/x-python", 107 | "name": "python", 108 | "nbconvert_exporter": "python", 109 | "pygments_lexer": "ipython3", 110 | "version": "3.6.1" 111 | } 112 | }, 113 | "nbformat": 4, 114 | "nbformat_minor": 1 115 | } 116 | -------------------------------------------------------------------------------- /09-Встроенные функции (Built-in Functions)/.ipynb_checkpoints/07-Complex-checkpoint.ipynb: -------------------------------------------------------------------------------- 1 | { 2 | "cells": [ 3 | { 4 | "cell_type": "markdown", 5 | "metadata": {}, 6 | "source": [ 7 | "# complex()\n", 8 | "\n", 9 | "complex() возвращает комплексное число real + imag*1j (вещественная и мнимая часть). \n", 10 | "\n", 11 | "Если первый параметр это строка, то она будет интерпретирована как комплексное число, и функция должна быть вызвана без второго параметра. Второй параметр не может быть строкой. Любой из параметров может быть числом (в том числе комплексным). Если imag не указано, то по умолчанию оно равно нулю, и конструктор создает число, похожее на int или float. Если оба параметра не указаны, то функция возвращает 0j.\n", 12 | "\n", 13 | "Если Вы занимаетесь математикой или инженерными науками, для которых нужны комплексные числа - например динамика, управляющие системы, сопротивление цепи, то этот инструментарий в Python будет Вам полезен.\n", 14 | "\n", 15 | "Рассмотрим несколько примеров:" 16 | ] 17 | }, 18 | { 19 | "cell_type": "code", 20 | "execution_count": 1, 21 | "metadata": {}, 22 | "outputs": [ 23 | { 24 | "data": { 25 | "text/plain": [ 26 | "(2+3j)" 27 | ] 28 | }, 29 | "execution_count": 1, 30 | "metadata": {}, 31 | "output_type": "execute_result" 32 | } 33 | ], 34 | "source": [ 35 | "# Create 2+3j\n", 36 | "complex(2,3)" 37 | ] 38 | }, 39 | { 40 | "cell_type": "code", 41 | "execution_count": 2, 42 | "metadata": {}, 43 | "outputs": [ 44 | { 45 | "data": { 46 | "text/plain": [ 47 | "(10+1j)" 48 | ] 49 | }, 50 | "execution_count": 2, 51 | "metadata": {}, 52 | "output_type": "execute_result" 53 | } 54 | ], 55 | "source": [ 56 | "complex(10,1)" 57 | ] 58 | }, 59 | { 60 | "cell_type": "markdown", 61 | "metadata": {}, 62 | "source": [ 63 | "Мы также можем передавать строки:" 64 | ] 65 | }, 66 | { 67 | "cell_type": "code", 68 | "execution_count": 3, 69 | "metadata": {}, 70 | "outputs": [ 71 | { 72 | "data": { 73 | "text/plain": [ 74 | "(12+2j)" 75 | ] 76 | }, 77 | "execution_count": 3, 78 | "metadata": {}, 79 | "output_type": "execute_result" 80 | } 81 | ], 82 | "source": [ 83 | "complex('12+2j')" 84 | ] 85 | }, 86 | { 87 | "cell_type": "markdown", 88 | "metadata": {}, 89 | "source": [ 90 | "Вот и всё, что касается этой функции. Имейте её ввиду, когда Вам понадобится работа с комплексными числами в Python!" 91 | ] 92 | } 93 | ], 94 | "metadata": { 95 | "kernelspec": { 96 | "display_name": "Python 3", 97 | "language": "python", 98 | "name": "python3" 99 | }, 100 | "language_info": { 101 | "codemirror_mode": { 102 | "name": "ipython", 103 | "version": 3 104 | }, 105 | "file_extension": ".py", 106 | "mimetype": "text/x-python", 107 | "name": "python", 108 | "nbconvert_exporter": "python", 109 | "pygments_lexer": "ipython3", 110 | "version": "3.6.1" 111 | } 112 | }, 113 | "nbformat": 4, 114 | "nbformat_minor": 1 115 | } 116 | -------------------------------------------------------------------------------- /09-Встроенные функции (Built-in Functions)/05-Enumerate.ipynb: -------------------------------------------------------------------------------- 1 | { 2 | "cells": [ 3 | { 4 | "cell_type": "markdown", 5 | "metadata": {}, 6 | "source": [ 7 | "# enumerate()\n", 8 | "\n", 9 | "В этой лекции мы изучим очень полезную встроенную функцию: enumerate(). Enumerate предоставляет счётчик, который увеличивается во время итераций по объекту. Результат возвращается в виде кортежа (count,element). По сути, эта функция эквивалентна следующему коду:\n", 10 | "\n", 11 | " def enumerate(sequence, start=0):\n", 12 | " n = start\n", 13 | " for elem in sequence:\n", 14 | " yield n, elem\n", 15 | " n += 1\n", 16 | "\n", 17 | "## Пример" 18 | ] 19 | }, 20 | { 21 | "cell_type": "code", 22 | "execution_count": 1, 23 | "metadata": {}, 24 | "outputs": [ 25 | { 26 | "name": "stdout", 27 | "output_type": "stream", 28 | "text": [ 29 | "0\n", 30 | "a\n", 31 | "1\n", 32 | "b\n", 33 | "2\n", 34 | "c\n" 35 | ] 36 | } 37 | ], 38 | "source": [ 39 | "lst = ['a','b','c']\n", 40 | "\n", 41 | "for number,item in enumerate(lst):\n", 42 | " print(number)\n", 43 | " print(item)" 44 | ] 45 | }, 46 | { 47 | "cell_type": "markdown", 48 | "metadata": {}, 49 | "source": [ 50 | "Функция enumerate() особенно полезна, когда Вам нужно добавить счётчик и что-нибудь отслеживать. Например:" 51 | ] 52 | }, 53 | { 54 | "cell_type": "code", 55 | "execution_count": 2, 56 | "metadata": {}, 57 | "outputs": [ 58 | { 59 | "name": "stdout", 60 | "output_type": "stream", 61 | "text": [ 62 | "a\n", 63 | "b\n" 64 | ] 65 | } 66 | ], 67 | "source": [ 68 | "for count,item in enumerate(lst):\n", 69 | " if count >= 2:\n", 70 | " break\n", 71 | " else:\n", 72 | " print(item)" 73 | ] 74 | }, 75 | { 76 | "cell_type": "markdown", 77 | "metadata": {}, 78 | "source": [ 79 | "enumerate() имеет опциональный параметр \"start\", который может заменить значение 0 по умолчанию:" 80 | ] 81 | }, 82 | { 83 | "cell_type": "code", 84 | "execution_count": 3, 85 | "metadata": {}, 86 | "outputs": [ 87 | { 88 | "data": { 89 | "text/plain": [ 90 | "[(3, 'March'), (4, 'April'), (5, 'May'), (6, 'June')]" 91 | ] 92 | }, 93 | "execution_count": 3, 94 | "metadata": {}, 95 | "output_type": "execute_result" 96 | } 97 | ], 98 | "source": [ 99 | "months = ['March','April','May','June']\n", 100 | "\n", 101 | "list(enumerate(months,start=3))" 102 | ] 103 | }, 104 | { 105 | "cell_type": "markdown", 106 | "metadata": {}, 107 | "source": [ 108 | "Отлично! Теперь Вы знаете функцию enumerate и её возможные варианты применения." 109 | ] 110 | } 111 | ], 112 | "metadata": { 113 | "kernelspec": { 114 | "display_name": "Python 3", 115 | "language": "python", 116 | "name": "python3" 117 | }, 118 | "language_info": { 119 | "codemirror_mode": { 120 | "name": "ipython", 121 | "version": 3 122 | }, 123 | "file_extension": ".py", 124 | "mimetype": "text/x-python", 125 | "name": "python", 126 | "nbconvert_exporter": "python", 127 | "pygments_lexer": "ipython3", 128 | "version": "3.6.1" 129 | } 130 | }, 131 | "nbformat": 4, 132 | "nbformat_minor": 1 133 | } 134 | -------------------------------------------------------------------------------- /09-Встроенные функции (Built-in Functions)/.ipynb_checkpoints/05-Enumerate-checkpoint.ipynb: -------------------------------------------------------------------------------- 1 | { 2 | "cells": [ 3 | { 4 | "cell_type": "markdown", 5 | "metadata": {}, 6 | "source": [ 7 | "# enumerate()\n", 8 | "\n", 9 | "В этой лекции мы изучим очень полезную встроенную функцию: enumerate(). Enumerate предоставляет счётчик, который увеличивается во время итераций по объекту. Результат возвращается в виде кортежа (count,element). По сути, эта функция эквивалентна следующему коду:\n", 10 | "\n", 11 | " def enumerate(sequence, start=0):\n", 12 | " n = start\n", 13 | " for elem in sequence:\n", 14 | " yield n, elem\n", 15 | " n += 1\n", 16 | "\n", 17 | "## Пример" 18 | ] 19 | }, 20 | { 21 | "cell_type": "code", 22 | "execution_count": 1, 23 | "metadata": {}, 24 | "outputs": [ 25 | { 26 | "name": "stdout", 27 | "output_type": "stream", 28 | "text": [ 29 | "0\n", 30 | "a\n", 31 | "1\n", 32 | "b\n", 33 | "2\n", 34 | "c\n" 35 | ] 36 | } 37 | ], 38 | "source": [ 39 | "lst = ['a','b','c']\n", 40 | "\n", 41 | "for number,item in enumerate(lst):\n", 42 | " print(number)\n", 43 | " print(item)" 44 | ] 45 | }, 46 | { 47 | "cell_type": "markdown", 48 | "metadata": {}, 49 | "source": [ 50 | "Функция enumerate() особенно полезна, когда Вам нужно добавить счётчик и что-нибудь отслеживать. Например:" 51 | ] 52 | }, 53 | { 54 | "cell_type": "code", 55 | "execution_count": 2, 56 | "metadata": {}, 57 | "outputs": [ 58 | { 59 | "name": "stdout", 60 | "output_type": "stream", 61 | "text": [ 62 | "a\n", 63 | "b\n" 64 | ] 65 | } 66 | ], 67 | "source": [ 68 | "for count,item in enumerate(lst):\n", 69 | " if count >= 2:\n", 70 | " break\n", 71 | " else:\n", 72 | " print(item)" 73 | ] 74 | }, 75 | { 76 | "cell_type": "markdown", 77 | "metadata": {}, 78 | "source": [ 79 | "enumerate() имеет опциональный параметр \"start\", который может заменить значение 0 по умолчанию:" 80 | ] 81 | }, 82 | { 83 | "cell_type": "code", 84 | "execution_count": 3, 85 | "metadata": {}, 86 | "outputs": [ 87 | { 88 | "data": { 89 | "text/plain": [ 90 | "[(3, 'March'), (4, 'April'), (5, 'May'), (6, 'June')]" 91 | ] 92 | }, 93 | "execution_count": 3, 94 | "metadata": {}, 95 | "output_type": "execute_result" 96 | } 97 | ], 98 | "source": [ 99 | "months = ['March','April','May','June']\n", 100 | "\n", 101 | "list(enumerate(months,start=3))" 102 | ] 103 | }, 104 | { 105 | "cell_type": "markdown", 106 | "metadata": {}, 107 | "source": [ 108 | "Отлично! Теперь Вы знаете функцию enumerate и её возможные варианты применения." 109 | ] 110 | } 111 | ], 112 | "metadata": { 113 | "kernelspec": { 114 | "display_name": "Python 3", 115 | "language": "python", 116 | "name": "python3" 117 | }, 118 | "language_info": { 119 | "codemirror_mode": { 120 | "name": "ipython", 121 | "version": 3 122 | }, 123 | "file_extension": ".py", 124 | "mimetype": "text/x-python", 125 | "name": "python", 126 | "nbconvert_exporter": "python", 127 | "pygments_lexer": "ipython3", 128 | "version": "3.6.1" 129 | } 130 | }, 131 | "nbformat": 4, 132 | "nbformat_minor": 1 133 | } 134 | -------------------------------------------------------------------------------- /09-Встроенные функции (Built-in Functions)/06-all() and any().ipynb: -------------------------------------------------------------------------------- 1 | { 2 | "cells": [ 3 | { 4 | "cell_type": "markdown", 5 | "metadata": {}, 6 | "source": [ 7 | "# all() and any()" 8 | ] 9 | }, 10 | { 11 | "cell_type": "markdown", 12 | "metadata": {}, 13 | "source": [ 14 | "all() и any() - это встроенные функции Python, которые позволяют сделать удобные проверки boolean для итерируемого объекта. all() возвращает True, если все элементы в итерируемом объекте равны True. Это эквивалентно следующему коду:\n", 15 | "\n", 16 | " def all(iterable):\n", 17 | " for element in iterable:\n", 18 | " if not element:\n", 19 | " return False\n", 20 | " return True\n", 21 | " \n", 22 | "any() возвращает True, если любой из элементов итерируемого объекта равен True. Это эквивалентно следующему коду:\n", 23 | "\n", 24 | " def any(iterable):\n", 25 | " for element in iterable:\n", 26 | " if element:\n", 27 | " return True\n", 28 | " return False\n", 29 | " " 30 | ] 31 | }, 32 | { 33 | "cell_type": "code", 34 | "execution_count": null, 35 | "metadata": { 36 | "collapsed": true 37 | }, 38 | "outputs": [], 39 | "source": [] 40 | }, 41 | { 42 | "cell_type": "markdown", 43 | "metadata": {}, 44 | "source": [ 45 | "Рассмотрим несколько примеров для этих функций. Должно быть достаточно просто:" 46 | ] 47 | }, 48 | { 49 | "cell_type": "code", 50 | "execution_count": 1, 51 | "metadata": { 52 | "collapsed": true 53 | }, 54 | "outputs": [], 55 | "source": [ 56 | "lst = [True,True,False,True]" 57 | ] 58 | }, 59 | { 60 | "cell_type": "code", 61 | "execution_count": 2, 62 | "metadata": {}, 63 | "outputs": [ 64 | { 65 | "data": { 66 | "text/plain": [ 67 | "False" 68 | ] 69 | }, 70 | "execution_count": 2, 71 | "metadata": {}, 72 | "output_type": "execute_result" 73 | } 74 | ], 75 | "source": [ 76 | "all(lst)" 77 | ] 78 | }, 79 | { 80 | "cell_type": "markdown", 81 | "metadata": {}, 82 | "source": [ 83 | "Возвращает False, потому что не все элементы равны True." 84 | ] 85 | }, 86 | { 87 | "cell_type": "code", 88 | "execution_count": 3, 89 | "metadata": {}, 90 | "outputs": [ 91 | { 92 | "data": { 93 | "text/plain": [ 94 | "True" 95 | ] 96 | }, 97 | "execution_count": 3, 98 | "metadata": {}, 99 | "output_type": "execute_result" 100 | } 101 | ], 102 | "source": [ 103 | "any(lst)" 104 | ] 105 | }, 106 | { 107 | "cell_type": "markdown", 108 | "metadata": {}, 109 | "source": [ 110 | "Возвращает True, потому что есть хотя бы один элемент в списке, равный True" 111 | ] 112 | }, 113 | { 114 | "cell_type": "markdown", 115 | "metadata": {}, 116 | "source": [ 117 | "Вот и всё - теперь Вы знакомы с функциями any() и all()." 118 | ] 119 | } 120 | ], 121 | "metadata": { 122 | "kernelspec": { 123 | "display_name": "Python 3", 124 | "language": "python", 125 | "name": "python3" 126 | }, 127 | "language_info": { 128 | "codemirror_mode": { 129 | "name": "ipython", 130 | "version": 3 131 | }, 132 | "file_extension": ".py", 133 | "mimetype": "text/x-python", 134 | "name": "python", 135 | "nbconvert_exporter": "python", 136 | "pygments_lexer": "ipython3", 137 | "version": "3.6.1" 138 | } 139 | }, 140 | "nbformat": 4, 141 | "nbformat_minor": 1 142 | } 143 | -------------------------------------------------------------------------------- /09-Встроенные функции (Built-in Functions)/.ipynb_checkpoints/06-all() and any()-checkpoint.ipynb: -------------------------------------------------------------------------------- 1 | { 2 | "cells": [ 3 | { 4 | "cell_type": "markdown", 5 | "metadata": {}, 6 | "source": [ 7 | "# all() and any()" 8 | ] 9 | }, 10 | { 11 | "cell_type": "markdown", 12 | "metadata": {}, 13 | "source": [ 14 | "all() и any() - это встроенные функции Python, которые позволяют сделать удобные проверки boolean для итерируемого объекта. all() возвращает True, если все элементы в итерируемом объекте равны True. Это эквивалентно следующему коду:\n", 15 | "\n", 16 | " def all(iterable):\n", 17 | " for element in iterable:\n", 18 | " if not element:\n", 19 | " return False\n", 20 | " return True\n", 21 | " \n", 22 | "any() возвращает True, если любой из элементов итерируемого объекта равен True. Это эквивалентно следующему коду:\n", 23 | "\n", 24 | " def any(iterable):\n", 25 | " for element in iterable:\n", 26 | " if element:\n", 27 | " return True\n", 28 | " return False\n", 29 | " " 30 | ] 31 | }, 32 | { 33 | "cell_type": "code", 34 | "execution_count": null, 35 | "metadata": { 36 | "collapsed": true 37 | }, 38 | "outputs": [], 39 | "source": [] 40 | }, 41 | { 42 | "cell_type": "markdown", 43 | "metadata": {}, 44 | "source": [ 45 | "Рассмотрим несколько примеров для этих функций. Должно быть достаточно просто:" 46 | ] 47 | }, 48 | { 49 | "cell_type": "code", 50 | "execution_count": 1, 51 | "metadata": { 52 | "collapsed": true 53 | }, 54 | "outputs": [], 55 | "source": [ 56 | "lst = [True,True,False,True]" 57 | ] 58 | }, 59 | { 60 | "cell_type": "code", 61 | "execution_count": 2, 62 | "metadata": {}, 63 | "outputs": [ 64 | { 65 | "data": { 66 | "text/plain": [ 67 | "False" 68 | ] 69 | }, 70 | "execution_count": 2, 71 | "metadata": {}, 72 | "output_type": "execute_result" 73 | } 74 | ], 75 | "source": [ 76 | "all(lst)" 77 | ] 78 | }, 79 | { 80 | "cell_type": "markdown", 81 | "metadata": {}, 82 | "source": [ 83 | "Возвращает False, потому что не все элементы равны True." 84 | ] 85 | }, 86 | { 87 | "cell_type": "code", 88 | "execution_count": 3, 89 | "metadata": {}, 90 | "outputs": [ 91 | { 92 | "data": { 93 | "text/plain": [ 94 | "True" 95 | ] 96 | }, 97 | "execution_count": 3, 98 | "metadata": {}, 99 | "output_type": "execute_result" 100 | } 101 | ], 102 | "source": [ 103 | "any(lst)" 104 | ] 105 | }, 106 | { 107 | "cell_type": "markdown", 108 | "metadata": {}, 109 | "source": [ 110 | "Возвращает True, потому что есть хотя бы один элемент в списке, равный True" 111 | ] 112 | }, 113 | { 114 | "cell_type": "markdown", 115 | "metadata": {}, 116 | "source": [ 117 | "Вот и всё - теперь Вы знакомы с функциями any() и all()." 118 | ] 119 | } 120 | ], 121 | "metadata": { 122 | "kernelspec": { 123 | "display_name": "Python 3", 124 | "language": "python", 125 | "name": "python3" 126 | }, 127 | "language_info": { 128 | "codemirror_mode": { 129 | "name": "ipython", 130 | "version": 3 131 | }, 132 | "file_extension": ".py", 133 | "mimetype": "text/x-python", 134 | "name": "python", 135 | "nbconvert_exporter": "python", 136 | "pygments_lexer": "ipython3", 137 | "version": "3.6.1" 138 | } 139 | }, 140 | "nbformat": 4, 141 | "nbformat_minor": 1 142 | } 143 | -------------------------------------------------------------------------------- /09-Встроенные функции (Built-in Functions)/03-Filter.ipynb: -------------------------------------------------------------------------------- 1 | { 2 | "cells": [ 3 | { 4 | "cell_type": "markdown", 5 | "metadata": {}, 6 | "source": [ 7 | "# filter\n", 8 | "\n", 9 | "Функция filter(function, list) предоставляет удобный способ отфильтровать элементы итерируемого объекта и оставить только те из них, для которых указанная в параметре функция возвращает True. \n", 10 | "\n", 11 | "В качестве первого параметра filter(function,list) принимает на вход функцию, которая возвращает значение Boolean (True или False). Эта функция применяется к каждому элементу итерируемого объекта. Если функция возвращает True, то элемент добавляется в результат.\n", 12 | "\n", 13 | "Как и в случае с map(), filter() возвращает *итератор* - то есть, filter возвращает один результат за другим, по мере необходимости. Итераторы и генераторы будут изучены в одной из ближайших лекций. Здесь же, поскольку объёмы данных в наших примерах малы, мы можем преобразовать filter() в список и получить результаты сразу же.\n", 14 | "\n", 15 | "Рассмотрим несколько примеров:" 16 | ] 17 | }, 18 | { 19 | "cell_type": "code", 20 | "execution_count": 1, 21 | "metadata": { 22 | "collapsed": true 23 | }, 24 | "outputs": [], 25 | "source": [ 26 | "# Сначала создадим функцию\n", 27 | "def even_check(num):\n", 28 | " if num%2 ==0:\n", 29 | " return True" 30 | ] 31 | }, 32 | { 33 | "cell_type": "markdown", 34 | "metadata": {}, 35 | "source": [ 36 | "Теперь отфильтруем список чисел. Замечание: указание названия функции внутри filter без скобок может показаться странным, но помните, что функции также являются объектами." 37 | ] 38 | }, 39 | { 40 | "cell_type": "code", 41 | "execution_count": 2, 42 | "metadata": {}, 43 | "outputs": [ 44 | { 45 | "data": { 46 | "text/plain": [ 47 | "[0, 2, 4, 6, 8, 10, 12, 14, 16, 18]" 48 | ] 49 | }, 50 | "execution_count": 2, 51 | "metadata": {}, 52 | "output_type": "execute_result" 53 | } 54 | ], 55 | "source": [ 56 | "lst =range(20)\n", 57 | "\n", 58 | "list(filter(even_check,lst))" 59 | ] 60 | }, 61 | { 62 | "cell_type": "markdown", 63 | "metadata": {}, 64 | "source": [ 65 | "filter() чаще используется с функциями лямбда, поскольку обычно мы используем filter для разовой задачи, для которой не стоит создавать отдельную функцию. Давайте повторим предыдущий пример с помощью выражения лямбда:" 66 | ] 67 | }, 68 | { 69 | "cell_type": "code", 70 | "execution_count": 3, 71 | "metadata": {}, 72 | "outputs": [ 73 | { 74 | "data": { 75 | "text/plain": [ 76 | "[0, 2, 4, 6, 8, 10, 12, 14, 16, 18]" 77 | ] 78 | }, 79 | "execution_count": 3, 80 | "metadata": {}, 81 | "output_type": "execute_result" 82 | } 83 | ], 84 | "source": [ 85 | "list(filter(lambda x: x%2==0,lst))" 86 | ] 87 | }, 88 | { 89 | "cell_type": "markdown", 90 | "metadata": {}, 91 | "source": [ 92 | "Отлично! Теперь Вы знакомы с функцией filter(), и знаете, как применять её в Вашем коде!" 93 | ] 94 | } 95 | ], 96 | "metadata": { 97 | "kernelspec": { 98 | "display_name": "Python 3", 99 | "language": "python", 100 | "name": "python3" 101 | }, 102 | "language_info": { 103 | "codemirror_mode": { 104 | "name": "ipython", 105 | "version": 3 106 | }, 107 | "file_extension": ".py", 108 | "mimetype": "text/x-python", 109 | "name": "python", 110 | "nbconvert_exporter": "python", 111 | "pygments_lexer": "ipython3", 112 | "version": "3.6.1" 113 | } 114 | }, 115 | "nbformat": 4, 116 | "nbformat_minor": 1 117 | } 118 | -------------------------------------------------------------------------------- /09-Встроенные функции (Built-in Functions)/.ipynb_checkpoints/03-Filter-checkpoint.ipynb: -------------------------------------------------------------------------------- 1 | { 2 | "cells": [ 3 | { 4 | "cell_type": "markdown", 5 | "metadata": {}, 6 | "source": [ 7 | "# filter\n", 8 | "\n", 9 | "Функция filter(function, list) предоставляет удобный способ отфильтровать элементы итерируемого объекта и оставить только те из них, для которых указанная в параметре функция возвращает True. \n", 10 | "\n", 11 | "В качестве первого параметра filter(function,list) принимает на вход функцию, которая возвращает значение Boolean (True или False). Эта функция применяется к каждому элементу итерируемого объекта. Если функция возвращает True, то элемент добавляется в результат.\n", 12 | "\n", 13 | "Как и в случае с map(), filter() возвращает *итератор* - то есть, filter возвращает один результат за другим, по мере необходимости. Итераторы и генераторы будут изучены в одной из ближайших лекций. Здесь же, поскольку объёмы данных в наших примерах малы, мы можем преобразовать filter() в список и получить результаты сразу же.\n", 14 | "\n", 15 | "Рассмотрим несколько примеров:" 16 | ] 17 | }, 18 | { 19 | "cell_type": "code", 20 | "execution_count": 1, 21 | "metadata": { 22 | "collapsed": true 23 | }, 24 | "outputs": [], 25 | "source": [ 26 | "# Сначала создадим функцию\n", 27 | "def even_check(num):\n", 28 | " if num%2 ==0:\n", 29 | " return True" 30 | ] 31 | }, 32 | { 33 | "cell_type": "markdown", 34 | "metadata": {}, 35 | "source": [ 36 | "Теперь отфильтруем список чисел. Замечание: указание названия функции внутри filter без скобок может показаться странным, но помните, что функции также являются объектами." 37 | ] 38 | }, 39 | { 40 | "cell_type": "code", 41 | "execution_count": 2, 42 | "metadata": {}, 43 | "outputs": [ 44 | { 45 | "data": { 46 | "text/plain": [ 47 | "[0, 2, 4, 6, 8, 10, 12, 14, 16, 18]" 48 | ] 49 | }, 50 | "execution_count": 2, 51 | "metadata": {}, 52 | "output_type": "execute_result" 53 | } 54 | ], 55 | "source": [ 56 | "lst =range(20)\n", 57 | "\n", 58 | "list(filter(even_check,lst))" 59 | ] 60 | }, 61 | { 62 | "cell_type": "markdown", 63 | "metadata": {}, 64 | "source": [ 65 | "filter() чаще используется с функциями лямбда, поскольку обычно мы используем filter для разовой задачи, для которой не стоит создавать отдельную функцию. Давайте повторим предыдущий пример с помощью выражения лямбда:" 66 | ] 67 | }, 68 | { 69 | "cell_type": "code", 70 | "execution_count": 3, 71 | "metadata": {}, 72 | "outputs": [ 73 | { 74 | "data": { 75 | "text/plain": [ 76 | "[0, 2, 4, 6, 8, 10, 12, 14, 16, 18]" 77 | ] 78 | }, 79 | "execution_count": 3, 80 | "metadata": {}, 81 | "output_type": "execute_result" 82 | } 83 | ], 84 | "source": [ 85 | "list(filter(lambda x: x%2==0,lst))" 86 | ] 87 | }, 88 | { 89 | "cell_type": "markdown", 90 | "metadata": {}, 91 | "source": [ 92 | "Отлично! Теперь Вы знакомы с функцией filter(), и знаете, как применять её в Вашем коде!" 93 | ] 94 | } 95 | ], 96 | "metadata": { 97 | "kernelspec": { 98 | "display_name": "Python 3", 99 | "language": "python", 100 | "name": "python3" 101 | }, 102 | "language_info": { 103 | "codemirror_mode": { 104 | "name": "ipython", 105 | "version": 3 106 | }, 107 | "file_extension": ".py", 108 | "mimetype": "text/x-python", 109 | "name": "python", 110 | "nbconvert_exporter": "python", 111 | "pygments_lexer": "ipython3", 112 | "version": "3.6.1" 113 | } 114 | }, 115 | "nbformat": 4, 116 | "nbformat_minor": 1 117 | } 118 | -------------------------------------------------------------------------------- /16-Бонусные Материалы - Введение в Графические Интерфейсы (Bonus Material - Introduction to GUIs)/08-Advanced Widget Styling with Layout.ipynb: -------------------------------------------------------------------------------- 1 | { 2 | "cells": [ 3 | { 4 | "cell_type": "markdown", 5 | "metadata": {}, 6 | "source": [ 7 | "# Стилизация виджетов с помощью Layout - дополнительные материалы\n", 8 | "\n", 9 | "Эта лекция является расширением лекции **Стилизация виджетов**. В ней описываются различные варианты изменений для HTML и CSS, которые можно сделать с помощью атрибута `layout`." 10 | ] 11 | }, 12 | { 13 | "cell_type": "markdown", 14 | "metadata": {}, 15 | "source": [ 16 | "## Атрибут `layout`\n", 17 | "Интерактивные виджеты Jupyter содержат атрибут `layout`, который предоставляет доступ к свойствам CSS, влияющим на расположение виджетов.\n", 18 | "\n", 19 | "### Доступные свойства CSS\n", 20 | "
Указанные ниже свойства соответствуют значениям свойств CSS с таким же названием (нижние подчёркивания заменяются на тире), и применяются в элементам DOM верхнего уровня для соответствующего виджета.
\n", 21 | "\n", 22 | "#### Размеры\n", 23 | "* `height`\n", 24 | "* `width`\n", 25 | "* `max_height`\n", 26 | "* `max_width`\n", 27 | "* `min_height`\n", 28 | "* `min_width`\n", 29 | "\n", 30 | "#### Отображение\n", 31 | "* `visibility`\n", 32 | "* `display`\n", 33 | "* `overflow`\n", 34 | "* `overflow_x`\n", 35 | "* `overflow_y`\n", 36 | "\n", 37 | "#### Модель прямоугольника\n", 38 | "* `border`\n", 39 | "* `margin`\n", 40 | "* `padding`\n", 41 | "\n", 42 | "#### Позиционирование\n", 43 | "* `top`\n", 44 | "* `left`\n", 45 | "* `bottom`\n", 46 | "* `right`\n", 47 | "\n", 48 | "#### Flexbox\n", 49 | "* `order`\n", 50 | "* `flex_flow`\n", 51 | "* `align_items`\n", 52 | "* `flex`\n", 53 | "* `align_self`\n", 54 | "* `align_content`\n", 55 | "* `justify_content`\n", 56 | "\n", 57 | "### Сокращения для свойств CSS\n", 58 | "\n", 59 | "Вы могли заметить, что отдельные свойства CSS, такие как `margin-[top/right/bottom/left]`, кажется что отсутствуют. То же самое относится к `padding-[top/right/bottom/left]` и т.д.\n", 60 | "\n", 61 | "На самом деле Вы можете атомарно указать поля `[top/right/bottom/left]` с помощью только атрибута `margin`, передавая строку `'100px 150px 100px 80px'` для полей `top`, `right`, `bottom` и `left`, присваивая им соответственно значения `100`, `150`, `100` и `80` пикселей.\n", 62 | "\n", 63 | "Аналогично, атрибут `flex` может хранить значения для `flex-grow`, `flex-shrink` и `flex-basis`. Атрибут `border` это свойство для `border-width`, `border-style (требуется)`, и `border-color`." 64 | ] 65 | }, 66 | { 67 | "cell_type": "code", 68 | "execution_count": 19, 69 | "metadata": { 70 | "collapsed": true 71 | }, 72 | "outputs": [], 73 | "source": [ 74 | "import ipywidgets as widgets\n", 75 | "from IPython.display import display" 76 | ] 77 | }, 78 | { 79 | "cell_type": "markdown", 80 | "metadata": {}, 81 | "source": [ 82 | "# Резюме\n", 83 | "\n", 84 | "Теперь у Вас есть понимание того, как стилизуются виджеты!" 85 | ] 86 | } 87 | ], 88 | "metadata": { 89 | "cell_tags": [ 90 | [ 91 | "", 92 | null 93 | ] 94 | ], 95 | "kernelspec": { 96 | "display_name": "Python 3", 97 | "language": "python", 98 | "name": "python3" 99 | }, 100 | "language_info": { 101 | "codemirror_mode": { 102 | "name": "ipython", 103 | "version": 3 104 | }, 105 | "file_extension": ".py", 106 | "mimetype": "text/x-python", 107 | "name": "python", 108 | "nbconvert_exporter": "python", 109 | "pygments_lexer": "ipython3", 110 | "version": "3.6.1" 111 | } 112 | }, 113 | "nbformat": 4, 114 | "nbformat_minor": 1 115 | } 116 | -------------------------------------------------------------------------------- /07-Ошибки и Обработка Исключений (Errors and Exception Handling)/03-Errors and Exceptions Homework - Solution.ipynb: -------------------------------------------------------------------------------- 1 | { 2 | "cells": [ 3 | { 4 | "cell_type": "markdown", 5 | "metadata": {}, 6 | "source": [ 7 | "# Ошибки и исключения - домашнее задание - РЕШЕНИЯ" 8 | ] 9 | }, 10 | { 11 | "cell_type": "markdown", 12 | "metadata": {}, 13 | "source": [ 14 | "### Задача 1\n", 15 | "Обработайте исключение, которое вызывает код ниже, с помощью блоков try и except." 16 | ] 17 | }, 18 | { 19 | "cell_type": "code", 20 | "execution_count": 1, 21 | "metadata": {}, 22 | "outputs": [ 23 | { 24 | "name": "stdout", 25 | "output_type": "stream", 26 | "text": [ 27 | "Произошла ошибка!\n" 28 | ] 29 | } 30 | ], 31 | "source": [ 32 | "try:\n", 33 | " for i in ['a','b','c']:\n", 34 | " print(i**2)\n", 35 | "except:\n", 36 | " print(\"Произошла ошибка!\")" 37 | ] 38 | }, 39 | { 40 | "cell_type": "markdown", 41 | "metadata": {}, 42 | "source": [ 43 | "### Задача 2\n", 44 | "Обработайте исключение, которое вызывает код ниже, с помощью блоков try и except. Затем используйте блок finally, чтобы сказать, что всё сделано." 45 | ] 46 | }, 47 | { 48 | "cell_type": "code", 49 | "execution_count": 2, 50 | "metadata": {}, 51 | "outputs": [ 52 | { 53 | "name": "stdout", 54 | "output_type": "stream", 55 | "text": [ 56 | "Ошибка - деление на нуль!\n", 57 | "Всё сделано!\n" 58 | ] 59 | } 60 | ], 61 | "source": [ 62 | "x = 5\n", 63 | "y = 0\n", 64 | "try:\n", 65 | " z = x/y\n", 66 | "except ZeroDivisionError:\n", 67 | " print(\"Ошибка - деление на нуль!\")\n", 68 | "finally:\n", 69 | " print('Всё сделано!')" 70 | ] 71 | }, 72 | { 73 | "cell_type": "markdown", 74 | "metadata": {}, 75 | "source": [ 76 | "### Задача 3\n", 77 | "Напишите функцию, которая спрашивает пользователя ввести число, и затем выводит это число в квадрате. Используйте цикл while и блоки try, except и else для обработки некорректно введённых данных." 78 | ] 79 | }, 80 | { 81 | "cell_type": "code", 82 | "execution_count": 3, 83 | "metadata": { 84 | "collapsed": true 85 | }, 86 | "outputs": [], 87 | "source": [ 88 | "def ask():\n", 89 | " \n", 90 | " while True:\n", 91 | " try:\n", 92 | " n = int(input('Введите число: '))\n", 93 | " except:\n", 94 | " print('Произошла ошибка! Попробуйте снова!')\n", 95 | " continue\n", 96 | " else:\n", 97 | " break\n", 98 | " \n", 99 | " \n", 100 | " print('Спасибо! Квадрат числа: ',n**2)" 101 | ] 102 | }, 103 | { 104 | "cell_type": "code", 105 | "execution_count": 4, 106 | "metadata": {}, 107 | "outputs": [ 108 | { 109 | "name": "stdout", 110 | "output_type": "stream", 111 | "text": [ 112 | "Введите число: null\n", 113 | "Произошла ошибка! Попробуйте снова!\n", 114 | "Введите число: 2\n", 115 | "Спасибо! Квадрат числа: 4\n" 116 | ] 117 | } 118 | ], 119 | "source": [ 120 | "ask()" 121 | ] 122 | }, 123 | { 124 | "cell_type": "markdown", 125 | "metadata": {}, 126 | "source": [ 127 | "# Отличная работа!" 128 | ] 129 | } 130 | ], 131 | "metadata": { 132 | "kernelspec": { 133 | "display_name": "Python 3", 134 | "language": "python", 135 | "name": "python3" 136 | }, 137 | "language_info": { 138 | "codemirror_mode": { 139 | "name": "ipython", 140 | "version": 3 141 | }, 142 | "file_extension": ".py", 143 | "mimetype": "text/x-python", 144 | "name": "python", 145 | "nbconvert_exporter": "python", 146 | "pygments_lexer": "ipython3", 147 | "version": "3.6.1" 148 | } 149 | }, 150 | "nbformat": 4, 151 | "nbformat_minor": 1 152 | } 153 | -------------------------------------------------------------------------------- /07-Ошибки и Обработка Исключений (Errors and Exception Handling)/.ipynb_checkpoints/03-Errors and Exceptions Homework - Solution-checkpoint.ipynb: -------------------------------------------------------------------------------- 1 | { 2 | "cells": [ 3 | { 4 | "cell_type": "markdown", 5 | "metadata": {}, 6 | "source": [ 7 | "# Ошибки и исключения - домашнее задание - РЕШЕНИЯ" 8 | ] 9 | }, 10 | { 11 | "cell_type": "markdown", 12 | "metadata": {}, 13 | "source": [ 14 | "### Задача 1\n", 15 | "Обработайте исключение, которое вызывает код ниже, с помощью блоков try и except." 16 | ] 17 | }, 18 | { 19 | "cell_type": "code", 20 | "execution_count": 1, 21 | "metadata": {}, 22 | "outputs": [ 23 | { 24 | "name": "stdout", 25 | "output_type": "stream", 26 | "text": [ 27 | "Произошла ошибка!\n" 28 | ] 29 | } 30 | ], 31 | "source": [ 32 | "try:\n", 33 | " for i in ['a','b','c']:\n", 34 | " print(i**2)\n", 35 | "except:\n", 36 | " print(\"Произошла ошибка!\")" 37 | ] 38 | }, 39 | { 40 | "cell_type": "markdown", 41 | "metadata": {}, 42 | "source": [ 43 | "### Задача 2\n", 44 | "Обработайте исключение, которое вызывает код ниже, с помощью блоков try и except. Затем используйте блок finally, чтобы сказать, что всё сделано." 45 | ] 46 | }, 47 | { 48 | "cell_type": "code", 49 | "execution_count": 2, 50 | "metadata": {}, 51 | "outputs": [ 52 | { 53 | "name": "stdout", 54 | "output_type": "stream", 55 | "text": [ 56 | "Ошибка - деление на нуль!\n", 57 | "Всё сделано!\n" 58 | ] 59 | } 60 | ], 61 | "source": [ 62 | "x = 5\n", 63 | "y = 0\n", 64 | "try:\n", 65 | " z = x/y\n", 66 | "except ZeroDivisionError:\n", 67 | " print(\"Ошибка - деление на нуль!\")\n", 68 | "finally:\n", 69 | " print('Всё сделано!')" 70 | ] 71 | }, 72 | { 73 | "cell_type": "markdown", 74 | "metadata": {}, 75 | "source": [ 76 | "### Задача 3\n", 77 | "Напишите функцию, которая спрашивает пользователя ввести число, и затем выводит это число в квадрате. Используйте цикл while и блоки try, except и else для обработки некорректно введённых данных." 78 | ] 79 | }, 80 | { 81 | "cell_type": "code", 82 | "execution_count": 3, 83 | "metadata": { 84 | "collapsed": true 85 | }, 86 | "outputs": [], 87 | "source": [ 88 | "def ask():\n", 89 | " \n", 90 | " while True:\n", 91 | " try:\n", 92 | " n = int(input('Введите число: '))\n", 93 | " except:\n", 94 | " print('Произошла ошибка! Попробуйте снова!')\n", 95 | " continue\n", 96 | " else:\n", 97 | " break\n", 98 | " \n", 99 | " \n", 100 | " print('Спасибо! Квадрат числа: ',n**2)" 101 | ] 102 | }, 103 | { 104 | "cell_type": "code", 105 | "execution_count": 4, 106 | "metadata": {}, 107 | "outputs": [ 108 | { 109 | "name": "stdout", 110 | "output_type": "stream", 111 | "text": [ 112 | "Введите число: null\n", 113 | "Произошла ошибка! Попробуйте снова!\n", 114 | "Введите число: 2\n", 115 | "Спасибо! Квадрат числа: 4\n" 116 | ] 117 | } 118 | ], 119 | "source": [ 120 | "ask()" 121 | ] 122 | }, 123 | { 124 | "cell_type": "markdown", 125 | "metadata": {}, 126 | "source": [ 127 | "# Отличная работа!" 128 | ] 129 | } 130 | ], 131 | "metadata": { 132 | "kernelspec": { 133 | "display_name": "Python 3", 134 | "language": "python", 135 | "name": "python3" 136 | }, 137 | "language_info": { 138 | "codemirror_mode": { 139 | "name": "ipython", 140 | "version": 3 141 | }, 142 | "file_extension": ".py", 143 | "mimetype": "text/x-python", 144 | "name": "python", 145 | "nbconvert_exporter": "python", 146 | "pygments_lexer": "ipython3", 147 | "version": "3.6.1" 148 | } 149 | }, 150 | "nbformat": 4, 151 | "nbformat_minor": 1 152 | } 153 | -------------------------------------------------------------------------------- /02-Операторы Python (Python Statements)/01-Introduction to Python Statements.ipynb: -------------------------------------------------------------------------------- 1 | { 2 | "cells": [ 3 | { 4 | "cell_type": "markdown", 5 | "metadata": { 6 | "slideshow": { 7 | "slide_type": "slide" 8 | } 9 | }, 10 | "source": [ 11 | "# Введение в операторы Python \n", 12 | "\n", 13 | "В этой лекции мы сделаем обзор операторов Python, а также отметим основные отличия между Python и другими языками программирования, такими как C++. \n", 14 | "\n", 15 | "Для такого подхода есть две причины:\n", 16 | "\n", 17 | " 1) Если Вы знаете другой язык программирования, то Вы быстро освоите основы Python.\n", 18 | " 2) Изучение операторов позволит Вам легче читать код на других языках программирования." 19 | ] 20 | }, 21 | { 22 | "cell_type": "markdown", 23 | "metadata": { 24 | "slideshow": { 25 | "slide_type": "slide" 26 | } 27 | }, 28 | "source": [ 29 | "## Python и другие языки программирования\n", 30 | "\n", 31 | "Давайте напишем простое условие сравнения:\n", 32 | "\"Если a больше b, то присвоит a значение 2, и b значение 4\"\n", 33 | "\n", 34 | "И посмотрим две версии, как можно написать оператор if (мы изучим оператор if более подробно чуть позже).\n", 35 | "\n", 36 | "**Версия 1 (другие языки)**\n", 37 | "\n", 38 | " if (a>b){\n", 39 | " a = 2;\n", 40 | " b = 4;\n", 41 | " }\n", 42 | " \n", 43 | "**Версия 2 (Python)** \n", 44 | "\n", 45 | " if a>b:\n", 46 | " a = 2\n", 47 | " b = 4" 48 | ] 49 | }, 50 | { 51 | "cell_type": "markdown", 52 | "metadata": {}, 53 | "source": [ 54 | "Можно заметить, что код в Python более компактный и лучше читается, по сравнению с первой версией. За счёт чего это происходит в Python?\n", 55 | "\n", 56 | "Давайте рассмотрим основные отличия:\n", 57 | "\n", 58 | "Python не использует ( ) и { }, вместо этого используются два элемента: *двоеточие* и *пробелы*. Оператор if завершается двоеточием, и далее используются пробелы (отступы) для кода, который должен быть выполнен в случае, если выполняется условие if.\n", 59 | "\n", 60 | "Другое отличие - отсутствие точек с запятой в Python. Во многих других языках программирования, точки с запятой означают окончание команды. Однако в Python, конец строки это то же самое, что и окончание команды.\n", 61 | "\n", 62 | "И чтобы завершить этот краткий обзор отличий, давайте взглянем подробнее на синтаксис отступов, сравнив Python с другими языками:\n", 63 | "\n", 64 | "## Отступы\n", 65 | "\n", 66 | "Псевдо-код ниже показывает использование пробелов и отступов в Python:\n", 67 | "\n", 68 | "**другие языки**\n", 69 | "\n", 70 | " if (x)\n", 71 | " if(y)\n", 72 | " code-statement;\n", 73 | " else\n", 74 | " another-code-statement;\n", 75 | " \n", 76 | "**Python**\n", 77 | " \n", 78 | " if x:\n", 79 | " if y:\n", 80 | " code-statement\n", 81 | " else:\n", 82 | " another-code-statement" 83 | ] 84 | }, 85 | { 86 | "cell_type": "markdown", 87 | "metadata": {}, 88 | "source": [ 89 | "Обратите внимание, что в Python отступы ОЧЕНЬ важны . Это значит, что читаемость кода является ключевым элементом дизайна языка Python.\n", 90 | "\n", 91 | "Далее мы погрузимся в детали, начав программировать в Python!" 92 | ] 93 | }, 94 | { 95 | "cell_type": "markdown", 96 | "metadata": { 97 | "collapsed": true 98 | }, 99 | "source": [ 100 | "## Время написать код!" 101 | ] 102 | } 103 | ], 104 | "metadata": { 105 | "kernelspec": { 106 | "display_name": "Python 3", 107 | "language": "python", 108 | "name": "python3" 109 | }, 110 | "language_info": { 111 | "codemirror_mode": { 112 | "name": "ipython", 113 | "version": 3 114 | }, 115 | "file_extension": ".py", 116 | "mimetype": "text/x-python", 117 | "name": "python", 118 | "nbconvert_exporter": "python", 119 | "pygments_lexer": "ipython3", 120 | "version": "3.6.1" 121 | } 122 | }, 123 | "nbformat": 4, 124 | "nbformat_minor": 1 125 | } 126 | -------------------------------------------------------------------------------- /02-Операторы Python (Python Statements)/.ipynb_checkpoints/01-Introduction to Python Statements-checkpoint.ipynb: -------------------------------------------------------------------------------- 1 | { 2 | "cells": [ 3 | { 4 | "cell_type": "markdown", 5 | "metadata": { 6 | "slideshow": { 7 | "slide_type": "slide" 8 | } 9 | }, 10 | "source": [ 11 | "# Введение в операторы Python \n", 12 | "\n", 13 | "В этой лекции мы сделаем обзор операторов Python, а также отметим основные отличия между Python и другими языками программирования, такими как C++. \n", 14 | "\n", 15 | "Для такого подхода есть две причины:\n", 16 | "\n", 17 | " 1) Если Вы знаете другой язык программирования, то Вы быстро освоите основы Python.\n", 18 | " 2) Изучение операторов позволит Вам легче читать код на других языках программирования." 19 | ] 20 | }, 21 | { 22 | "cell_type": "markdown", 23 | "metadata": { 24 | "slideshow": { 25 | "slide_type": "slide" 26 | } 27 | }, 28 | "source": [ 29 | "## Python и другие языки программирования\n", 30 | "\n", 31 | "Давайте напишем простое условие сравнения:\n", 32 | "\"Если a больше b, то присвоит a значение 2, и b значение 4\"\n", 33 | "\n", 34 | "И посмотрим две версии, как можно написать оператор if (мы изучим оператор if более подробно чуть позже).\n", 35 | "\n", 36 | "**Версия 1 (другие языки)**\n", 37 | "\n", 38 | " if (a>b){\n", 39 | " a = 2;\n", 40 | " b = 4;\n", 41 | " }\n", 42 | " \n", 43 | "**Версия 2 (Python)** \n", 44 | "\n", 45 | " if a>b:\n", 46 | " a = 2\n", 47 | " b = 4" 48 | ] 49 | }, 50 | { 51 | "cell_type": "markdown", 52 | "metadata": {}, 53 | "source": [ 54 | "Можно заметить, что код в Python более компактный и лучше читается, по сравнению с первой версией. За счёт чего это происходит в Python?\n", 55 | "\n", 56 | "Давайте рассмотрим основные отличия:\n", 57 | "\n", 58 | "Python не использует ( ) и { }, вместо этого используются два элемента: *двоеточие* и *пробелы*. Оператор if завершается двоеточием, и далее используются пробелы (отступы) для кода, который должен быть выполнен в случае, если выполняется условие if.\n", 59 | "\n", 60 | "Другое отличие - отсутствие точек с запятой в Python. Во многих других языках программирования, точки с запятой означают окончание команды. Однако в Python, конец строки это то же самое, что и окончание команды.\n", 61 | "\n", 62 | "И чтобы завершить этот краткий обзор отличий, давайте взглянем подробнее на синтаксис отступов, сравнив Python с другими языками:\n", 63 | "\n", 64 | "## Отступы\n", 65 | "\n", 66 | "Псевдо-код ниже показывает использование пробелов и отступов в Python:\n", 67 | "\n", 68 | "**другие языки**\n", 69 | "\n", 70 | " if (x)\n", 71 | " if(y)\n", 72 | " code-statement;\n", 73 | " else\n", 74 | " another-code-statement;\n", 75 | " \n", 76 | "**Python**\n", 77 | " \n", 78 | " if x:\n", 79 | " if y:\n", 80 | " code-statement\n", 81 | " else:\n", 82 | " another-code-statement" 83 | ] 84 | }, 85 | { 86 | "cell_type": "markdown", 87 | "metadata": {}, 88 | "source": [ 89 | "Обратите внимание, что в Python отступы ОЧЕНЬ важны . Это значит, что читаемость кода является ключевым элементом дизайна языка Python.\n", 90 | "\n", 91 | "Далее мы погрузимся в детали, начав программировать в Python!" 92 | ] 93 | }, 94 | { 95 | "cell_type": "markdown", 96 | "metadata": { 97 | "collapsed": true 98 | }, 99 | "source": [ 100 | "## Время написать код!" 101 | ] 102 | } 103 | ], 104 | "metadata": { 105 | "kernelspec": { 106 | "display_name": "Python 3", 107 | "language": "python", 108 | "name": "python3" 109 | }, 110 | "language_info": { 111 | "codemirror_mode": { 112 | "name": "ipython", 113 | "version": 3 114 | }, 115 | "file_extension": ".py", 116 | "mimetype": "text/x-python", 117 | "name": "python", 118 | "nbconvert_exporter": "python", 119 | "pygments_lexer": "ipython3", 120 | "version": "3.6.1" 121 | } 122 | }, 123 | "nbformat": 4, 124 | "nbformat_minor": 1 125 | } 126 | -------------------------------------------------------------------------------- /02-Операторы Python (Python Statements)/.ipynb_checkpoints/05-range()-checkpoint.ipynb: -------------------------------------------------------------------------------- 1 | { 2 | "cells": [ 3 | { 4 | "cell_type": "markdown", 5 | "metadata": {}, 6 | "source": [ 7 | "# range()\n", 8 | "\n", 9 | "In this short lecture we will be discussing the range function. We haven't developed a very deep level of knowledge of functions yet, but we can understand the basics of this simple (but extremely useful!) function.\n", 10 | "\n", 11 | "range() allows us to generate a list of numbers ranging from a starting point *up to but not including* an ending point. We can also specify step size. Let's walk through a few examples:" 12 | ] 13 | }, 14 | { 15 | "cell_type": "code", 16 | "execution_count": 1, 17 | "metadata": {}, 18 | "outputs": [ 19 | { 20 | "data": { 21 | "text/plain": [ 22 | "[0, 1, 2, 3, 4, 5, 6, 7, 8, 9]" 23 | ] 24 | }, 25 | "execution_count": 1, 26 | "metadata": {}, 27 | "output_type": "execute_result" 28 | } 29 | ], 30 | "source": [ 31 | "list(range(0,10))" 32 | ] 33 | }, 34 | { 35 | "cell_type": "markdown", 36 | "metadata": {}, 37 | "source": [ 38 | "To see the output of range() as a list, we *cast* it as a list as shown above. This is rarely done, as normally range is used in for loops." 39 | ] 40 | }, 41 | { 42 | "cell_type": "code", 43 | "execution_count": 6, 44 | "metadata": {}, 45 | "outputs": [ 46 | { 47 | "data": { 48 | "text/plain": [ 49 | "range" 50 | ] 51 | }, 52 | "execution_count": 6, 53 | "metadata": {}, 54 | "output_type": "execute_result" 55 | } 56 | ], 57 | "source": [ 58 | "# Range objects\n", 59 | "x =range(0,10)\n", 60 | "type(x)" 61 | ] 62 | }, 63 | { 64 | "cell_type": "markdown", 65 | "metadata": {}, 66 | "source": [ 67 | "range objects behave like *generators* - they don't produce every value all at once, but deliver them one at a time as needed. Behind the scenes this saves on overhead since you're not storing every value, and it improves the performance of your code! We will learn more about generators later on in the course." 68 | ] 69 | }, 70 | { 71 | "cell_type": "code", 72 | "execution_count": 3, 73 | "metadata": {}, 74 | "outputs": [], 75 | "source": [ 76 | "start = 0 #Default\n", 77 | "stop = 20 \n", 78 | "x = range(start,stop)" 79 | ] 80 | }, 81 | { 82 | "cell_type": "code", 83 | "execution_count": 4, 84 | "metadata": {}, 85 | "outputs": [ 86 | { 87 | "data": { 88 | "text/plain": [ 89 | "[0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19]" 90 | ] 91 | }, 92 | "execution_count": 4, 93 | "metadata": {}, 94 | "output_type": "execute_result" 95 | } 96 | ], 97 | "source": [ 98 | "list(x)" 99 | ] 100 | }, 101 | { 102 | "cell_type": "markdown", 103 | "metadata": {}, 104 | "source": [ 105 | "Great! Notice how it went *up to* 20, but doesn't actually produce 20. Just like in indexing. What about step size? We can specify that as a third argument:" 106 | ] 107 | }, 108 | { 109 | "cell_type": "code", 110 | "execution_count": 5, 111 | "metadata": {}, 112 | "outputs": [ 113 | { 114 | "data": { 115 | "text/plain": [ 116 | "[0, 2, 4, 6, 8, 10, 12, 14, 16, 18]" 117 | ] 118 | }, 119 | "execution_count": 5, 120 | "metadata": {}, 121 | "output_type": "execute_result" 122 | } 123 | ], 124 | "source": [ 125 | "x = range(start,stop,2)\n", 126 | "\n", 127 | "#Show\n", 128 | "list(x)" 129 | ] 130 | }, 131 | { 132 | "cell_type": "markdown", 133 | "metadata": { 134 | "collapsed": true 135 | }, 136 | "source": [ 137 | "You should now have a good understanding of how to use range() in Python." 138 | ] 139 | } 140 | ], 141 | "metadata": { 142 | "kernelspec": { 143 | "display_name": "Python 3", 144 | "language": "python", 145 | "name": "python3" 146 | }, 147 | "language_info": { 148 | "codemirror_mode": { 149 | "name": "ipython", 150 | "version": 3 151 | }, 152 | "file_extension": ".py", 153 | "mimetype": "text/x-python", 154 | "name": "python", 155 | "nbconvert_exporter": "python", 156 | "pygments_lexer": "ipython3", 157 | "version": "3.6.2" 158 | } 159 | }, 160 | "nbformat": 4, 161 | "nbformat_minor": 1 162 | } 163 | -------------------------------------------------------------------------------- /05-Объектно-Ориентированное Программирование (Object Oriented Programming)/02-Object Oriented Programming Homework.ipynb: -------------------------------------------------------------------------------- 1 | { 2 | "cells": [ 3 | { 4 | "cell_type": "markdown", 5 | "metadata": {}, 6 | "source": [ 7 | "# Объектно-ориентированное программирование\n", 8 | "## Домашнее задание\n", 9 | "\n", 10 | "#### Задача 1\n", 11 | "Реализуйте методы класса Line (линия), который принимает на вход координаты в виде двух кортежей, и возвращает угол наклона (slope) и длину (distance) этой линии." 12 | ] 13 | }, 14 | { 15 | "cell_type": "code", 16 | "execution_count": 1, 17 | "metadata": { 18 | "collapsed": true 19 | }, 20 | "outputs": [], 21 | "source": [ 22 | "class Line:\n", 23 | " \n", 24 | " def __init__(self,coor1,coor2):\n", 25 | " pass\n", 26 | " \n", 27 | " def distance(self):\n", 28 | " pass\n", 29 | " \n", 30 | " def slope(self):\n", 31 | " pass" 32 | ] 33 | }, 34 | { 35 | "cell_type": "code", 36 | "execution_count": 2, 37 | "metadata": { 38 | "collapsed": true 39 | }, 40 | "outputs": [], 41 | "source": [ 42 | "# Пример\n", 43 | "\n", 44 | "coordinate1 = (3,2)\n", 45 | "coordinate2 = (8,10)\n", 46 | "\n", 47 | "li = Line(coordinate1,coordinate2)" 48 | ] 49 | }, 50 | { 51 | "cell_type": "code", 52 | "execution_count": 3, 53 | "metadata": {}, 54 | "outputs": [ 55 | { 56 | "data": { 57 | "text/plain": [ 58 | "9.433981132056603" 59 | ] 60 | }, 61 | "execution_count": 3, 62 | "metadata": {}, 63 | "output_type": "execute_result" 64 | } 65 | ], 66 | "source": [ 67 | "li.distance()" 68 | ] 69 | }, 70 | { 71 | "cell_type": "code", 72 | "execution_count": 4, 73 | "metadata": {}, 74 | "outputs": [ 75 | { 76 | "data": { 77 | "text/plain": [ 78 | "1.6" 79 | ] 80 | }, 81 | "execution_count": 4, 82 | "metadata": {}, 83 | "output_type": "execute_result" 84 | } 85 | ], 86 | "source": [ 87 | "li.slope()" 88 | ] 89 | }, 90 | { 91 | "cell_type": "markdown", 92 | "metadata": {}, 93 | "source": [ 94 | "________\n", 95 | "#### Задача 2" 96 | ] 97 | }, 98 | { 99 | "cell_type": "markdown", 100 | "metadata": {}, 101 | "source": [ 102 | "Реализуйте методы класса" 103 | ] 104 | }, 105 | { 106 | "cell_type": "code", 107 | "execution_count": 5, 108 | "metadata": { 109 | "collapsed": true 110 | }, 111 | "outputs": [], 112 | "source": [ 113 | "class Cylinder:\n", 114 | " \n", 115 | " def __init__(self,height=1,radius=1):\n", 116 | " pass\n", 117 | " \n", 118 | " def volume(self):\n", 119 | " pass\n", 120 | " \n", 121 | " def surface_area(self):\n", 122 | " pass" 123 | ] 124 | }, 125 | { 126 | "cell_type": "code", 127 | "execution_count": 6, 128 | "metadata": { 129 | "collapsed": true 130 | }, 131 | "outputs": [], 132 | "source": [ 133 | "# Пример\n", 134 | "c = Cylinder(2,3)" 135 | ] 136 | }, 137 | { 138 | "cell_type": "code", 139 | "execution_count": 7, 140 | "metadata": {}, 141 | "outputs": [ 142 | { 143 | "data": { 144 | "text/plain": [ 145 | "56.52" 146 | ] 147 | }, 148 | "execution_count": 7, 149 | "metadata": {}, 150 | "output_type": "execute_result" 151 | } 152 | ], 153 | "source": [ 154 | "c.volume()" 155 | ] 156 | }, 157 | { 158 | "cell_type": "code", 159 | "execution_count": 8, 160 | "metadata": {}, 161 | "outputs": [ 162 | { 163 | "data": { 164 | "text/plain": [ 165 | "94.2" 166 | ] 167 | }, 168 | "execution_count": 8, 169 | "metadata": {}, 170 | "output_type": "execute_result" 171 | } 172 | ], 173 | "source": [ 174 | "c.surface_area()" 175 | ] 176 | } 177 | ], 178 | "metadata": { 179 | "kernelspec": { 180 | "display_name": "Python 3", 181 | "language": "python", 182 | "name": "python3" 183 | }, 184 | "language_info": { 185 | "codemirror_mode": { 186 | "name": "ipython", 187 | "version": 3 188 | }, 189 | "file_extension": ".py", 190 | "mimetype": "text/x-python", 191 | "name": "python", 192 | "nbconvert_exporter": "python", 193 | "pygments_lexer": "ipython3", 194 | "version": "3.6.1" 195 | } 196 | }, 197 | "nbformat": 4, 198 | "nbformat_minor": 1 199 | } 200 | -------------------------------------------------------------------------------- /13-Продвинутые Модули Python (Advanced Python Modules)/03-Python Debugger (pdb).ipynb: -------------------------------------------------------------------------------- 1 | { 2 | "cells": [ 3 | { 4 | "cell_type": "markdown", 5 | "metadata": {}, 6 | "source": [ 7 | "# Отладчик - Python Debugger\n", 8 | "\n", 9 | "Чтобы найти ошибки в Вашем коде, Вы скорее всего использовали множество команд print. Есть лучший способ - использование встроенного в Python модуля debugger (pdb). Модуль pdb реализует интерактивную среду отладки для программ Python. Он позволяет Вам поставить программу на паузу, посмотреть значения переменных, и увидеть выполнение Вашей программы шаг за шагом, чтобы Вы могли понять, что именно делает Ваша программа, и найти ошибку в логике.\n", 10 | "\n", 11 | "Это немного сложно показать, поскольку нам придется специально сделать ошибку, но надеюсь что этот простой пример покажет возможности модуля pdb.
*Замечание: Обратите внимание, что использование модуля pdb в iPython Notebook является нетипичным.*\n", 12 | "\n", 13 | "___\n", 14 | "Здесь мы намеренно сделаем ошибку, пытаясь сложить список и число" 15 | ] 16 | }, 17 | { 18 | "cell_type": "code", 19 | "execution_count": 1, 20 | "metadata": {}, 21 | "outputs": [ 22 | { 23 | "name": "stdout", 24 | "output_type": "stream", 25 | "text": [ 26 | "5\n" 27 | ] 28 | }, 29 | { 30 | "ename": "TypeError", 31 | "evalue": "unsupported operand type(s) for +: 'int' and 'list'", 32 | "output_type": "error", 33 | "traceback": [ 34 | "\u001b[1;31m---------------------------------------------------------------------------\u001b[0m", 35 | "\u001b[1;31mTypeError\u001b[0m Traceback (most recent call last)", 36 | "\u001b[1;32m\u001b[0m in \u001b[0;36m\u001b[1;34m()\u001b[0m\n\u001b[0;32m 5\u001b[0m \u001b[0mresult\u001b[0m \u001b[1;33m=\u001b[0m \u001b[0my\u001b[0m \u001b[1;33m+\u001b[0m \u001b[0mz\u001b[0m\u001b[1;33m\u001b[0m\u001b[0m\n\u001b[0;32m 6\u001b[0m \u001b[0mprint\u001b[0m\u001b[1;33m(\u001b[0m\u001b[0mresult\u001b[0m\u001b[1;33m)\u001b[0m\u001b[1;33m\u001b[0m\u001b[0m\n\u001b[1;32m----> 7\u001b[1;33m \u001b[0mresult2\u001b[0m \u001b[1;33m=\u001b[0m \u001b[0my\u001b[0m\u001b[1;33m+\u001b[0m\u001b[0mx\u001b[0m\u001b[1;33m\u001b[0m\u001b[0m\n\u001b[0m\u001b[0;32m 8\u001b[0m \u001b[0mprint\u001b[0m\u001b[1;33m(\u001b[0m\u001b[0mresult2\u001b[0m\u001b[1;33m)\u001b[0m\u001b[1;33m\u001b[0m\u001b[0m\n", 37 | "\u001b[1;31mTypeError\u001b[0m: unsupported operand type(s) for +: 'int' and 'list'" 38 | ] 39 | } 40 | ], 41 | "source": [ 42 | "x = [1,3,4]\n", 43 | "y = 2\n", 44 | "z = 3\n", 45 | "\n", 46 | "result = y + z\n", 47 | "print(result)\n", 48 | "result2 = y+x\n", 49 | "print(result2)" 50 | ] 51 | }, 52 | { 53 | "cell_type": "markdown", 54 | "metadata": {}, 55 | "source": [ 56 | "Хм, кажется мы получили ошибку! Давайте применим set_trace(), используя модуль pdb. Это позволит нам сделать паузу в указанной точке, и посмотреть что там происходит." 57 | ] 58 | }, 59 | { 60 | "cell_type": "code", 61 | "execution_count": null, 62 | "metadata": { 63 | "collapsed": true 64 | }, 65 | "outputs": [], 66 | "source": [ 67 | "import pdb\n", 68 | "\n", 69 | "x = [1,3,4]\n", 70 | "y = 2\n", 71 | "z = 3\n", 72 | "\n", 73 | "result = y + z\n", 74 | "print(result)\n", 75 | "\n", 76 | "# Set a trace using Python Debugger\n", 77 | "pdb.set_trace()\n", 78 | "\n", 79 | "result2 = y+x\n", 80 | "print(result2)" 81 | ] 82 | }, 83 | { 84 | "cell_type": "markdown", 85 | "metadata": {}, 86 | "source": [ 87 | "Отлично! Теперь Вы можете посмотреть, какими были значения переменных, и найти причину ошибки. Для выхода из отладчика используется 'q'. Более подробно об общих подходах к отладке и других методах, можно почитать в официальной документации:\n", 88 | "https://docs.python.org/3/library/pdb.html" 89 | ] 90 | } 91 | ], 92 | "metadata": { 93 | "kernelspec": { 94 | "display_name": "Python 3", 95 | "language": "python", 96 | "name": "python3" 97 | }, 98 | "language_info": { 99 | "codemirror_mode": { 100 | "name": "ipython", 101 | "version": 3 102 | }, 103 | "file_extension": ".py", 104 | "mimetype": "text/x-python", 105 | "name": "python", 106 | "nbconvert_exporter": "python", 107 | "pygments_lexer": "ipython3", 108 | "version": "3.6.1" 109 | } 110 | }, 111 | "nbformat": 4, 112 | "nbformat_minor": 1 113 | } 114 | -------------------------------------------------------------------------------- /05-Объектно-Ориентированное Программирование (Object Oriented Programming)/.ipynb_checkpoints/02-Object Oriented Programming Homework-checkpoint.ipynb: -------------------------------------------------------------------------------- 1 | { 2 | "cells": [ 3 | { 4 | "cell_type": "markdown", 5 | "metadata": {}, 6 | "source": [ 7 | "# Объектно-ориентированное программирование\n", 8 | "## Домашнее задание\n", 9 | "\n", 10 | "#### Задача 1\n", 11 | "Реализуйте методы класса Line (линия), который принимает на вход координаты в виде двух кортежей, и возвращает угол наклона (slope) и длину (distance) этой линии." 12 | ] 13 | }, 14 | { 15 | "cell_type": "code", 16 | "execution_count": 1, 17 | "metadata": { 18 | "collapsed": true 19 | }, 20 | "outputs": [], 21 | "source": [ 22 | "class Line:\n", 23 | " \n", 24 | " def __init__(self,coor1,coor2):\n", 25 | " pass\n", 26 | " \n", 27 | " def distance(self):\n", 28 | " pass\n", 29 | " \n", 30 | " def slope(self):\n", 31 | " pass" 32 | ] 33 | }, 34 | { 35 | "cell_type": "code", 36 | "execution_count": 2, 37 | "metadata": { 38 | "collapsed": true 39 | }, 40 | "outputs": [], 41 | "source": [ 42 | "# Пример\n", 43 | "\n", 44 | "coordinate1 = (3,2)\n", 45 | "coordinate2 = (8,10)\n", 46 | "\n", 47 | "li = Line(coordinate1,coordinate2)" 48 | ] 49 | }, 50 | { 51 | "cell_type": "code", 52 | "execution_count": 3, 53 | "metadata": {}, 54 | "outputs": [ 55 | { 56 | "data": { 57 | "text/plain": [ 58 | "9.433981132056603" 59 | ] 60 | }, 61 | "execution_count": 3, 62 | "metadata": {}, 63 | "output_type": "execute_result" 64 | } 65 | ], 66 | "source": [ 67 | "li.distance()" 68 | ] 69 | }, 70 | { 71 | "cell_type": "code", 72 | "execution_count": 4, 73 | "metadata": {}, 74 | "outputs": [ 75 | { 76 | "data": { 77 | "text/plain": [ 78 | "1.6" 79 | ] 80 | }, 81 | "execution_count": 4, 82 | "metadata": {}, 83 | "output_type": "execute_result" 84 | } 85 | ], 86 | "source": [ 87 | "li.slope()" 88 | ] 89 | }, 90 | { 91 | "cell_type": "markdown", 92 | "metadata": {}, 93 | "source": [ 94 | "________\n", 95 | "#### Задача 2" 96 | ] 97 | }, 98 | { 99 | "cell_type": "markdown", 100 | "metadata": {}, 101 | "source": [ 102 | "Реализуйте методы класса" 103 | ] 104 | }, 105 | { 106 | "cell_type": "code", 107 | "execution_count": 5, 108 | "metadata": { 109 | "collapsed": true 110 | }, 111 | "outputs": [], 112 | "source": [ 113 | "class Cylinder:\n", 114 | " \n", 115 | " def __init__(self,height=1,radius=1):\n", 116 | " pass\n", 117 | " \n", 118 | " def volume(self):\n", 119 | " pass\n", 120 | " \n", 121 | " def surface_area(self):\n", 122 | " pass" 123 | ] 124 | }, 125 | { 126 | "cell_type": "code", 127 | "execution_count": 6, 128 | "metadata": { 129 | "collapsed": true 130 | }, 131 | "outputs": [], 132 | "source": [ 133 | "# Пример\n", 134 | "c = Cylinder(2,3)" 135 | ] 136 | }, 137 | { 138 | "cell_type": "code", 139 | "execution_count": 7, 140 | "metadata": {}, 141 | "outputs": [ 142 | { 143 | "data": { 144 | "text/plain": [ 145 | "56.52" 146 | ] 147 | }, 148 | "execution_count": 7, 149 | "metadata": {}, 150 | "output_type": "execute_result" 151 | } 152 | ], 153 | "source": [ 154 | "c.volume()" 155 | ] 156 | }, 157 | { 158 | "cell_type": "code", 159 | "execution_count": 8, 160 | "metadata": {}, 161 | "outputs": [ 162 | { 163 | "data": { 164 | "text/plain": [ 165 | "94.2" 166 | ] 167 | }, 168 | "execution_count": 8, 169 | "metadata": {}, 170 | "output_type": "execute_result" 171 | } 172 | ], 173 | "source": [ 174 | "c.surface_area()" 175 | ] 176 | } 177 | ], 178 | "metadata": { 179 | "kernelspec": { 180 | "display_name": "Python 3", 181 | "language": "python", 182 | "name": "python3" 183 | }, 184 | "language_info": { 185 | "codemirror_mode": { 186 | "name": "ipython", 187 | "version": 3 188 | }, 189 | "file_extension": ".py", 190 | "mimetype": "text/x-python", 191 | "name": "python", 192 | "nbconvert_exporter": "python", 193 | "pygments_lexer": "ipython3", 194 | "version": "3.6.1" 195 | } 196 | }, 197 | "nbformat": 4, 198 | "nbformat_minor": 1 199 | } 200 | -------------------------------------------------------------------------------- /05-Объектно-Ориентированное Программирование (Object Oriented Programming)/04-OOP Challenge.ipynb: -------------------------------------------------------------------------------- 1 | { 2 | "cells": [ 3 | { 4 | "cell_type": "markdown", 5 | "metadata": {}, 6 | "source": [ 7 | "# Объектно-ориентированное программирование - Задание\n", 8 | "\n", 9 | "В этом задании создайте класс банковского счёта, который имеет два атрибута:\n", 10 | "\n", 11 | "* owner - владелец\n", 12 | "* balance - баланс\n", 13 | "\n", 14 | "и два метода:\n", 15 | "\n", 16 | "* deposit - внести средства\n", 17 | "* withdraw - снять средства\n", 18 | "\n", 19 | "Дополнительное условие - сумма снятия не должна превышать доступный баланс.\n", 20 | "\n", 21 | "Создайте экземпляр класса, сделайте несколько внесений и снятий средств, а также проверьте, что баланс счёта не может уходить в минус при снятии средств." 22 | ] 23 | }, 24 | { 25 | "cell_type": "code", 26 | "execution_count": 3, 27 | "metadata": { 28 | "collapsed": true 29 | }, 30 | "outputs": [], 31 | "source": [ 32 | "class Account:\n", 33 | " pass" 34 | ] 35 | }, 36 | { 37 | "cell_type": "code", 38 | "execution_count": 4, 39 | "metadata": { 40 | "collapsed": true 41 | }, 42 | "outputs": [], 43 | "source": [ 44 | "# 1. Создаём экземпляр класса\n", 45 | "acct1 = Account('Влад',100)" 46 | ] 47 | }, 48 | { 49 | "cell_type": "code", 50 | "execution_count": 5, 51 | "metadata": {}, 52 | "outputs": [ 53 | { 54 | "name": "stdout", 55 | "output_type": "stream", 56 | "text": [ 57 | "Владелец счёта: Влад\n", 58 | "Баланс счёта: $100\n" 59 | ] 60 | } 61 | ], 62 | "source": [ 63 | "# 2. Выводим информацию об объекте\n", 64 | "print(acct1)" 65 | ] 66 | }, 67 | { 68 | "cell_type": "code", 69 | "execution_count": 6, 70 | "metadata": {}, 71 | "outputs": [ 72 | { 73 | "data": { 74 | "text/plain": [ 75 | "'Влад'" 76 | ] 77 | }, 78 | "execution_count": 6, 79 | "metadata": {}, 80 | "output_type": "execute_result" 81 | } 82 | ], 83 | "source": [ 84 | "# 3. Отображаем атрибут владелец счёта\n", 85 | "acct1.owner" 86 | ] 87 | }, 88 | { 89 | "cell_type": "code", 90 | "execution_count": 7, 91 | "metadata": {}, 92 | "outputs": [ 93 | { 94 | "data": { 95 | "text/plain": [ 96 | "100" 97 | ] 98 | }, 99 | "execution_count": 7, 100 | "metadata": {}, 101 | "output_type": "execute_result" 102 | } 103 | ], 104 | "source": [ 105 | "# 4. Отображаем атрибут баланс счёта\n", 106 | "acct1.balance" 107 | ] 108 | }, 109 | { 110 | "cell_type": "code", 111 | "execution_count": 8, 112 | "metadata": {}, 113 | "outputs": [ 114 | { 115 | "name": "stdout", 116 | "output_type": "stream", 117 | "text": [ 118 | "Внесение выполнено\n" 119 | ] 120 | } 121 | ], 122 | "source": [ 123 | "# 5. Выполняем несколько внесений и снятий средств\n", 124 | "acct1.deposit(50)" 125 | ] 126 | }, 127 | { 128 | "cell_type": "code", 129 | "execution_count": 9, 130 | "metadata": {}, 131 | "outputs": [ 132 | { 133 | "name": "stdout", 134 | "output_type": "stream", 135 | "text": [ 136 | "Снятие выполнено\n" 137 | ] 138 | } 139 | ], 140 | "source": [ 141 | "acct1.withdraw(75)" 142 | ] 143 | }, 144 | { 145 | "cell_type": "code", 146 | "execution_count": 10, 147 | "metadata": {}, 148 | "outputs": [ 149 | { 150 | "name": "stdout", 151 | "output_type": "stream", 152 | "text": [ 153 | "Недостаточно средств!\n" 154 | ] 155 | } 156 | ], 157 | "source": [ 158 | "# 6. Пытаемся выполнить снятие, которое превышает текущий доступный баланс\n", 159 | "acct1.withdraw(500)" 160 | ] 161 | }, 162 | { 163 | "cell_type": "markdown", 164 | "metadata": {}, 165 | "source": [ 166 | "## Отличная работа!" 167 | ] 168 | } 169 | ], 170 | "metadata": { 171 | "kernelspec": { 172 | "display_name": "Python 3", 173 | "language": "python", 174 | "name": "python3" 175 | }, 176 | "language_info": { 177 | "codemirror_mode": { 178 | "name": "ipython", 179 | "version": 3 180 | }, 181 | "file_extension": ".py", 182 | "mimetype": "text/x-python", 183 | "name": "python", 184 | "nbconvert_exporter": "python", 185 | "pygments_lexer": "ipython3", 186 | "version": "3.6.1" 187 | } 188 | }, 189 | "nbformat": 4, 190 | "nbformat_minor": 2 191 | } 192 | -------------------------------------------------------------------------------- /13-Продвинутые Модули Python (Advanced Python Modules)/.ipynb_checkpoints/03-Python Debugger (pdb)-checkpoint.ipynb: -------------------------------------------------------------------------------- 1 | { 2 | "cells": [ 3 | { 4 | "cell_type": "markdown", 5 | "metadata": {}, 6 | "source": [ 7 | "# Отладчик - Python Debugger\n", 8 | "\n", 9 | "Чтобы найти ошибки в Вашем коде, Вы скорее всего использовали множество команд print. Есть лучший способ - использование встроенного в Python модуля debugger (pdb). Модуль pdb реализует интерактивную среду отладки для программ Python. Он позволяет Вам поставить программу на паузу, посмотреть значения переменных, и увидеть выполнение Вашей программы шаг за шагом, чтобы Вы могли понять, что именно делает Ваша программа, и найти ошибку в логике.\n", 10 | "\n", 11 | "Это немного сложно показать, поскольку нам придется специально сделать ошибку, но надеюсь что этот простой пример покажет возможности модуля pdb.
*Замечание: Обратите внимание, что использование модуля pdb в iPython Notebook является нетипичным.*\n", 12 | "\n", 13 | "___\n", 14 | "Здесь мы намеренно сделаем ошибку, пытаясь сложить список и число" 15 | ] 16 | }, 17 | { 18 | "cell_type": "code", 19 | "execution_count": 1, 20 | "metadata": {}, 21 | "outputs": [ 22 | { 23 | "name": "stdout", 24 | "output_type": "stream", 25 | "text": [ 26 | "5\n" 27 | ] 28 | }, 29 | { 30 | "ename": "TypeError", 31 | "evalue": "unsupported operand type(s) for +: 'int' and 'list'", 32 | "output_type": "error", 33 | "traceback": [ 34 | "\u001b[1;31m---------------------------------------------------------------------------\u001b[0m", 35 | "\u001b[1;31mTypeError\u001b[0m Traceback (most recent call last)", 36 | "\u001b[1;32m\u001b[0m in \u001b[0;36m\u001b[1;34m()\u001b[0m\n\u001b[0;32m 5\u001b[0m \u001b[0mresult\u001b[0m \u001b[1;33m=\u001b[0m \u001b[0my\u001b[0m \u001b[1;33m+\u001b[0m \u001b[0mz\u001b[0m\u001b[1;33m\u001b[0m\u001b[0m\n\u001b[0;32m 6\u001b[0m \u001b[0mprint\u001b[0m\u001b[1;33m(\u001b[0m\u001b[0mresult\u001b[0m\u001b[1;33m)\u001b[0m\u001b[1;33m\u001b[0m\u001b[0m\n\u001b[1;32m----> 7\u001b[1;33m \u001b[0mresult2\u001b[0m \u001b[1;33m=\u001b[0m \u001b[0my\u001b[0m\u001b[1;33m+\u001b[0m\u001b[0mx\u001b[0m\u001b[1;33m\u001b[0m\u001b[0m\n\u001b[0m\u001b[0;32m 8\u001b[0m \u001b[0mprint\u001b[0m\u001b[1;33m(\u001b[0m\u001b[0mresult2\u001b[0m\u001b[1;33m)\u001b[0m\u001b[1;33m\u001b[0m\u001b[0m\n", 37 | "\u001b[1;31mTypeError\u001b[0m: unsupported operand type(s) for +: 'int' and 'list'" 38 | ] 39 | } 40 | ], 41 | "source": [ 42 | "x = [1,3,4]\n", 43 | "y = 2\n", 44 | "z = 3\n", 45 | "\n", 46 | "result = y + z\n", 47 | "print(result)\n", 48 | "result2 = y+x\n", 49 | "print(result2)" 50 | ] 51 | }, 52 | { 53 | "cell_type": "markdown", 54 | "metadata": {}, 55 | "source": [ 56 | "Хм, кажется мы получили ошибку! Давайте применим set_trace(), используя модуль pdb. Это позволит нам сделать паузу в указанной точке, и посмотреть что там происходит." 57 | ] 58 | }, 59 | { 60 | "cell_type": "code", 61 | "execution_count": null, 62 | "metadata": { 63 | "collapsed": true 64 | }, 65 | "outputs": [], 66 | "source": [ 67 | "import pdb\n", 68 | "\n", 69 | "x = [1,3,4]\n", 70 | "y = 2\n", 71 | "z = 3\n", 72 | "\n", 73 | "result = y + z\n", 74 | "print(result)\n", 75 | "\n", 76 | "# Set a trace using Python Debugger\n", 77 | "pdb.set_trace()\n", 78 | "\n", 79 | "result2 = y+x\n", 80 | "print(result2)" 81 | ] 82 | }, 83 | { 84 | "cell_type": "markdown", 85 | "metadata": {}, 86 | "source": [ 87 | "Отлично! Теперь Вы можете посмотреть, какими были значения переменных, и найти причину ошибки. Для выхода из отладчика используется 'q'. Более подробно об общих подходах к отладке и других методах, можно почитать в официальной документации:\n", 88 | "https://docs.python.org/3/library/pdb.html" 89 | ] 90 | } 91 | ], 92 | "metadata": { 93 | "kernelspec": { 94 | "display_name": "Python 3", 95 | "language": "python", 96 | "name": "python3" 97 | }, 98 | "language_info": { 99 | "codemirror_mode": { 100 | "name": "ipython", 101 | "version": 3 102 | }, 103 | "file_extension": ".py", 104 | "mimetype": "text/x-python", 105 | "name": "python", 106 | "nbconvert_exporter": "python", 107 | "pygments_lexer": "ipython3", 108 | "version": "3.6.1" 109 | } 110 | }, 111 | "nbformat": 4, 112 | "nbformat_minor": 1 113 | } 114 | -------------------------------------------------------------------------------- /05-Объектно-Ориентированное Программирование (Object Oriented Programming)/.ipynb_checkpoints/04-OOP Challenge-checkpoint.ipynb: -------------------------------------------------------------------------------- 1 | { 2 | "cells": [ 3 | { 4 | "cell_type": "markdown", 5 | "metadata": {}, 6 | "source": [ 7 | "# Объектно-ориентированное программирование - Задание\n", 8 | "\n", 9 | "В этом задании создайте класс банковского счёта, который имеет два атрибута:\n", 10 | "\n", 11 | "* owner - владелец\n", 12 | "* balance - баланс\n", 13 | "\n", 14 | "и два метода:\n", 15 | "\n", 16 | "* deposit - внести средства\n", 17 | "* withdraw - снять средства\n", 18 | "\n", 19 | "Дополнительное условие - сумма снятия не должна превышать доступный баланс.\n", 20 | "\n", 21 | "Создайте экземпляр класса, сделайте несколько внесений и снятий средств, а также проверьте, что баланс счёта не может уходить в минус при снятии средств." 22 | ] 23 | }, 24 | { 25 | "cell_type": "code", 26 | "execution_count": 3, 27 | "metadata": { 28 | "collapsed": true 29 | }, 30 | "outputs": [], 31 | "source": [ 32 | "class Account:\n", 33 | " pass" 34 | ] 35 | }, 36 | { 37 | "cell_type": "code", 38 | "execution_count": 4, 39 | "metadata": { 40 | "collapsed": true 41 | }, 42 | "outputs": [], 43 | "source": [ 44 | "# 1. Создаём экземпляр класса\n", 45 | "acct1 = Account('Влад',100)" 46 | ] 47 | }, 48 | { 49 | "cell_type": "code", 50 | "execution_count": 5, 51 | "metadata": {}, 52 | "outputs": [ 53 | { 54 | "name": "stdout", 55 | "output_type": "stream", 56 | "text": [ 57 | "Владелец счёта: Влад\n", 58 | "Баланс счёта: $100\n" 59 | ] 60 | } 61 | ], 62 | "source": [ 63 | "# 2. Выводим информацию об объекте\n", 64 | "print(acct1)" 65 | ] 66 | }, 67 | { 68 | "cell_type": "code", 69 | "execution_count": 6, 70 | "metadata": {}, 71 | "outputs": [ 72 | { 73 | "data": { 74 | "text/plain": [ 75 | "'Влад'" 76 | ] 77 | }, 78 | "execution_count": 6, 79 | "metadata": {}, 80 | "output_type": "execute_result" 81 | } 82 | ], 83 | "source": [ 84 | "# 3. Отображаем атрибут владелец счёта\n", 85 | "acct1.owner" 86 | ] 87 | }, 88 | { 89 | "cell_type": "code", 90 | "execution_count": 7, 91 | "metadata": {}, 92 | "outputs": [ 93 | { 94 | "data": { 95 | "text/plain": [ 96 | "100" 97 | ] 98 | }, 99 | "execution_count": 7, 100 | "metadata": {}, 101 | "output_type": "execute_result" 102 | } 103 | ], 104 | "source": [ 105 | "# 4. Отображаем атрибут баланс счёта\n", 106 | "acct1.balance" 107 | ] 108 | }, 109 | { 110 | "cell_type": "code", 111 | "execution_count": 8, 112 | "metadata": {}, 113 | "outputs": [ 114 | { 115 | "name": "stdout", 116 | "output_type": "stream", 117 | "text": [ 118 | "Внесение выполнено\n" 119 | ] 120 | } 121 | ], 122 | "source": [ 123 | "# 5. Выполняем несколько внесений и снятий средств\n", 124 | "acct1.deposit(50)" 125 | ] 126 | }, 127 | { 128 | "cell_type": "code", 129 | "execution_count": 9, 130 | "metadata": {}, 131 | "outputs": [ 132 | { 133 | "name": "stdout", 134 | "output_type": "stream", 135 | "text": [ 136 | "Снятие выполнено\n" 137 | ] 138 | } 139 | ], 140 | "source": [ 141 | "acct1.withdraw(75)" 142 | ] 143 | }, 144 | { 145 | "cell_type": "code", 146 | "execution_count": 10, 147 | "metadata": {}, 148 | "outputs": [ 149 | { 150 | "name": "stdout", 151 | "output_type": "stream", 152 | "text": [ 153 | "Недостаточно средств!\n" 154 | ] 155 | } 156 | ], 157 | "source": [ 158 | "# 6. Пытаемся выполнить снятие, которое превышает текущий доступный баланс\n", 159 | "acct1.withdraw(500)" 160 | ] 161 | }, 162 | { 163 | "cell_type": "markdown", 164 | "metadata": {}, 165 | "source": [ 166 | "## Отличная работа!" 167 | ] 168 | } 169 | ], 170 | "metadata": { 171 | "kernelspec": { 172 | "display_name": "Python 3", 173 | "language": "python", 174 | "name": "python3" 175 | }, 176 | "language_info": { 177 | "codemirror_mode": { 178 | "name": "ipython", 179 | "version": 3 180 | }, 181 | "file_extension": ".py", 182 | "mimetype": "text/x-python", 183 | "name": "python", 184 | "nbconvert_exporter": "python", 185 | "pygments_lexer": "ipython3", 186 | "version": "3.6.1" 187 | } 188 | }, 189 | "nbformat": 4, 190 | "nbformat_minor": 2 191 | } 192 | -------------------------------------------------------------------------------- /02-Операторы Python (Python Statements)/07-Statements Assessment Test.ipynb: -------------------------------------------------------------------------------- 1 | { 2 | "cells": [ 3 | { 4 | "cell_type": "markdown", 5 | "metadata": { 6 | "collapsed": true 7 | }, 8 | "source": [ 9 | "# Проверочные задания - операторы\n", 10 | "Проверьте Ваши знания!" 11 | ] 12 | }, 13 | { 14 | "cell_type": "markdown", 15 | "metadata": {}, 16 | "source": [ 17 | "_____\n", 18 | "**Используйте for, .split() и if, чтобы написать команду, которая выведет только те слова, которые начинаются с буквы 's':**" 19 | ] 20 | }, 21 | { 22 | "cell_type": "code", 23 | "execution_count": null, 24 | "metadata": { 25 | "collapsed": true 26 | }, 27 | "outputs": [], 28 | "source": [ 29 | "st = 'Print only the words that start with s in this sentence'" 30 | ] 31 | }, 32 | { 33 | "cell_type": "code", 34 | "execution_count": null, 35 | "metadata": { 36 | "collapsed": true 37 | }, 38 | "outputs": [], 39 | "source": [ 40 | "# Напишите Ваш код здесь" 41 | ] 42 | }, 43 | { 44 | "cell_type": "markdown", 45 | "metadata": {}, 46 | "source": [ 47 | "______\n", 48 | "**Используйте range(), чтобы распечатать все чётные числа от 0 до 10.**" 49 | ] 50 | }, 51 | { 52 | "cell_type": "code", 53 | "execution_count": null, 54 | "metadata": { 55 | "collapsed": true 56 | }, 57 | "outputs": [], 58 | "source": [ 59 | "# Напишите Ваш код здесь" 60 | ] 61 | }, 62 | { 63 | "cell_type": "markdown", 64 | "metadata": {}, 65 | "source": [ 66 | "___\n", 67 | "**Используйте генератор списков, чтобы создать список всех чисел от 1 до 50, которые делятся нацело на 3.**" 68 | ] 69 | }, 70 | { 71 | "cell_type": "code", 72 | "execution_count": null, 73 | "metadata": { 74 | "collapsed": true 75 | }, 76 | "outputs": [], 77 | "source": [ 78 | "# Напишите Ваш код здесь\n", 79 | "[]" 80 | ] 81 | }, 82 | { 83 | "cell_type": "markdown", 84 | "metadata": {}, 85 | "source": [ 86 | "_____\n", 87 | "**Пройдите по словам в строке ниже, и если длина слова чётная, то напечатайте \"Это слово имеет чётную длину!\"**" 88 | ] 89 | }, 90 | { 91 | "cell_type": "code", 92 | "execution_count": null, 93 | "metadata": { 94 | "collapsed": true 95 | }, 96 | "outputs": [], 97 | "source": [ 98 | "st = 'Print every word in this sentence that has an even number of letters'" 99 | ] 100 | }, 101 | { 102 | "cell_type": "code", 103 | "execution_count": null, 104 | "metadata": { 105 | "collapsed": true 106 | }, 107 | "outputs": [], 108 | "source": [ 109 | "# Напишите Ваш код здесь" 110 | ] 111 | }, 112 | { 113 | "cell_type": "markdown", 114 | "metadata": {}, 115 | "source": [ 116 | "____\n", 117 | "**Напишите программу, которая напечатает числа от 1 до 100. Но для тех чисел, которые делятся нацело на 3, вместо числа выведите \"Fizz\", а для чисел которые делятся нацело на 5, выведите \"Buzz\". А для чисел, которые делятся нацело и на 3, и на 5, выведите \"FizzBuzz\".**" 118 | ] 119 | }, 120 | { 121 | "cell_type": "code", 122 | "execution_count": null, 123 | "metadata": { 124 | "collapsed": true 125 | }, 126 | "outputs": [], 127 | "source": [ 128 | "# Напишите Ваш код здесь" 129 | ] 130 | }, 131 | { 132 | "cell_type": "markdown", 133 | "metadata": {}, 134 | "source": [ 135 | "____\n", 136 | "**Используйте генераторы списков, чтобы создать список первых букв из всех слов в строке ниже:**" 137 | ] 138 | }, 139 | { 140 | "cell_type": "code", 141 | "execution_count": 1, 142 | "metadata": { 143 | "collapsed": true 144 | }, 145 | "outputs": [], 146 | "source": [ 147 | "st = 'Create a list of the first letters of every word in this string'" 148 | ] 149 | }, 150 | { 151 | "cell_type": "code", 152 | "execution_count": null, 153 | "metadata": { 154 | "collapsed": true 155 | }, 156 | "outputs": [], 157 | "source": [ 158 | "# Напишите Ваш код здесь" 159 | ] 160 | }, 161 | { 162 | "cell_type": "markdown", 163 | "metadata": {}, 164 | "source": [ 165 | "### Отличная работа!" 166 | ] 167 | } 168 | ], 169 | "metadata": { 170 | "kernelspec": { 171 | "display_name": "Python 3", 172 | "language": "python", 173 | "name": "python3" 174 | }, 175 | "language_info": { 176 | "codemirror_mode": { 177 | "name": "ipython", 178 | "version": 3 179 | }, 180 | "file_extension": ".py", 181 | "mimetype": "text/x-python", 182 | "name": "python", 183 | "nbconvert_exporter": "python", 184 | "pygments_lexer": "ipython3", 185 | "version": "3.6.1" 186 | } 187 | }, 188 | "nbformat": 4, 189 | "nbformat_minor": 1 190 | } 191 | -------------------------------------------------------------------------------- /14-Продвинутые Объекты и Структуры Данных (Advanced Python Objects and Data Structures)/06-Advanced Python Objects Test.ipynb: -------------------------------------------------------------------------------- 1 | { 2 | "cells": [ 3 | { 4 | "cell_type": "markdown", 5 | "metadata": {}, 6 | "source": [ 7 | "# Домашнее задание" 8 | ] 9 | }, 10 | { 11 | "cell_type": "markdown", 12 | "metadata": {}, 13 | "source": [ 14 | "## Числа\n", 15 | "\n", 16 | "**Задача 1: сконвертировать 1024 в двоичный и шестнадцатеричный формат**" 17 | ] 18 | }, 19 | { 20 | "cell_type": "code", 21 | "execution_count": null, 22 | "metadata": { 23 | "collapsed": true 24 | }, 25 | "outputs": [], 26 | "source": [] 27 | }, 28 | { 29 | "cell_type": "markdown", 30 | "metadata": {}, 31 | "source": [ 32 | "**Задача 2: округлить 5.23222 до двух цифр после запятой**" 33 | ] 34 | }, 35 | { 36 | "cell_type": "code", 37 | "execution_count": null, 38 | "metadata": { 39 | "collapsed": true 40 | }, 41 | "outputs": [], 42 | "source": [] 43 | }, 44 | { 45 | "cell_type": "markdown", 46 | "metadata": {}, 47 | "source": [ 48 | "## Строки\n", 49 | "**Задача 3: проверить, являются ли все буквы в строке s прописными**" 50 | ] 51 | }, 52 | { 53 | "cell_type": "code", 54 | "execution_count": null, 55 | "metadata": { 56 | "collapsed": true 57 | }, 58 | "outputs": [], 59 | "source": [ 60 | "s = 'hello how are you Mary, are you feeling okay?'\n", 61 | "\n" 62 | ] 63 | }, 64 | { 65 | "cell_type": "markdown", 66 | "metadata": {}, 67 | "source": [ 68 | "**Задача 4: сколько раз буква 'w' встречается в строке ниже?**" 69 | ] 70 | }, 71 | { 72 | "cell_type": "code", 73 | "execution_count": null, 74 | "metadata": { 75 | "collapsed": true 76 | }, 77 | "outputs": [], 78 | "source": [ 79 | "s = 'twywywtwywbwhsjhwuwshshwuwwwjdjdid'\n" 80 | ] 81 | }, 82 | { 83 | "cell_type": "markdown", 84 | "metadata": {}, 85 | "source": [ 86 | "## Множества\n", 87 | "**Задача 5: найдите элементы в множества set1, которых нет в множестве set2:**" 88 | ] 89 | }, 90 | { 91 | "cell_type": "code", 92 | "execution_count": null, 93 | "metadata": { 94 | "collapsed": true 95 | }, 96 | "outputs": [], 97 | "source": [ 98 | "set1 = {2,3,1,5,6,8}\n", 99 | "set2 = {3,1,7,5,6,8}\n", 100 | "\n" 101 | ] 102 | }, 103 | { 104 | "cell_type": "markdown", 105 | "metadata": {}, 106 | "source": [ 107 | "**Задача 6: найдите все элементы, которые содержатся хотя бы в одном из двух множеств:**" 108 | ] 109 | }, 110 | { 111 | "cell_type": "code", 112 | "execution_count": null, 113 | "metadata": { 114 | "collapsed": true 115 | }, 116 | "outputs": [], 117 | "source": [] 118 | }, 119 | { 120 | "cell_type": "markdown", 121 | "metadata": {}, 122 | "source": [ 123 | "## Словари\n", 124 | "\n", 125 | "**Задача 7: создайте вот такой словарь, используя генератор словарей (dictionary comprehension):\n", 126 | "{0: 0, 1: 1, 2: 8, 3: 27, 4: 64}**" 127 | ] 128 | }, 129 | { 130 | "cell_type": "code", 131 | "execution_count": null, 132 | "metadata": { 133 | "collapsed": true 134 | }, 135 | "outputs": [], 136 | "source": [] 137 | }, 138 | { 139 | "cell_type": "markdown", 140 | "metadata": {}, 141 | "source": [ 142 | "## Списки\n", 143 | "\n", 144 | "**Задача 8: выполните реверсию для списка ниже:**" 145 | ] 146 | }, 147 | { 148 | "cell_type": "code", 149 | "execution_count": null, 150 | "metadata": { 151 | "collapsed": true 152 | }, 153 | "outputs": [], 154 | "source": [ 155 | "list1 = [1,2,3,4]\n" 156 | ] 157 | }, 158 | { 159 | "cell_type": "markdown", 160 | "metadata": {}, 161 | "source": [ 162 | "**Задача 9: отсортируйте список ниже:**" 163 | ] 164 | }, 165 | { 166 | "cell_type": "code", 167 | "execution_count": null, 168 | "metadata": { 169 | "collapsed": true 170 | }, 171 | "outputs": [], 172 | "source": [ 173 | "list2 = [3,4,2,5,1]\n" 174 | ] 175 | }, 176 | { 177 | "cell_type": "markdown", 178 | "metadata": {}, 179 | "source": [ 180 | "# Отличная работа!" 181 | ] 182 | } 183 | ], 184 | "metadata": { 185 | "kernelspec": { 186 | "display_name": "Python 3", 187 | "language": "python", 188 | "name": "python3" 189 | }, 190 | "language_info": { 191 | "codemirror_mode": { 192 | "name": "ipython", 193 | "version": 3 194 | }, 195 | "file_extension": ".py", 196 | "mimetype": "text/x-python", 197 | "name": "python", 198 | "nbconvert_exporter": "python", 199 | "pygments_lexer": "ipython3", 200 | "version": "3.6.1" 201 | } 202 | }, 203 | "nbformat": 4, 204 | "nbformat_minor": 1 205 | } 206 | -------------------------------------------------------------------------------- /02-Операторы Python (Python Statements)/.ipynb_checkpoints/07-Statements Assessment Test-checkpoint.ipynb: -------------------------------------------------------------------------------- 1 | { 2 | "cells": [ 3 | { 4 | "cell_type": "markdown", 5 | "metadata": { 6 | "collapsed": true 7 | }, 8 | "source": [ 9 | "# Проверочные задания - операторы\n", 10 | "Проверьте Ваши знания!" 11 | ] 12 | }, 13 | { 14 | "cell_type": "markdown", 15 | "metadata": {}, 16 | "source": [ 17 | "_____\n", 18 | "**Используйте for, .split() и if, чтобы написать команду, которая выведет только те слова, которые начинаются с буквы 's':**" 19 | ] 20 | }, 21 | { 22 | "cell_type": "code", 23 | "execution_count": null, 24 | "metadata": { 25 | "collapsed": true 26 | }, 27 | "outputs": [], 28 | "source": [ 29 | "st = 'Print only the words that start with s in this sentence'" 30 | ] 31 | }, 32 | { 33 | "cell_type": "code", 34 | "execution_count": null, 35 | "metadata": { 36 | "collapsed": true 37 | }, 38 | "outputs": [], 39 | "source": [ 40 | "# Напишите Ваш код здесь" 41 | ] 42 | }, 43 | { 44 | "cell_type": "markdown", 45 | "metadata": {}, 46 | "source": [ 47 | "______\n", 48 | "**Используйте range(), чтобы распечатать все чётные числа от 0 до 10.**" 49 | ] 50 | }, 51 | { 52 | "cell_type": "code", 53 | "execution_count": null, 54 | "metadata": { 55 | "collapsed": true 56 | }, 57 | "outputs": [], 58 | "source": [ 59 | "# Напишите Ваш код здесь" 60 | ] 61 | }, 62 | { 63 | "cell_type": "markdown", 64 | "metadata": {}, 65 | "source": [ 66 | "___\n", 67 | "**Используйте генератор списков, чтобы создать список всех чисел от 1 до 50, которые делятся нацело на 3.**" 68 | ] 69 | }, 70 | { 71 | "cell_type": "code", 72 | "execution_count": null, 73 | "metadata": { 74 | "collapsed": true 75 | }, 76 | "outputs": [], 77 | "source": [ 78 | "# Напишите Ваш код здесь\n", 79 | "[]" 80 | ] 81 | }, 82 | { 83 | "cell_type": "markdown", 84 | "metadata": {}, 85 | "source": [ 86 | "_____\n", 87 | "**Пройдите по словам в строке ниже, и если длина слова чётная, то напечатайте \"Это слово имеет чётную длину!\"**" 88 | ] 89 | }, 90 | { 91 | "cell_type": "code", 92 | "execution_count": null, 93 | "metadata": { 94 | "collapsed": true 95 | }, 96 | "outputs": [], 97 | "source": [ 98 | "st = 'Print every word in this sentence that has an even number of letters'" 99 | ] 100 | }, 101 | { 102 | "cell_type": "code", 103 | "execution_count": null, 104 | "metadata": { 105 | "collapsed": true 106 | }, 107 | "outputs": [], 108 | "source": [ 109 | "# Напишите Ваш код здесь" 110 | ] 111 | }, 112 | { 113 | "cell_type": "markdown", 114 | "metadata": {}, 115 | "source": [ 116 | "____\n", 117 | "**Напишите программу, которая напечатает числа от 1 до 100. Но для тех чисел, которые делятся нацело на 3, вместо числа выведите \"Fizz\", а для чисел которые делятся нацело на 5, выведите \"Buzz\". А для чисел, которые делятся нацело и на 3, и на 5, выведите \"FizzBuzz\".**" 118 | ] 119 | }, 120 | { 121 | "cell_type": "code", 122 | "execution_count": null, 123 | "metadata": { 124 | "collapsed": true 125 | }, 126 | "outputs": [], 127 | "source": [ 128 | "# Напишите Ваш код здесь" 129 | ] 130 | }, 131 | { 132 | "cell_type": "markdown", 133 | "metadata": {}, 134 | "source": [ 135 | "____\n", 136 | "**Используйте генераторы списков, чтобы создать список первых букв из всех слов в строке ниже:**" 137 | ] 138 | }, 139 | { 140 | "cell_type": "code", 141 | "execution_count": 1, 142 | "metadata": { 143 | "collapsed": true 144 | }, 145 | "outputs": [], 146 | "source": [ 147 | "st = 'Create a list of the first letters of every word in this string'" 148 | ] 149 | }, 150 | { 151 | "cell_type": "code", 152 | "execution_count": null, 153 | "metadata": { 154 | "collapsed": true 155 | }, 156 | "outputs": [], 157 | "source": [ 158 | "# Напишите Ваш код здесь" 159 | ] 160 | }, 161 | { 162 | "cell_type": "markdown", 163 | "metadata": {}, 164 | "source": [ 165 | "### Отличная работа!" 166 | ] 167 | } 168 | ], 169 | "metadata": { 170 | "kernelspec": { 171 | "display_name": "Python 3", 172 | "language": "python", 173 | "name": "python3" 174 | }, 175 | "language_info": { 176 | "codemirror_mode": { 177 | "name": "ipython", 178 | "version": 3 179 | }, 180 | "file_extension": ".py", 181 | "mimetype": "text/x-python", 182 | "name": "python", 183 | "nbconvert_exporter": "python", 184 | "pygments_lexer": "ipython3", 185 | "version": "3.6.1" 186 | } 187 | }, 188 | "nbformat": 4, 189 | "nbformat_minor": 1 190 | } 191 | -------------------------------------------------------------------------------- /14-Продвинутые Объекты и Структуры Данных (Advanced Python Objects and Data Structures)/.ipynb_checkpoints/06-Advanced Python Objects Test-checkpoint.ipynb: -------------------------------------------------------------------------------- 1 | { 2 | "cells": [ 3 | { 4 | "cell_type": "markdown", 5 | "metadata": {}, 6 | "source": [ 7 | "# Домашнее задание" 8 | ] 9 | }, 10 | { 11 | "cell_type": "markdown", 12 | "metadata": {}, 13 | "source": [ 14 | "## Числа\n", 15 | "\n", 16 | "**Задача 1: сконвертировать 1024 в двоичный и шестнадцатеричный формат**" 17 | ] 18 | }, 19 | { 20 | "cell_type": "code", 21 | "execution_count": null, 22 | "metadata": { 23 | "collapsed": true 24 | }, 25 | "outputs": [], 26 | "source": [] 27 | }, 28 | { 29 | "cell_type": "markdown", 30 | "metadata": {}, 31 | "source": [ 32 | "**Задача 2: округлить 5.23222 до двух цифр после запятой**" 33 | ] 34 | }, 35 | { 36 | "cell_type": "code", 37 | "execution_count": null, 38 | "metadata": { 39 | "collapsed": true 40 | }, 41 | "outputs": [], 42 | "source": [] 43 | }, 44 | { 45 | "cell_type": "markdown", 46 | "metadata": {}, 47 | "source": [ 48 | "## Строки\n", 49 | "**Задача 3: проверить, являются ли все буквы в строке s прописными**" 50 | ] 51 | }, 52 | { 53 | "cell_type": "code", 54 | "execution_count": null, 55 | "metadata": { 56 | "collapsed": true 57 | }, 58 | "outputs": [], 59 | "source": [ 60 | "s = 'hello how are you Mary, are you feeling okay?'\n", 61 | "\n" 62 | ] 63 | }, 64 | { 65 | "cell_type": "markdown", 66 | "metadata": {}, 67 | "source": [ 68 | "**Задача 4: сколько раз буква 'w' встречается в строке ниже?**" 69 | ] 70 | }, 71 | { 72 | "cell_type": "code", 73 | "execution_count": null, 74 | "metadata": { 75 | "collapsed": true 76 | }, 77 | "outputs": [], 78 | "source": [ 79 | "s = 'twywywtwywbwhsjhwuwshshwuwwwjdjdid'\n" 80 | ] 81 | }, 82 | { 83 | "cell_type": "markdown", 84 | "metadata": {}, 85 | "source": [ 86 | "## Множества\n", 87 | "**Задача 5: найдите элементы в множества set1, которых нет в множестве set2:**" 88 | ] 89 | }, 90 | { 91 | "cell_type": "code", 92 | "execution_count": null, 93 | "metadata": { 94 | "collapsed": true 95 | }, 96 | "outputs": [], 97 | "source": [ 98 | "set1 = {2,3,1,5,6,8}\n", 99 | "set2 = {3,1,7,5,6,8}\n", 100 | "\n" 101 | ] 102 | }, 103 | { 104 | "cell_type": "markdown", 105 | "metadata": {}, 106 | "source": [ 107 | "**Задача 6: найдите все элементы, которые содержатся хотя бы в одном из двух множеств:**" 108 | ] 109 | }, 110 | { 111 | "cell_type": "code", 112 | "execution_count": null, 113 | "metadata": { 114 | "collapsed": true 115 | }, 116 | "outputs": [], 117 | "source": [] 118 | }, 119 | { 120 | "cell_type": "markdown", 121 | "metadata": {}, 122 | "source": [ 123 | "## Словари\n", 124 | "\n", 125 | "**Задача 7: создайте вот такой словарь, используя генератор словарей (dictionary comprehension):\n", 126 | "{0: 0, 1: 1, 2: 8, 3: 27, 4: 64}**" 127 | ] 128 | }, 129 | { 130 | "cell_type": "code", 131 | "execution_count": null, 132 | "metadata": { 133 | "collapsed": true 134 | }, 135 | "outputs": [], 136 | "source": [] 137 | }, 138 | { 139 | "cell_type": "markdown", 140 | "metadata": {}, 141 | "source": [ 142 | "## Списки\n", 143 | "\n", 144 | "**Задача 8: выполните реверсию для списка ниже:**" 145 | ] 146 | }, 147 | { 148 | "cell_type": "code", 149 | "execution_count": null, 150 | "metadata": { 151 | "collapsed": true 152 | }, 153 | "outputs": [], 154 | "source": [ 155 | "list1 = [1,2,3,4]\n" 156 | ] 157 | }, 158 | { 159 | "cell_type": "markdown", 160 | "metadata": {}, 161 | "source": [ 162 | "**Задача 9: отсортируйте список ниже:**" 163 | ] 164 | }, 165 | { 166 | "cell_type": "code", 167 | "execution_count": null, 168 | "metadata": { 169 | "collapsed": true 170 | }, 171 | "outputs": [], 172 | "source": [ 173 | "list2 = [3,4,2,5,1]\n" 174 | ] 175 | }, 176 | { 177 | "cell_type": "markdown", 178 | "metadata": {}, 179 | "source": [ 180 | "# Отличная работа!" 181 | ] 182 | } 183 | ], 184 | "metadata": { 185 | "kernelspec": { 186 | "display_name": "Python 3", 187 | "language": "python", 188 | "name": "python3" 189 | }, 190 | "language_info": { 191 | "codemirror_mode": { 192 | "name": "ipython", 193 | "version": 3 194 | }, 195 | "file_extension": ".py", 196 | "mimetype": "text/x-python", 197 | "name": "python", 198 | "nbconvert_exporter": "python", 199 | "pygments_lexer": "ipython3", 200 | "version": "3.6.1" 201 | } 202 | }, 203 | "nbformat": 4, 204 | "nbformat_minor": 1 205 | } 206 | -------------------------------------------------------------------------------- /05-Объектно-Ориентированное Программирование (Object Oriented Programming)/03-Object Oriented Programming Homework - Solution.ipynb: -------------------------------------------------------------------------------- 1 | { 2 | "cells": [ 3 | { 4 | "cell_type": "markdown", 5 | "metadata": {}, 6 | "source": [ 7 | "# Объектно-ориентированное программирование\n", 8 | "## Домашнее задание - РЕШЕНИЯ\n", 9 | "\n", 10 | "#### Задача 1\n", 11 | "Реализуйте методы класса Line (линия), который принимает на вход координаты в виде двух кортежей, и возвращает угол наклона (slope) и длину (distance) этой линии." 12 | ] 13 | }, 14 | { 15 | "cell_type": "code", 16 | "execution_count": 1, 17 | "metadata": { 18 | "collapsed": true 19 | }, 20 | "outputs": [], 21 | "source": [ 22 | "class Line(object):\n", 23 | " \n", 24 | " def __init__(self,coor1,coor2):\n", 25 | " self.coor1 = coor1\n", 26 | " self.coor2 = coor2\n", 27 | " \n", 28 | " def distance(self):\n", 29 | " #x1,y1 = self.coor1\n", 30 | " x1 = self.coor1[0]\n", 31 | " y1 = self.coor1[1]\n", 32 | " x2,y2 = self.coor2\n", 33 | " return ((x2-x1)**2 + (y2-y1)**2)**0.5\n", 34 | " \n", 35 | " def slope(self):\n", 36 | " x1,y1 = self.coor1\n", 37 | " x2,y2 = self.coor2\n", 38 | " return (y2-y1)/(x2-x1)" 39 | ] 40 | }, 41 | { 42 | "cell_type": "code", 43 | "execution_count": 2, 44 | "metadata": { 45 | "collapsed": true 46 | }, 47 | "outputs": [], 48 | "source": [ 49 | "coordinate1 = (3,2)\n", 50 | "coordinate2 = (8,10)\n", 51 | "\n", 52 | "li = Line(coordinate1,coordinate2)" 53 | ] 54 | }, 55 | { 56 | "cell_type": "code", 57 | "execution_count": 3, 58 | "metadata": {}, 59 | "outputs": [ 60 | { 61 | "data": { 62 | "text/plain": [ 63 | "9.433981132056603" 64 | ] 65 | }, 66 | "execution_count": 3, 67 | "metadata": {}, 68 | "output_type": "execute_result" 69 | } 70 | ], 71 | "source": [ 72 | "li.distance()" 73 | ] 74 | }, 75 | { 76 | "cell_type": "code", 77 | "execution_count": 4, 78 | "metadata": {}, 79 | "outputs": [ 80 | { 81 | "data": { 82 | "text/plain": [ 83 | "1.6" 84 | ] 85 | }, 86 | "execution_count": 4, 87 | "metadata": {}, 88 | "output_type": "execute_result" 89 | } 90 | ], 91 | "source": [ 92 | "li.slope()" 93 | ] 94 | }, 95 | { 96 | "cell_type": "markdown", 97 | "metadata": {}, 98 | "source": [ 99 | "________\n", 100 | "#### Задача 2" 101 | ] 102 | }, 103 | { 104 | "cell_type": "markdown", 105 | "metadata": {}, 106 | "source": [ 107 | "Реализуйте методы класса" 108 | ] 109 | }, 110 | { 111 | "cell_type": "code", 112 | "execution_count": 5, 113 | "metadata": { 114 | "collapsed": true 115 | }, 116 | "outputs": [], 117 | "source": [ 118 | "class Cylinder:\n", 119 | " \n", 120 | " def __init__(self,height=1,radius=1):\n", 121 | " self.height = height\n", 122 | " self.radius = radius\n", 123 | " \n", 124 | " def volume(self):\n", 125 | " return self.height*3.14*(self.radius)**2\n", 126 | " \n", 127 | " def surface_area(self):\n", 128 | " top = 3.14 * (self.radius)**2\n", 129 | " return (2*top) + (2*3.14*self.radius*self.height)" 130 | ] 131 | }, 132 | { 133 | "cell_type": "code", 134 | "execution_count": 6, 135 | "metadata": { 136 | "collapsed": true 137 | }, 138 | "outputs": [], 139 | "source": [ 140 | "c = Cylinder(2,3)" 141 | ] 142 | }, 143 | { 144 | "cell_type": "code", 145 | "execution_count": 7, 146 | "metadata": {}, 147 | "outputs": [ 148 | { 149 | "data": { 150 | "text/plain": [ 151 | "56.52" 152 | ] 153 | }, 154 | "execution_count": 7, 155 | "metadata": {}, 156 | "output_type": "execute_result" 157 | } 158 | ], 159 | "source": [ 160 | "c.volume()" 161 | ] 162 | }, 163 | { 164 | "cell_type": "code", 165 | "execution_count": 8, 166 | "metadata": {}, 167 | "outputs": [ 168 | { 169 | "data": { 170 | "text/plain": [ 171 | "94.2" 172 | ] 173 | }, 174 | "execution_count": 8, 175 | "metadata": {}, 176 | "output_type": "execute_result" 177 | } 178 | ], 179 | "source": [ 180 | "c.surface_area()" 181 | ] 182 | } 183 | ], 184 | "metadata": { 185 | "kernelspec": { 186 | "display_name": "Python 3", 187 | "language": "python", 188 | "name": "python3" 189 | }, 190 | "language_info": { 191 | "codemirror_mode": { 192 | "name": "ipython", 193 | "version": 3 194 | }, 195 | "file_extension": ".py", 196 | "mimetype": "text/x-python", 197 | "name": "python", 198 | "nbconvert_exporter": "python", 199 | "pygments_lexer": "ipython3", 200 | "version": "3.6.1" 201 | } 202 | }, 203 | "nbformat": 4, 204 | "nbformat_minor": 1 205 | } 206 | -------------------------------------------------------------------------------- /05-Объектно-Ориентированное Программирование (Object Oriented Programming)/.ipynb_checkpoints/03-Object Oriented Programming Homework - Solution-checkpoint.ipynb: -------------------------------------------------------------------------------- 1 | { 2 | "cells": [ 3 | { 4 | "cell_type": "markdown", 5 | "metadata": {}, 6 | "source": [ 7 | "# Объектно-ориентированное программирование\n", 8 | "## Домашнее задание - РЕШЕНИЯ\n", 9 | "\n", 10 | "#### Задача 1\n", 11 | "Реализуйте методы класса Line (линия), который принимает на вход координаты в виде двух кортежей, и возвращает угол наклона (slope) и длину (distance) этой линии." 12 | ] 13 | }, 14 | { 15 | "cell_type": "code", 16 | "execution_count": 1, 17 | "metadata": { 18 | "collapsed": true 19 | }, 20 | "outputs": [], 21 | "source": [ 22 | "class Line(object):\n", 23 | " \n", 24 | " def __init__(self,coor1,coor2):\n", 25 | " self.coor1 = coor1\n", 26 | " self.coor2 = coor2\n", 27 | " \n", 28 | " def distance(self):\n", 29 | " #x1,y1 = self.coor1\n", 30 | " x1 = self.coor1[0]\n", 31 | " y1 = self.coor1[1]\n", 32 | " x2,y2 = self.coor2\n", 33 | " return ((x2-x1)**2 + (y2-y1)**2)**0.5\n", 34 | " \n", 35 | " def slope(self):\n", 36 | " x1,y1 = self.coor1\n", 37 | " x2,y2 = self.coor2\n", 38 | " return (y2-y1)/(x2-x1)" 39 | ] 40 | }, 41 | { 42 | "cell_type": "code", 43 | "execution_count": 2, 44 | "metadata": { 45 | "collapsed": true 46 | }, 47 | "outputs": [], 48 | "source": [ 49 | "coordinate1 = (3,2)\n", 50 | "coordinate2 = (8,10)\n", 51 | "\n", 52 | "li = Line(coordinate1,coordinate2)" 53 | ] 54 | }, 55 | { 56 | "cell_type": "code", 57 | "execution_count": 3, 58 | "metadata": {}, 59 | "outputs": [ 60 | { 61 | "data": { 62 | "text/plain": [ 63 | "9.433981132056603" 64 | ] 65 | }, 66 | "execution_count": 3, 67 | "metadata": {}, 68 | "output_type": "execute_result" 69 | } 70 | ], 71 | "source": [ 72 | "li.distance()" 73 | ] 74 | }, 75 | { 76 | "cell_type": "code", 77 | "execution_count": 4, 78 | "metadata": {}, 79 | "outputs": [ 80 | { 81 | "data": { 82 | "text/plain": [ 83 | "1.6" 84 | ] 85 | }, 86 | "execution_count": 4, 87 | "metadata": {}, 88 | "output_type": "execute_result" 89 | } 90 | ], 91 | "source": [ 92 | "li.slope()" 93 | ] 94 | }, 95 | { 96 | "cell_type": "markdown", 97 | "metadata": {}, 98 | "source": [ 99 | "________\n", 100 | "#### Задача 2" 101 | ] 102 | }, 103 | { 104 | "cell_type": "markdown", 105 | "metadata": {}, 106 | "source": [ 107 | "Реализуйте методы класса" 108 | ] 109 | }, 110 | { 111 | "cell_type": "code", 112 | "execution_count": 5, 113 | "metadata": { 114 | "collapsed": true 115 | }, 116 | "outputs": [], 117 | "source": [ 118 | "class Cylinder:\n", 119 | " \n", 120 | " def __init__(self,height=1,radius=1):\n", 121 | " self.height = height\n", 122 | " self.radius = radius\n", 123 | " \n", 124 | " def volume(self):\n", 125 | " return self.height*3.14*(self.radius)**2\n", 126 | " \n", 127 | " def surface_area(self):\n", 128 | " top = 3.14 * (self.radius)**2\n", 129 | " return (2*top) + (2*3.14*self.radius*self.height)" 130 | ] 131 | }, 132 | { 133 | "cell_type": "code", 134 | "execution_count": 6, 135 | "metadata": { 136 | "collapsed": true 137 | }, 138 | "outputs": [], 139 | "source": [ 140 | "c = Cylinder(2,3)" 141 | ] 142 | }, 143 | { 144 | "cell_type": "code", 145 | "execution_count": 7, 146 | "metadata": {}, 147 | "outputs": [ 148 | { 149 | "data": { 150 | "text/plain": [ 151 | "56.52" 152 | ] 153 | }, 154 | "execution_count": 7, 155 | "metadata": {}, 156 | "output_type": "execute_result" 157 | } 158 | ], 159 | "source": [ 160 | "c.volume()" 161 | ] 162 | }, 163 | { 164 | "cell_type": "code", 165 | "execution_count": 8, 166 | "metadata": {}, 167 | "outputs": [ 168 | { 169 | "data": { 170 | "text/plain": [ 171 | "94.2" 172 | ] 173 | }, 174 | "execution_count": 8, 175 | "metadata": {}, 176 | "output_type": "execute_result" 177 | } 178 | ], 179 | "source": [ 180 | "c.surface_area()" 181 | ] 182 | } 183 | ], 184 | "metadata": { 185 | "kernelspec": { 186 | "display_name": "Python 3", 187 | "language": "python", 188 | "name": "python3" 189 | }, 190 | "language_info": { 191 | "codemirror_mode": { 192 | "name": "ipython", 193 | "version": 3 194 | }, 195 | "file_extension": ".py", 196 | "mimetype": "text/x-python", 197 | "name": "python", 198 | "nbconvert_exporter": "python", 199 | "pygments_lexer": "ipython3", 200 | "version": "3.6.1" 201 | } 202 | }, 203 | "nbformat": 4, 204 | "nbformat_minor": 1 205 | } 206 | -------------------------------------------------------------------------------- /01-Операторы Сравнения в Python (Python Comparison Operators)/02-Chained Comparison Operators.ipynb: -------------------------------------------------------------------------------- 1 | { 2 | "cells": [ 3 | { 4 | "cell_type": "markdown", 5 | "metadata": {}, 6 | "source": [ 7 | "# Соединение операторов сравнения (chained comparison)\n", 8 | "\n", 9 | "В Python можно объединять несколько операторов сравнения, чтобы выполнять более сложные проверки. Таким способом можно более кратко написать большие Boolean-выражения.\n", 10 | "\n", 11 | "В этой лекции мы посмотрим, как можно объединить операторы сравнения, а также рассмотрим две важных операции в Python: **and** и **or**.\n", 12 | "\n", 13 | "Посмотрим несколько примеров:" 14 | ] 15 | }, 16 | { 17 | "cell_type": "code", 18 | "execution_count": 1, 19 | "metadata": {}, 20 | "outputs": [ 21 | { 22 | "data": { 23 | "text/plain": [ 24 | "True" 25 | ] 26 | }, 27 | "execution_count": 1, 28 | "metadata": {}, 29 | "output_type": "execute_result" 30 | } 31 | ], 32 | "source": [ 33 | "1 < 2 < 3" 34 | ] 35 | }, 36 | { 37 | "cell_type": "markdown", 38 | "metadata": {}, 39 | "source": [ 40 | "Указанное выше условие проверяет, что 1 меньше 2 **и (and)** что 2 меньше 3. Это можно написать также с помощью операции **and** в Python:" 41 | ] 42 | }, 43 | { 44 | "cell_type": "code", 45 | "execution_count": 2, 46 | "metadata": {}, 47 | "outputs": [ 48 | { 49 | "data": { 50 | "text/plain": [ 51 | "True" 52 | ] 53 | }, 54 | "execution_count": 2, 55 | "metadata": {}, 56 | "output_type": "execute_result" 57 | } 58 | ], 59 | "source": [ 60 | "1<2 and 2<3" 61 | ] 62 | }, 63 | { 64 | "cell_type": "markdown", 65 | "metadata": {}, 66 | "source": [ 67 | "Операция **and** говорит о том, что оба условия должны принимать значение true, чтобы всё условие приняло значение true. Рассмотрим другой пример:" 68 | ] 69 | }, 70 | { 71 | "cell_type": "code", 72 | "execution_count": 3, 73 | "metadata": {}, 74 | "outputs": [ 75 | { 76 | "data": { 77 | "text/plain": [ 78 | "True" 79 | ] 80 | }, 81 | "execution_count": 3, 82 | "metadata": {}, 83 | "output_type": "execute_result" 84 | } 85 | ], 86 | "source": [ 87 | "1 < 3 > 2" 88 | ] 89 | }, 90 | { 91 | "cell_type": "markdown", 92 | "metadata": {}, 93 | "source": [ 94 | "Условие выше проверяет, что 3 больше обоих чисел 1 и 2, так что можно переписать это с помощью **and**:" 95 | ] 96 | }, 97 | { 98 | "cell_type": "code", 99 | "execution_count": 4, 100 | "metadata": {}, 101 | "outputs": [ 102 | { 103 | "data": { 104 | "text/plain": [ 105 | "True" 106 | ] 107 | }, 108 | "execution_count": 4, 109 | "metadata": {}, 110 | "output_type": "execute_result" 111 | } 112 | ], 113 | "source": [ 114 | "1<3 and 3>2" 115 | ] 116 | }, 117 | { 118 | "cell_type": "markdown", 119 | "metadata": {}, 120 | "source": [ 121 | "Важно сказать, что Python выполняет обе проверки. Мы также можем использовать **or** для сравнений в Python. Например:" 122 | ] 123 | }, 124 | { 125 | "cell_type": "code", 126 | "execution_count": 5, 127 | "metadata": {}, 128 | "outputs": [ 129 | { 130 | "data": { 131 | "text/plain": [ 132 | "True" 133 | ] 134 | }, 135 | "execution_count": 5, 136 | "metadata": {}, 137 | "output_type": "execute_result" 138 | } 139 | ], 140 | "source": [ 141 | "1==2 or 2<3" 142 | ] 143 | }, 144 | { 145 | "cell_type": "markdown", 146 | "metadata": {}, 147 | "source": [ 148 | "Обратите внимание, почему это равно true; потому что для оператора **or**, нам нужно значение true в одном *или* в другом условии. Вот ещё один пример:" 149 | ] 150 | }, 151 | { 152 | "cell_type": "code", 153 | "execution_count": 6, 154 | "metadata": {}, 155 | "outputs": [ 156 | { 157 | "data": { 158 | "text/plain": [ 159 | "True" 160 | ] 161 | }, 162 | "execution_count": 6, 163 | "metadata": {}, 164 | "output_type": "execute_result" 165 | } 166 | ], 167 | "source": [ 168 | "1==1 or 100==1" 169 | ] 170 | }, 171 | { 172 | "cell_type": "markdown", 173 | "metadata": {}, 174 | "source": [ 175 | "Отлично! Теперь вы можете использовать **and** и **or**, а также понимаете, как объединяются операторы сравнения.\n" 176 | ] 177 | } 178 | ], 179 | "metadata": { 180 | "kernelspec": { 181 | "display_name": "Python 3", 182 | "language": "python", 183 | "name": "python3" 184 | }, 185 | "language_info": { 186 | "codemirror_mode": { 187 | "name": "ipython", 188 | "version": 3 189 | }, 190 | "file_extension": ".py", 191 | "mimetype": "text/x-python", 192 | "name": "python", 193 | "nbconvert_exporter": "python", 194 | "pygments_lexer": "ipython3", 195 | "version": "3.6.1" 196 | } 197 | }, 198 | "nbformat": 4, 199 | "nbformat_minor": 1 200 | } 201 | -------------------------------------------------------------------------------- /07-Ошибки и Обработка Исключений (Errors and Exception Handling)/02-Errors and Exceptions Homework.ipynb: -------------------------------------------------------------------------------- 1 | { 2 | "cells": [ 3 | { 4 | "cell_type": "markdown", 5 | "metadata": {}, 6 | "source": [ 7 | "# Ошибки и исключения - домашнее задание" 8 | ] 9 | }, 10 | { 11 | "cell_type": "markdown", 12 | "metadata": {}, 13 | "source": [ 14 | "### Задача 1\n", 15 | "Обработайте исключение, которое вызывает код ниже, с помощью блоков try и except." 16 | ] 17 | }, 18 | { 19 | "cell_type": "code", 20 | "execution_count": 1, 21 | "metadata": {}, 22 | "outputs": [ 23 | { 24 | "ename": "TypeError", 25 | "evalue": "unsupported operand type(s) for ** or pow(): 'str' and 'int'", 26 | "output_type": "error", 27 | "traceback": [ 28 | "\u001b[1;31m---------------------------------------------------------------------------\u001b[0m", 29 | "\u001b[1;31mTypeError\u001b[0m Traceback (most recent call last)", 30 | "\u001b[1;32m\u001b[0m in \u001b[0;36m\u001b[1;34m()\u001b[0m\n\u001b[0;32m 1\u001b[0m \u001b[1;32mfor\u001b[0m \u001b[0mi\u001b[0m \u001b[1;32min\u001b[0m \u001b[1;33m[\u001b[0m\u001b[1;34m'a'\u001b[0m\u001b[1;33m,\u001b[0m\u001b[1;34m'b'\u001b[0m\u001b[1;33m,\u001b[0m\u001b[1;34m'c'\u001b[0m\u001b[1;33m]\u001b[0m\u001b[1;33m:\u001b[0m\u001b[1;33m\u001b[0m\u001b[0m\n\u001b[1;32m----> 2\u001b[1;33m \u001b[0mprint\u001b[0m\u001b[1;33m(\u001b[0m\u001b[0mi\u001b[0m\u001b[1;33m**\u001b[0m\u001b[1;36m2\u001b[0m\u001b[1;33m)\u001b[0m\u001b[1;33m\u001b[0m\u001b[0m\n\u001b[0m", 31 | "\u001b[1;31mTypeError\u001b[0m: unsupported operand type(s) for ** or pow(): 'str' and 'int'" 32 | ] 33 | } 34 | ], 35 | "source": [ 36 | "for i in ['a','b','c']:\n", 37 | " print(i**2)" 38 | ] 39 | }, 40 | { 41 | "cell_type": "markdown", 42 | "metadata": {}, 43 | "source": [ 44 | "### Задача 2\n", 45 | "Обработайте исключение, которое вызывает код ниже, с помощью блоков try и except. Затем используйте блок finally, чтобы сказать, что всё сделано." 46 | ] 47 | }, 48 | { 49 | "cell_type": "code", 50 | "execution_count": 2, 51 | "metadata": {}, 52 | "outputs": [ 53 | { 54 | "ename": "ZeroDivisionError", 55 | "evalue": "division by zero", 56 | "output_type": "error", 57 | "traceback": [ 58 | "\u001b[1;31m---------------------------------------------------------------------------\u001b[0m", 59 | "\u001b[1;31mZeroDivisionError\u001b[0m Traceback (most recent call last)", 60 | "\u001b[1;32m\u001b[0m in \u001b[0;36m\u001b[1;34m()\u001b[0m\n\u001b[0;32m 2\u001b[0m \u001b[0my\u001b[0m \u001b[1;33m=\u001b[0m \u001b[1;36m0\u001b[0m\u001b[1;33m\u001b[0m\u001b[0m\n\u001b[0;32m 3\u001b[0m \u001b[1;33m\u001b[0m\u001b[0m\n\u001b[1;32m----> 4\u001b[1;33m \u001b[0mz\u001b[0m \u001b[1;33m=\u001b[0m \u001b[0mx\u001b[0m\u001b[1;33m/\u001b[0m\u001b[0my\u001b[0m\u001b[1;33m\u001b[0m\u001b[0m\n\u001b[0m", 61 | "\u001b[1;31mZeroDivisionError\u001b[0m: division by zero" 62 | ] 63 | } 64 | ], 65 | "source": [ 66 | "x = 5\n", 67 | "y = 0\n", 68 | "\n", 69 | "z = x/y" 70 | ] 71 | }, 72 | { 73 | "cell_type": "markdown", 74 | "metadata": {}, 75 | "source": [ 76 | "### Задача 3\n", 77 | "Напишите функцию, которая спрашивает пользователя ввести число, и затем выводит это число в квадрате. Используйте цикл while и блоки try, except и else для обработки некорректно введённых данных." 78 | ] 79 | }, 80 | { 81 | "cell_type": "code", 82 | "execution_count": 1, 83 | "metadata": { 84 | "collapsed": true 85 | }, 86 | "outputs": [], 87 | "source": [ 88 | "def ask():\n", 89 | " pass" 90 | ] 91 | }, 92 | { 93 | "cell_type": "code", 94 | "execution_count": 2, 95 | "metadata": {}, 96 | "outputs": [ 97 | { 98 | "name": "stdout", 99 | "output_type": "stream", 100 | "text": [ 101 | "Введите число: null\n", 102 | "Произошла ошибка! Попробуйте снова!\n", 103 | "Введите число: 2\n", 104 | "Спасибо! Квадрат числа: 4\n" 105 | ] 106 | } 107 | ], 108 | "source": [ 109 | "ask()" 110 | ] 111 | }, 112 | { 113 | "cell_type": "markdown", 114 | "metadata": {}, 115 | "source": [ 116 | "# Отличная работа!" 117 | ] 118 | } 119 | ], 120 | "metadata": { 121 | "kernelspec": { 122 | "display_name": "Python 3", 123 | "language": "python", 124 | "name": "python3" 125 | }, 126 | "language_info": { 127 | "codemirror_mode": { 128 | "name": "ipython", 129 | "version": 3 130 | }, 131 | "file_extension": ".py", 132 | "mimetype": "text/x-python", 133 | "name": "python", 134 | "nbconvert_exporter": "python", 135 | "pygments_lexer": "ipython3", 136 | "version": "3.6.1" 137 | } 138 | }, 139 | "nbformat": 4, 140 | "nbformat_minor": 1 141 | } 142 | -------------------------------------------------------------------------------- /13-Продвинутые Модули Python (Advanced Python Modules)/06-StringIO.ipynb: -------------------------------------------------------------------------------- 1 | { 2 | "cells": [ 3 | { 4 | "cell_type": "markdown", 5 | "metadata": {}, 6 | "source": [ 7 | "# Объекты StringIO и Модуль io\n", 8 | "\n", 9 | "Ранее в **Лекции 24 - Файлы** мы открывали файлы, которые существуют вне python, они направляли их содержимое в объект file в памяти. Также можно создавать в памяти объекты, похожие на файлы, внутри Вашей программы, с которыми Python будет работать таким же образом. Текстовые данные можно сохранять в объекте StringIO, а бинарные данные - в объекте BytesIO. Эти объекты можно использовать на входе и выходе большинства функций, которые работают со стандартным объектом file.\n", 10 | "\n", 11 | "Давайте рассмотрим объекты StringIO. Проще всего рассмотреть их на примере:" 12 | ] 13 | }, 14 | { 15 | "cell_type": "code", 16 | "execution_count": 1, 17 | "metadata": { 18 | "collapsed": true 19 | }, 20 | "outputs": [], 21 | "source": [ 22 | "import io" 23 | ] 24 | }, 25 | { 26 | "cell_type": "code", 27 | "execution_count": 2, 28 | "metadata": { 29 | "collapsed": true 30 | }, 31 | "outputs": [], 32 | "source": [ 33 | "# Произвольная строка\n", 34 | "message = 'This is just a normal string.'" 35 | ] 36 | }, 37 | { 38 | "cell_type": "code", 39 | "execution_count": 3, 40 | "metadata": { 41 | "collapsed": true 42 | }, 43 | "outputs": [], 44 | "source": [ 45 | "# Используем метод StringIO, чтобы создать объект file\n", 46 | "f = io.StringIO(message)" 47 | ] 48 | }, 49 | { 50 | "cell_type": "markdown", 51 | "metadata": {}, 52 | "source": [ 53 | "Теперь у нас есть объект *f*, с которым можно работать так же, как с файлом. Например:" 54 | ] 55 | }, 56 | { 57 | "cell_type": "code", 58 | "execution_count": 4, 59 | "metadata": {}, 60 | "outputs": [ 61 | { 62 | "data": { 63 | "text/plain": [ 64 | "'This is just a normal string.'" 65 | ] 66 | }, 67 | "execution_count": 4, 68 | "metadata": {}, 69 | "output_type": "execute_result" 70 | } 71 | ], 72 | "source": [ 73 | "f.read()" 74 | ] 75 | }, 76 | { 77 | "cell_type": "markdown", 78 | "metadata": {}, 79 | "source": [ 80 | "Также мы можем выполнять запись в него:" 81 | ] 82 | }, 83 | { 84 | "cell_type": "code", 85 | "execution_count": 5, 86 | "metadata": {}, 87 | "outputs": [ 88 | { 89 | "data": { 90 | "text/plain": [ 91 | "40" 92 | ] 93 | }, 94 | "execution_count": 5, 95 | "metadata": {}, 96 | "output_type": "execute_result" 97 | } 98 | ], 99 | "source": [ 100 | "f.write(' Second line written to file like object')" 101 | ] 102 | }, 103 | { 104 | "cell_type": "code", 105 | "execution_count": 6, 106 | "metadata": {}, 107 | "outputs": [ 108 | { 109 | "data": { 110 | "text/plain": [ 111 | "0" 112 | ] 113 | }, 114 | "execution_count": 6, 115 | "metadata": {}, 116 | "output_type": "execute_result" 117 | } 118 | ], 119 | "source": [ 120 | "# Перемещаем курсор, так же, как и в обычном файле\n", 121 | "f.seek(0)" 122 | ] 123 | }, 124 | { 125 | "cell_type": "code", 126 | "execution_count": 7, 127 | "metadata": {}, 128 | "outputs": [ 129 | { 130 | "data": { 131 | "text/plain": [ 132 | "'This is just a normal string. Second line written to file like object'" 133 | ] 134 | }, 135 | "execution_count": 7, 136 | "metadata": {}, 137 | "output_type": "execute_result" 138 | } 139 | ], 140 | "source": [ 141 | "# Снова выполняем чтение\n", 142 | "f.read()" 143 | ] 144 | }, 145 | { 146 | "cell_type": "code", 147 | "execution_count": 8, 148 | "metadata": { 149 | "collapsed": true 150 | }, 151 | "outputs": [], 152 | "source": [ 153 | "# Закрываем объект, когда его содержимое больше не нужно\n", 154 | "f.close()" 155 | ] 156 | }, 157 | { 158 | "cell_type": "markdown", 159 | "metadata": {}, 160 | "source": [ 161 | "Отлично! Теперь Вы знаете, как использовать StringIO для преобразования обычных строк в объекты file в памяти. Это может пригодиться в различных ситуациях, особенно при извлечении содержимого web-страниц, когда Вы считываете данные в виде строк, и сохраняете их в виде файлов.\n", 162 | "\n", 163 | "Более подробно о StringIO можно прочитать в документации: https://docs.python.org/3/library/io.html" 164 | ] 165 | } 166 | ], 167 | "metadata": { 168 | "kernelspec": { 169 | "display_name": "Python 3", 170 | "language": "python", 171 | "name": "python3" 172 | }, 173 | "language_info": { 174 | "codemirror_mode": { 175 | "name": "ipython", 176 | "version": 3 177 | }, 178 | "file_extension": ".py", 179 | "mimetype": "text/x-python", 180 | "name": "python", 181 | "nbconvert_exporter": "python", 182 | "pygments_lexer": "ipython3", 183 | "version": "3.6.1" 184 | } 185 | }, 186 | "nbformat": 4, 187 | "nbformat_minor": 1 188 | } 189 | -------------------------------------------------------------------------------- /01-Операторы Сравнения в Python (Python Comparison Operators)/.ipynb_checkpoints/02-Chained Comparison Operators-checkpoint.ipynb: -------------------------------------------------------------------------------- 1 | { 2 | "cells": [ 3 | { 4 | "cell_type": "markdown", 5 | "metadata": {}, 6 | "source": [ 7 | "# Соединение операторов сравнения (chained comparison)\n", 8 | "\n", 9 | "В Python можно объединять несколько операторов сравнения, чтобы выполнять более сложные проверки. Таким способом можно более кратко написать большие Boolean-выражения.\n", 10 | "\n", 11 | "В этой лекции мы посмотрим, как можно объединить операторы сравнения, а также рассмотрим две важных операции в Python: **and** и **or**.\n", 12 | "\n", 13 | "Посмотрим несколько примеров:" 14 | ] 15 | }, 16 | { 17 | "cell_type": "code", 18 | "execution_count": 1, 19 | "metadata": {}, 20 | "outputs": [ 21 | { 22 | "data": { 23 | "text/plain": [ 24 | "True" 25 | ] 26 | }, 27 | "execution_count": 1, 28 | "metadata": {}, 29 | "output_type": "execute_result" 30 | } 31 | ], 32 | "source": [ 33 | "1 < 2 < 3" 34 | ] 35 | }, 36 | { 37 | "cell_type": "markdown", 38 | "metadata": {}, 39 | "source": [ 40 | "Указанное выше условие проверяет, что 1 меньше 2 **и (and)** что 2 меньше 3. Это можно написать также с помощью операции **and** в Python:" 41 | ] 42 | }, 43 | { 44 | "cell_type": "code", 45 | "execution_count": 2, 46 | "metadata": {}, 47 | "outputs": [ 48 | { 49 | "data": { 50 | "text/plain": [ 51 | "True" 52 | ] 53 | }, 54 | "execution_count": 2, 55 | "metadata": {}, 56 | "output_type": "execute_result" 57 | } 58 | ], 59 | "source": [ 60 | "1<2 and 2<3" 61 | ] 62 | }, 63 | { 64 | "cell_type": "markdown", 65 | "metadata": {}, 66 | "source": [ 67 | "Операция **and** говорит о том, что оба условия должны принимать значение true, чтобы всё условие приняло значение true. Рассмотрим другой пример:" 68 | ] 69 | }, 70 | { 71 | "cell_type": "code", 72 | "execution_count": 3, 73 | "metadata": {}, 74 | "outputs": [ 75 | { 76 | "data": { 77 | "text/plain": [ 78 | "True" 79 | ] 80 | }, 81 | "execution_count": 3, 82 | "metadata": {}, 83 | "output_type": "execute_result" 84 | } 85 | ], 86 | "source": [ 87 | "1 < 3 > 2" 88 | ] 89 | }, 90 | { 91 | "cell_type": "markdown", 92 | "metadata": {}, 93 | "source": [ 94 | "Условие выше проверяет, что 3 больше обоих чисел 1 и 2, так что можно переписать это с помощью **and**:" 95 | ] 96 | }, 97 | { 98 | "cell_type": "code", 99 | "execution_count": 4, 100 | "metadata": {}, 101 | "outputs": [ 102 | { 103 | "data": { 104 | "text/plain": [ 105 | "True" 106 | ] 107 | }, 108 | "execution_count": 4, 109 | "metadata": {}, 110 | "output_type": "execute_result" 111 | } 112 | ], 113 | "source": [ 114 | "1<3 and 3>2" 115 | ] 116 | }, 117 | { 118 | "cell_type": "markdown", 119 | "metadata": {}, 120 | "source": [ 121 | "Важно сказать, что Python выполняет обе проверки. Мы также можем использовать **or** для сравнений в Python. Например:" 122 | ] 123 | }, 124 | { 125 | "cell_type": "code", 126 | "execution_count": 5, 127 | "metadata": {}, 128 | "outputs": [ 129 | { 130 | "data": { 131 | "text/plain": [ 132 | "True" 133 | ] 134 | }, 135 | "execution_count": 5, 136 | "metadata": {}, 137 | "output_type": "execute_result" 138 | } 139 | ], 140 | "source": [ 141 | "1==2 or 2<3" 142 | ] 143 | }, 144 | { 145 | "cell_type": "markdown", 146 | "metadata": {}, 147 | "source": [ 148 | "Обратите внимание, почему это равно true; потому что для оператора **or**, нам нужно значение true в одном *или* в другом условии. Вот ещё один пример:" 149 | ] 150 | }, 151 | { 152 | "cell_type": "code", 153 | "execution_count": 6, 154 | "metadata": {}, 155 | "outputs": [ 156 | { 157 | "data": { 158 | "text/plain": [ 159 | "True" 160 | ] 161 | }, 162 | "execution_count": 6, 163 | "metadata": {}, 164 | "output_type": "execute_result" 165 | } 166 | ], 167 | "source": [ 168 | "1==1 or 100==1" 169 | ] 170 | }, 171 | { 172 | "cell_type": "markdown", 173 | "metadata": {}, 174 | "source": [ 175 | "Отлично! Теперь вы можете использовать **and** и **or**, а также понимаете, как объединяются операторы сравнения.\n" 176 | ] 177 | } 178 | ], 179 | "metadata": { 180 | "kernelspec": { 181 | "display_name": "Python 3", 182 | "language": "python", 183 | "name": "python3" 184 | }, 185 | "language_info": { 186 | "codemirror_mode": { 187 | "name": "ipython", 188 | "version": 3 189 | }, 190 | "file_extension": ".py", 191 | "mimetype": "text/x-python", 192 | "name": "python", 193 | "nbconvert_exporter": "python", 194 | "pygments_lexer": "ipython3", 195 | "version": "3.6.1" 196 | } 197 | }, 198 | "nbformat": 4, 199 | "nbformat_minor": 1 200 | } 201 | -------------------------------------------------------------------------------- /07-Ошибки и Обработка Исключений (Errors and Exception Handling)/.ipynb_checkpoints/02-Errors and Exceptions Homework-checkpoint.ipynb: -------------------------------------------------------------------------------- 1 | { 2 | "cells": [ 3 | { 4 | "cell_type": "markdown", 5 | "metadata": {}, 6 | "source": [ 7 | "# Ошибки и исключения - домашнее задание" 8 | ] 9 | }, 10 | { 11 | "cell_type": "markdown", 12 | "metadata": {}, 13 | "source": [ 14 | "### Задача 1\n", 15 | "Обработайте исключение, которое вызывает код ниже, с помощью блоков try и except." 16 | ] 17 | }, 18 | { 19 | "cell_type": "code", 20 | "execution_count": 1, 21 | "metadata": {}, 22 | "outputs": [ 23 | { 24 | "ename": "TypeError", 25 | "evalue": "unsupported operand type(s) for ** or pow(): 'str' and 'int'", 26 | "output_type": "error", 27 | "traceback": [ 28 | "\u001b[1;31m---------------------------------------------------------------------------\u001b[0m", 29 | "\u001b[1;31mTypeError\u001b[0m Traceback (most recent call last)", 30 | "\u001b[1;32m\u001b[0m in \u001b[0;36m\u001b[1;34m()\u001b[0m\n\u001b[0;32m 1\u001b[0m \u001b[1;32mfor\u001b[0m \u001b[0mi\u001b[0m \u001b[1;32min\u001b[0m \u001b[1;33m[\u001b[0m\u001b[1;34m'a'\u001b[0m\u001b[1;33m,\u001b[0m\u001b[1;34m'b'\u001b[0m\u001b[1;33m,\u001b[0m\u001b[1;34m'c'\u001b[0m\u001b[1;33m]\u001b[0m\u001b[1;33m:\u001b[0m\u001b[1;33m\u001b[0m\u001b[0m\n\u001b[1;32m----> 2\u001b[1;33m \u001b[0mprint\u001b[0m\u001b[1;33m(\u001b[0m\u001b[0mi\u001b[0m\u001b[1;33m**\u001b[0m\u001b[1;36m2\u001b[0m\u001b[1;33m)\u001b[0m\u001b[1;33m\u001b[0m\u001b[0m\n\u001b[0m", 31 | "\u001b[1;31mTypeError\u001b[0m: unsupported operand type(s) for ** or pow(): 'str' and 'int'" 32 | ] 33 | } 34 | ], 35 | "source": [ 36 | "for i in ['a','b','c']:\n", 37 | " print(i**2)" 38 | ] 39 | }, 40 | { 41 | "cell_type": "markdown", 42 | "metadata": {}, 43 | "source": [ 44 | "### Задача 2\n", 45 | "Обработайте исключение, которое вызывает код ниже, с помощью блоков try и except. Затем используйте блок finally, чтобы сказать, что всё сделано." 46 | ] 47 | }, 48 | { 49 | "cell_type": "code", 50 | "execution_count": 2, 51 | "metadata": {}, 52 | "outputs": [ 53 | { 54 | "ename": "ZeroDivisionError", 55 | "evalue": "division by zero", 56 | "output_type": "error", 57 | "traceback": [ 58 | "\u001b[1;31m---------------------------------------------------------------------------\u001b[0m", 59 | "\u001b[1;31mZeroDivisionError\u001b[0m Traceback (most recent call last)", 60 | "\u001b[1;32m\u001b[0m in \u001b[0;36m\u001b[1;34m()\u001b[0m\n\u001b[0;32m 2\u001b[0m \u001b[0my\u001b[0m \u001b[1;33m=\u001b[0m \u001b[1;36m0\u001b[0m\u001b[1;33m\u001b[0m\u001b[0m\n\u001b[0;32m 3\u001b[0m \u001b[1;33m\u001b[0m\u001b[0m\n\u001b[1;32m----> 4\u001b[1;33m \u001b[0mz\u001b[0m \u001b[1;33m=\u001b[0m \u001b[0mx\u001b[0m\u001b[1;33m/\u001b[0m\u001b[0my\u001b[0m\u001b[1;33m\u001b[0m\u001b[0m\n\u001b[0m", 61 | "\u001b[1;31mZeroDivisionError\u001b[0m: division by zero" 62 | ] 63 | } 64 | ], 65 | "source": [ 66 | "x = 5\n", 67 | "y = 0\n", 68 | "\n", 69 | "z = x/y" 70 | ] 71 | }, 72 | { 73 | "cell_type": "markdown", 74 | "metadata": {}, 75 | "source": [ 76 | "### Задача 3\n", 77 | "Напишите функцию, которая спрашивает пользователя ввести число, и затем выводит это число в квадрате. Используйте цикл while и блоки try, except и else для обработки некорректно введённых данных." 78 | ] 79 | }, 80 | { 81 | "cell_type": "code", 82 | "execution_count": 1, 83 | "metadata": { 84 | "collapsed": true 85 | }, 86 | "outputs": [], 87 | "source": [ 88 | "def ask():\n", 89 | " pass" 90 | ] 91 | }, 92 | { 93 | "cell_type": "code", 94 | "execution_count": 2, 95 | "metadata": {}, 96 | "outputs": [ 97 | { 98 | "name": "stdout", 99 | "output_type": "stream", 100 | "text": [ 101 | "Введите число: null\n", 102 | "Произошла ошибка! Попробуйте снова!\n", 103 | "Введите число: 2\n", 104 | "Спасибо! Квадрат числа: 4\n" 105 | ] 106 | } 107 | ], 108 | "source": [ 109 | "ask()" 110 | ] 111 | }, 112 | { 113 | "cell_type": "markdown", 114 | "metadata": {}, 115 | "source": [ 116 | "# Отличная работа!" 117 | ] 118 | } 119 | ], 120 | "metadata": { 121 | "kernelspec": { 122 | "display_name": "Python 3", 123 | "language": "python", 124 | "name": "python3" 125 | }, 126 | "language_info": { 127 | "codemirror_mode": { 128 | "name": "ipython", 129 | "version": 3 130 | }, 131 | "file_extension": ".py", 132 | "mimetype": "text/x-python", 133 | "name": "python", 134 | "nbconvert_exporter": "python", 135 | "pygments_lexer": "ipython3", 136 | "version": "3.6.1" 137 | } 138 | }, 139 | "nbformat": 4, 140 | "nbformat_minor": 1 141 | } 142 | -------------------------------------------------------------------------------- /13-Продвинутые Модули Python (Advanced Python Modules)/.ipynb_checkpoints/06-StringIO-checkpoint.ipynb: -------------------------------------------------------------------------------- 1 | { 2 | "cells": [ 3 | { 4 | "cell_type": "markdown", 5 | "metadata": {}, 6 | "source": [ 7 | "# Объекты StringIO и Модуль io\n", 8 | "\n", 9 | "Ранее в **Лекции 24 - Файлы** мы открывали файлы, которые существуют вне python, они направляли их содержимое в объект file в памяти. Также можно создавать в памяти объекты, похожие на файлы, внутри Вашей программы, с которыми Python будет работать таким же образом. Текстовые данные можно сохранять в объекте StringIO, а бинарные данные - в объекте BytesIO. Эти объекты можно использовать на входе и выходе большинства функций, которые работают со стандартным объектом file.\n", 10 | "\n", 11 | "Давайте рассмотрим объекты StringIO. Проще всего рассмотреть их на примере:" 12 | ] 13 | }, 14 | { 15 | "cell_type": "code", 16 | "execution_count": 1, 17 | "metadata": { 18 | "collapsed": true 19 | }, 20 | "outputs": [], 21 | "source": [ 22 | "import io" 23 | ] 24 | }, 25 | { 26 | "cell_type": "code", 27 | "execution_count": 2, 28 | "metadata": { 29 | "collapsed": true 30 | }, 31 | "outputs": [], 32 | "source": [ 33 | "# Произвольная строка\n", 34 | "message = 'This is just a normal string.'" 35 | ] 36 | }, 37 | { 38 | "cell_type": "code", 39 | "execution_count": 3, 40 | "metadata": { 41 | "collapsed": true 42 | }, 43 | "outputs": [], 44 | "source": [ 45 | "# Используем метод StringIO, чтобы создать объект file\n", 46 | "f = io.StringIO(message)" 47 | ] 48 | }, 49 | { 50 | "cell_type": "markdown", 51 | "metadata": {}, 52 | "source": [ 53 | "Теперь у нас есть объект *f*, с которым можно работать так же, как с файлом. Например:" 54 | ] 55 | }, 56 | { 57 | "cell_type": "code", 58 | "execution_count": 4, 59 | "metadata": {}, 60 | "outputs": [ 61 | { 62 | "data": { 63 | "text/plain": [ 64 | "'This is just a normal string.'" 65 | ] 66 | }, 67 | "execution_count": 4, 68 | "metadata": {}, 69 | "output_type": "execute_result" 70 | } 71 | ], 72 | "source": [ 73 | "f.read()" 74 | ] 75 | }, 76 | { 77 | "cell_type": "markdown", 78 | "metadata": {}, 79 | "source": [ 80 | "Также мы можем выполнять запись в него:" 81 | ] 82 | }, 83 | { 84 | "cell_type": "code", 85 | "execution_count": 5, 86 | "metadata": {}, 87 | "outputs": [ 88 | { 89 | "data": { 90 | "text/plain": [ 91 | "40" 92 | ] 93 | }, 94 | "execution_count": 5, 95 | "metadata": {}, 96 | "output_type": "execute_result" 97 | } 98 | ], 99 | "source": [ 100 | "f.write(' Second line written to file like object')" 101 | ] 102 | }, 103 | { 104 | "cell_type": "code", 105 | "execution_count": 6, 106 | "metadata": {}, 107 | "outputs": [ 108 | { 109 | "data": { 110 | "text/plain": [ 111 | "0" 112 | ] 113 | }, 114 | "execution_count": 6, 115 | "metadata": {}, 116 | "output_type": "execute_result" 117 | } 118 | ], 119 | "source": [ 120 | "# Перемещаем курсор, так же, как и в обычном файле\n", 121 | "f.seek(0)" 122 | ] 123 | }, 124 | { 125 | "cell_type": "code", 126 | "execution_count": 7, 127 | "metadata": {}, 128 | "outputs": [ 129 | { 130 | "data": { 131 | "text/plain": [ 132 | "'This is just a normal string. Second line written to file like object'" 133 | ] 134 | }, 135 | "execution_count": 7, 136 | "metadata": {}, 137 | "output_type": "execute_result" 138 | } 139 | ], 140 | "source": [ 141 | "# Снова выполняем чтение\n", 142 | "f.read()" 143 | ] 144 | }, 145 | { 146 | "cell_type": "code", 147 | "execution_count": 8, 148 | "metadata": { 149 | "collapsed": true 150 | }, 151 | "outputs": [], 152 | "source": [ 153 | "# Закрываем объект, когда его содержимое больше не нужно\n", 154 | "f.close()" 155 | ] 156 | }, 157 | { 158 | "cell_type": "markdown", 159 | "metadata": {}, 160 | "source": [ 161 | "Отлично! Теперь Вы знаете, как использовать StringIO для преобразования обычных строк в объекты file в памяти. Это может пригодиться в различных ситуациях, особенно при извлечении содержимого web-страниц, когда Вы считываете данные в виде строк, и сохраняете их в виде файлов.\n", 162 | "\n", 163 | "Более подробно о StringIO можно прочитать в документации: https://docs.python.org/3/library/io.html" 164 | ] 165 | } 166 | ], 167 | "metadata": { 168 | "kernelspec": { 169 | "display_name": "Python 3", 170 | "language": "python", 171 | "name": "python3" 172 | }, 173 | "language_info": { 174 | "codemirror_mode": { 175 | "name": "ipython", 176 | "version": 3 177 | }, 178 | "file_extension": ".py", 179 | "mimetype": "text/x-python", 180 | "name": "python", 181 | "nbconvert_exporter": "python", 182 | "pygments_lexer": "ipython3", 183 | "version": "3.6.1" 184 | } 185 | }, 186 | "nbformat": 4, 187 | "nbformat_minor": 1 188 | } 189 | -------------------------------------------------------------------------------- /03-Методы и Функции (Methods and Functions)/01-Methods.ipynb: -------------------------------------------------------------------------------- 1 | { 2 | "cells": [ 3 | { 4 | "cell_type": "markdown", 5 | "metadata": {}, 6 | "source": [ 7 | "# Методы\n", 8 | "\n", 9 | "Мы уже видели некоторые методы, когда изучали объекты и структуры данных в Python. Методы - это по сути функции, встроенные в объекты. Позже в этом курсе мы узнаем, как создавать свои собственные объекты и методы, используя Объектно-Ориентированное Программирование (ООП) и классы.\n", 10 | "\n", 11 | "Методы выполняют определённые действия для объекта, и они могут принимать на вход параметры, так же, как и функции. В этой лекции мы ознакомимся с основами методов и обсудим основные подходы в проектированию методов. Позже мы вернёмся к ним, когда перейдем к Объектно-Ориентированному Программированию.\n", 12 | "\n", 13 | "Методы пишутся так:\n", 14 | "\n", 15 | " object.method(arg1,arg2,etc...)\n", 16 | " \n", 17 | "Позже мы увидим, что можно предоставить себе что методы содержат параметр 'self', который ссылается на сам объект. Этот параметр нельзя увидеть, но мы будем использовать его позднее в лекциях про Объектно-Ориентированное Программирование.\n", 18 | "\n", 19 | "В качестве примера давайте посмотрим на различные методы, которые имеет список:" 20 | ] 21 | }, 22 | { 23 | "cell_type": "code", 24 | "execution_count": 1, 25 | "metadata": { 26 | "collapsed": true 27 | }, 28 | "outputs": [], 29 | "source": [ 30 | "# Создаем список\n", 31 | "lst = [1,2,3,4,5]" 32 | ] 33 | }, 34 | { 35 | "cell_type": "markdown", 36 | "metadata": {}, 37 | "source": [ 38 | "К счастью, в iPython и Jupyter Notebook Вы можете быстро увидеть все возможные методы, используя клавишу tab. Методы для списка:\n", 39 | "\n", 40 | "* append\n", 41 | "* count\n", 42 | "* extend\n", 43 | "* insert\n", 44 | "* pop\n", 45 | "* remove\n", 46 | "* reverse\n", 47 | "* sort\n", 48 | "\n", 49 | "Попробуем выполнить некоторые из них:" 50 | ] 51 | }, 52 | { 53 | "cell_type": "markdown", 54 | "metadata": {}, 55 | "source": [ 56 | "append() добавляет элементы в конец списка:" 57 | ] 58 | }, 59 | { 60 | "cell_type": "code", 61 | "execution_count": 2, 62 | "metadata": { 63 | "collapsed": true 64 | }, 65 | "outputs": [], 66 | "source": [ 67 | "lst.append(6)" 68 | ] 69 | }, 70 | { 71 | "cell_type": "code", 72 | "execution_count": 3, 73 | "metadata": {}, 74 | "outputs": [ 75 | { 76 | "data": { 77 | "text/plain": [ 78 | "[1, 2, 3, 4, 5, 6]" 79 | ] 80 | }, 81 | "execution_count": 3, 82 | "metadata": {}, 83 | "output_type": "execute_result" 84 | } 85 | ], 86 | "source": [ 87 | "lst" 88 | ] 89 | }, 90 | { 91 | "cell_type": "markdown", 92 | "metadata": {}, 93 | "source": [ 94 | "Отлично! Как насчёт()? Метод count() подсчитывает, сколько раз элемент встречается в списке." 95 | ] 96 | }, 97 | { 98 | "cell_type": "code", 99 | "execution_count": 4, 100 | "metadata": {}, 101 | "outputs": [ 102 | { 103 | "data": { 104 | "text/plain": [ 105 | "1" 106 | ] 107 | }, 108 | "execution_count": 4, 109 | "metadata": {}, 110 | "output_type": "execute_result" 111 | } 112 | ], 113 | "source": [ 114 | "# Показать, сколько раз в списке встречается элемент 2\n", 115 | "lst.count(2)" 116 | ] 117 | }, 118 | { 119 | "cell_type": "markdown", 120 | "metadata": {}, 121 | "source": [ 122 | "В Jupyter Notebook можно использовать Shift+Tab, чтобы получить описание метода. В обычном Python можно использовать функцию help(): " 123 | ] 124 | }, 125 | { 126 | "cell_type": "code", 127 | "execution_count": 5, 128 | "metadata": {}, 129 | "outputs": [ 130 | { 131 | "name": "stdout", 132 | "output_type": "stream", 133 | "text": [ 134 | "Help on built-in function count:\n", 135 | "\n", 136 | "count(...) method of builtins.list instance\n", 137 | " L.count(value) -> integer -- return number of occurrences of value\n", 138 | "\n" 139 | ] 140 | } 141 | ], 142 | "source": [ 143 | "help(lst.count)" 144 | ] 145 | }, 146 | { 147 | "cell_type": "markdown", 148 | "metadata": {}, 149 | "source": [ 150 | "Поиграйте с остальными методами для списка. Позднее в этом разделе будут проверочные вопросы, в которых могут понадобиться функция help() и поиск в Google, чтобы найти нужные методы для различных типов объектов!" 151 | ] 152 | }, 153 | { 154 | "cell_type": "markdown", 155 | "metadata": {}, 156 | "source": [ 157 | "Отлично! После этой лекции Вы можете запускать методы объектов в Python!" 158 | ] 159 | } 160 | ], 161 | "metadata": { 162 | "kernelspec": { 163 | "display_name": "Python 3", 164 | "language": "python", 165 | "name": "python3" 166 | }, 167 | "language_info": { 168 | "codemirror_mode": { 169 | "name": "ipython", 170 | "version": 3 171 | }, 172 | "file_extension": ".py", 173 | "mimetype": "text/x-python", 174 | "name": "python", 175 | "nbconvert_exporter": "python", 176 | "pygments_lexer": "ipython3", 177 | "version": "3.6.1" 178 | } 179 | }, 180 | "nbformat": 4, 181 | "nbformat_minor": 1 182 | } 183 | -------------------------------------------------------------------------------- /05-Объектно-Ориентированное Программирование (Object Oriented Programming)/05-OOP Challenge - Solution.ipynb: -------------------------------------------------------------------------------- 1 | { 2 | "cells": [ 3 | { 4 | "cell_type": "markdown", 5 | "metadata": {}, 6 | "source": [ 7 | "# Объектно-ориентированное программирование - Задание - РЕШЕНИЕ\n", 8 | "\n", 9 | "В этом задании создайте класс банковского счёта, который имеет два атрибута:\n", 10 | "\n", 11 | "* owner - владелец\n", 12 | "* balance - баланс\n", 13 | "\n", 14 | "и два метода:\n", 15 | "\n", 16 | "* deposit - внести средства\n", 17 | "* withdraw - снять средства\n", 18 | "\n", 19 | "Дополнительное условие - сумма снятия не должна превышать доступный баланс.\n", 20 | "\n", 21 | "Создайте экземляр класса, сделайте несколько внесений и снятий средств, а также проверьте, что баланс счёта не может уходить в минус при снятии средств." 22 | ] 23 | }, 24 | { 25 | "cell_type": "code", 26 | "execution_count": 15, 27 | "metadata": { 28 | "collapsed": true 29 | }, 30 | "outputs": [], 31 | "source": [ 32 | "class Account:\n", 33 | " def __init__(self,owner,balance=0):\n", 34 | " self.owner = owner\n", 35 | " self.balance = balance\n", 36 | " \n", 37 | " def __str__(self):\n", 38 | " return f'Владелец счёта: {self.owner}\\nБаланс счёта: ${self.balance}'\n", 39 | " \n", 40 | " def deposit(self,dep_amt):\n", 41 | " self.balance += dep_amt\n", 42 | " print('Внесение выполнено')\n", 43 | " \n", 44 | " def withdraw(self,wd_amt):\n", 45 | " if self.balance >= wd_amt:\n", 46 | " self.balance -= wd_amt\n", 47 | " print('Снятие выполнено')\n", 48 | " else:\n", 49 | " print('Недостаточно средств!')" 50 | ] 51 | }, 52 | { 53 | "cell_type": "code", 54 | "execution_count": 16, 55 | "metadata": { 56 | "collapsed": true 57 | }, 58 | "outputs": [], 59 | "source": [ 60 | "# 1. Создаём экземпляр класса\n", 61 | "acct1 = Account('Влад',100)" 62 | ] 63 | }, 64 | { 65 | "cell_type": "code", 66 | "execution_count": 17, 67 | "metadata": {}, 68 | "outputs": [ 69 | { 70 | "name": "stdout", 71 | "output_type": "stream", 72 | "text": [ 73 | "Владелец счёта: Влад\n", 74 | "Баланс счёта: $100\n" 75 | ] 76 | } 77 | ], 78 | "source": [ 79 | "# 2. Выводим информацию об объекте\n", 80 | "print(acct1)" 81 | ] 82 | }, 83 | { 84 | "cell_type": "code", 85 | "execution_count": 4, 86 | "metadata": {}, 87 | "outputs": [ 88 | { 89 | "data": { 90 | "text/plain": [ 91 | "'Влад'" 92 | ] 93 | }, 94 | "execution_count": 4, 95 | "metadata": {}, 96 | "output_type": "execute_result" 97 | } 98 | ], 99 | "source": [ 100 | "# 3. Отображаем атрибут владелец счёта\n", 101 | "acct1.owner" 102 | ] 103 | }, 104 | { 105 | "cell_type": "code", 106 | "execution_count": 5, 107 | "metadata": {}, 108 | "outputs": [ 109 | { 110 | "data": { 111 | "text/plain": [ 112 | "100" 113 | ] 114 | }, 115 | "execution_count": 5, 116 | "metadata": {}, 117 | "output_type": "execute_result" 118 | } 119 | ], 120 | "source": [ 121 | "# 4. Отображаем атрибут баланс счёта\n", 122 | "acct1.balance" 123 | ] 124 | }, 125 | { 126 | "cell_type": "code", 127 | "execution_count": 6, 128 | "metadata": {}, 129 | "outputs": [ 130 | { 131 | "name": "stdout", 132 | "output_type": "stream", 133 | "text": [ 134 | "Внесение выполнено\n" 135 | ] 136 | } 137 | ], 138 | "source": [ 139 | "# 5. Выполняем несколько внесений и снятий средств\n", 140 | "acct1.deposit(50)" 141 | ] 142 | }, 143 | { 144 | "cell_type": "code", 145 | "execution_count": 7, 146 | "metadata": {}, 147 | "outputs": [ 148 | { 149 | "name": "stdout", 150 | "output_type": "stream", 151 | "text": [ 152 | "Снятие выполнено\n" 153 | ] 154 | } 155 | ], 156 | "source": [ 157 | "acct1.withdraw(75)" 158 | ] 159 | }, 160 | { 161 | "cell_type": "code", 162 | "execution_count": 8, 163 | "metadata": {}, 164 | "outputs": [ 165 | { 166 | "name": "stdout", 167 | "output_type": "stream", 168 | "text": [ 169 | "Недостаточно средств!\n" 170 | ] 171 | } 172 | ], 173 | "source": [ 174 | "# 6. Пытаемся выполнить снятие, которое превышает текущий доступный баланс\n", 175 | "acct1.withdraw(500)" 176 | ] 177 | }, 178 | { 179 | "cell_type": "markdown", 180 | "metadata": {}, 181 | "source": [ 182 | "## Отличная работа!" 183 | ] 184 | } 185 | ], 186 | "metadata": { 187 | "kernelspec": { 188 | "display_name": "Python 3", 189 | "language": "python", 190 | "name": "python3" 191 | }, 192 | "language_info": { 193 | "codemirror_mode": { 194 | "name": "ipython", 195 | "version": 3 196 | }, 197 | "file_extension": ".py", 198 | "mimetype": "text/x-python", 199 | "name": "python", 200 | "nbconvert_exporter": "python", 201 | "pygments_lexer": "ipython3", 202 | "version": "3.6.1" 203 | } 204 | }, 205 | "nbformat": 4, 206 | "nbformat_minor": 2 207 | } 208 | -------------------------------------------------------------------------------- /03-Методы и Функции (Methods and Functions)/.ipynb_checkpoints/01-Methods-checkpoint.ipynb: -------------------------------------------------------------------------------- 1 | { 2 | "cells": [ 3 | { 4 | "cell_type": "markdown", 5 | "metadata": {}, 6 | "source": [ 7 | "# Методы\n", 8 | "\n", 9 | "Мы уже видели некоторые методы, когда изучали объекты и структуры данных в Python. Методы - это по сути функции, встроенные в объекты. Позже в этом курсе мы узнаем, как создавать свои собственные объекты и методы, используя Объектно-Ориентированное Программирование (ООП) и классы.\n", 10 | "\n", 11 | "Методы выполняют определённые действия для объекта, и они могут принимать на вход параметры, так же, как и функции. В этой лекции мы ознакомимся с основами методов и обсудим основные подходы в проектированию методов. Позже мы вернёмся к ним, когда перейдем к Объектно-Ориентированному Программированию.\n", 12 | "\n", 13 | "Методы пишутся так:\n", 14 | "\n", 15 | " object.method(arg1,arg2,etc...)\n", 16 | " \n", 17 | "Позже мы увидим, что можно предоставить себе что методы содержат параметр 'self', который ссылается на сам объект. Этот параметр нельзя увидеть, но мы будем использовать его позднее в лекциях про Объектно-Ориентированное Программирование.\n", 18 | "\n", 19 | "В качестве примера давайте посмотрим на различные методы, которые имеет список:" 20 | ] 21 | }, 22 | { 23 | "cell_type": "code", 24 | "execution_count": 1, 25 | "metadata": { 26 | "collapsed": true 27 | }, 28 | "outputs": [], 29 | "source": [ 30 | "# Создаем список\n", 31 | "lst = [1,2,3,4,5]" 32 | ] 33 | }, 34 | { 35 | "cell_type": "markdown", 36 | "metadata": {}, 37 | "source": [ 38 | "К счастью, в iPython и Jupyter Notebook Вы можете быстро увидеть все возможные методы, используя клавишу tab. Методы для списка:\n", 39 | "\n", 40 | "* append\n", 41 | "* count\n", 42 | "* extend\n", 43 | "* insert\n", 44 | "* pop\n", 45 | "* remove\n", 46 | "* reverse\n", 47 | "* sort\n", 48 | "\n", 49 | "Попробуем выполнить некоторые из них:" 50 | ] 51 | }, 52 | { 53 | "cell_type": "markdown", 54 | "metadata": {}, 55 | "source": [ 56 | "append() добавляет элементы в конец списка:" 57 | ] 58 | }, 59 | { 60 | "cell_type": "code", 61 | "execution_count": 2, 62 | "metadata": { 63 | "collapsed": true 64 | }, 65 | "outputs": [], 66 | "source": [ 67 | "lst.append(6)" 68 | ] 69 | }, 70 | { 71 | "cell_type": "code", 72 | "execution_count": 3, 73 | "metadata": {}, 74 | "outputs": [ 75 | { 76 | "data": { 77 | "text/plain": [ 78 | "[1, 2, 3, 4, 5, 6]" 79 | ] 80 | }, 81 | "execution_count": 3, 82 | "metadata": {}, 83 | "output_type": "execute_result" 84 | } 85 | ], 86 | "source": [ 87 | "lst" 88 | ] 89 | }, 90 | { 91 | "cell_type": "markdown", 92 | "metadata": {}, 93 | "source": [ 94 | "Отлично! Как насчёт()? Метод count() подсчитывает, сколько раз элемент встречается в списке." 95 | ] 96 | }, 97 | { 98 | "cell_type": "code", 99 | "execution_count": 4, 100 | "metadata": {}, 101 | "outputs": [ 102 | { 103 | "data": { 104 | "text/plain": [ 105 | "1" 106 | ] 107 | }, 108 | "execution_count": 4, 109 | "metadata": {}, 110 | "output_type": "execute_result" 111 | } 112 | ], 113 | "source": [ 114 | "# Показать, сколько раз в списке встречается элемент 2\n", 115 | "lst.count(2)" 116 | ] 117 | }, 118 | { 119 | "cell_type": "markdown", 120 | "metadata": {}, 121 | "source": [ 122 | "В Jupyter Notebook можно использовать Shift+Tab, чтобы получить описание метода. В обычном Python можно использовать функцию help(): " 123 | ] 124 | }, 125 | { 126 | "cell_type": "code", 127 | "execution_count": 5, 128 | "metadata": {}, 129 | "outputs": [ 130 | { 131 | "name": "stdout", 132 | "output_type": "stream", 133 | "text": [ 134 | "Help on built-in function count:\n", 135 | "\n", 136 | "count(...) method of builtins.list instance\n", 137 | " L.count(value) -> integer -- return number of occurrences of value\n", 138 | "\n" 139 | ] 140 | } 141 | ], 142 | "source": [ 143 | "help(lst.count)" 144 | ] 145 | }, 146 | { 147 | "cell_type": "markdown", 148 | "metadata": {}, 149 | "source": [ 150 | "Поиграйте с остальными методами для списка. Позднее в этом разделе будут проверочные вопросы, в которых могут понадобиться функция help() и поиск в Google, чтобы найти нужные методы для различных типов объектов!" 151 | ] 152 | }, 153 | { 154 | "cell_type": "markdown", 155 | "metadata": {}, 156 | "source": [ 157 | "Отлично! После этой лекции Вы можете запускать методы объектов в Python!" 158 | ] 159 | } 160 | ], 161 | "metadata": { 162 | "kernelspec": { 163 | "display_name": "Python 3", 164 | "language": "python", 165 | "name": "python3" 166 | }, 167 | "language_info": { 168 | "codemirror_mode": { 169 | "name": "ipython", 170 | "version": 3 171 | }, 172 | "file_extension": ".py", 173 | "mimetype": "text/x-python", 174 | "name": "python", 175 | "nbconvert_exporter": "python", 176 | "pygments_lexer": "ipython3", 177 | "version": "3.6.1" 178 | } 179 | }, 180 | "nbformat": 4, 181 | "nbformat_minor": 1 182 | } 183 | -------------------------------------------------------------------------------- /05-Объектно-Ориентированное Программирование (Object Oriented Programming)/.ipynb_checkpoints/05-OOP Challenge - Solution-checkpoint.ipynb: -------------------------------------------------------------------------------- 1 | { 2 | "cells": [ 3 | { 4 | "cell_type": "markdown", 5 | "metadata": {}, 6 | "source": [ 7 | "# Объектно-ориентированное программирование - Задание - РЕШЕНИЕ\n", 8 | "\n", 9 | "В этом задании создайте класс банковского счёта, который имеет два атрибута:\n", 10 | "\n", 11 | "* owner - владелец\n", 12 | "* balance - баланс\n", 13 | "\n", 14 | "и два метода:\n", 15 | "\n", 16 | "* deposit - внести средства\n", 17 | "* withdraw - снять средства\n", 18 | "\n", 19 | "Дополнительное условие - сумма снятия не должна превышать доступный баланс.\n", 20 | "\n", 21 | "Создайте экземляр класса, сделайте несколько внесений и снятий средств, а также проверьте, что баланс счёта не может уходить в минус при снятии средств." 22 | ] 23 | }, 24 | { 25 | "cell_type": "code", 26 | "execution_count": 15, 27 | "metadata": { 28 | "collapsed": true 29 | }, 30 | "outputs": [], 31 | "source": [ 32 | "class Account:\n", 33 | " def __init__(self,owner,balance=0):\n", 34 | " self.owner = owner\n", 35 | " self.balance = balance\n", 36 | " \n", 37 | " def __str__(self):\n", 38 | " return f'Владелец счёта: {self.owner}\\nБаланс счёта: ${self.balance}'\n", 39 | " \n", 40 | " def deposit(self,dep_amt):\n", 41 | " self.balance += dep_amt\n", 42 | " print('Внесение выполнено')\n", 43 | " \n", 44 | " def withdraw(self,wd_amt):\n", 45 | " if self.balance >= wd_amt:\n", 46 | " self.balance -= wd_amt\n", 47 | " print('Снятие выполнено')\n", 48 | " else:\n", 49 | " print('Недостаточно средств!')" 50 | ] 51 | }, 52 | { 53 | "cell_type": "code", 54 | "execution_count": 16, 55 | "metadata": { 56 | "collapsed": true 57 | }, 58 | "outputs": [], 59 | "source": [ 60 | "# 1. Создаём экземпляр класса\n", 61 | "acct1 = Account('Влад',100)" 62 | ] 63 | }, 64 | { 65 | "cell_type": "code", 66 | "execution_count": 17, 67 | "metadata": {}, 68 | "outputs": [ 69 | { 70 | "name": "stdout", 71 | "output_type": "stream", 72 | "text": [ 73 | "Владелец счёта: Влад\n", 74 | "Баланс счёта: $100\n" 75 | ] 76 | } 77 | ], 78 | "source": [ 79 | "# 2. Выводим информацию об объекте\n", 80 | "print(acct1)" 81 | ] 82 | }, 83 | { 84 | "cell_type": "code", 85 | "execution_count": 4, 86 | "metadata": {}, 87 | "outputs": [ 88 | { 89 | "data": { 90 | "text/plain": [ 91 | "'Влад'" 92 | ] 93 | }, 94 | "execution_count": 4, 95 | "metadata": {}, 96 | "output_type": "execute_result" 97 | } 98 | ], 99 | "source": [ 100 | "# 3. Отображаем атрибут владелец счёта\n", 101 | "acct1.owner" 102 | ] 103 | }, 104 | { 105 | "cell_type": "code", 106 | "execution_count": 5, 107 | "metadata": {}, 108 | "outputs": [ 109 | { 110 | "data": { 111 | "text/plain": [ 112 | "100" 113 | ] 114 | }, 115 | "execution_count": 5, 116 | "metadata": {}, 117 | "output_type": "execute_result" 118 | } 119 | ], 120 | "source": [ 121 | "# 4. Отображаем атрибут баланс счёта\n", 122 | "acct1.balance" 123 | ] 124 | }, 125 | { 126 | "cell_type": "code", 127 | "execution_count": 6, 128 | "metadata": {}, 129 | "outputs": [ 130 | { 131 | "name": "stdout", 132 | "output_type": "stream", 133 | "text": [ 134 | "Внесение выполнено\n" 135 | ] 136 | } 137 | ], 138 | "source": [ 139 | "# 5. Выполняем несколько внесений и снятий средств\n", 140 | "acct1.deposit(50)" 141 | ] 142 | }, 143 | { 144 | "cell_type": "code", 145 | "execution_count": 7, 146 | "metadata": {}, 147 | "outputs": [ 148 | { 149 | "name": "stdout", 150 | "output_type": "stream", 151 | "text": [ 152 | "Снятие выполнено\n" 153 | ] 154 | } 155 | ], 156 | "source": [ 157 | "acct1.withdraw(75)" 158 | ] 159 | }, 160 | { 161 | "cell_type": "code", 162 | "execution_count": 8, 163 | "metadata": {}, 164 | "outputs": [ 165 | { 166 | "name": "stdout", 167 | "output_type": "stream", 168 | "text": [ 169 | "Недостаточно средств!\n" 170 | ] 171 | } 172 | ], 173 | "source": [ 174 | "# 6. Пытаемся выполнить снятие, которое превышает текущий доступный баланс\n", 175 | "acct1.withdraw(500)" 176 | ] 177 | }, 178 | { 179 | "cell_type": "markdown", 180 | "metadata": {}, 181 | "source": [ 182 | "## Отличная работа!" 183 | ] 184 | } 185 | ], 186 | "metadata": { 187 | "kernelspec": { 188 | "display_name": "Python 3", 189 | "language": "python", 190 | "name": "python3" 191 | }, 192 | "language_info": { 193 | "codemirror_mode": { 194 | "name": "ipython", 195 | "version": 3 196 | }, 197 | "file_extension": ".py", 198 | "mimetype": "text/x-python", 199 | "name": "python", 200 | "nbconvert_exporter": "python", 201 | "pygments_lexer": "ipython3", 202 | "version": "3.6.1" 203 | } 204 | }, 205 | "nbformat": 4, 206 | "nbformat_minor": 2 207 | } 208 | -------------------------------------------------------------------------------- /02-Операторы Python (Python Statements)/09-Guessing Game Challenge.ipynb: -------------------------------------------------------------------------------- 1 | { 2 | "cells": [ 3 | { 4 | "cell_type": "markdown", 5 | "metadata": {}, 6 | "source": [ 7 | "# Задание - Игра на угадывание чисел\n", 8 | "\n", 9 | "Давайте используем циклы `while` для создания игры на угадывание чисел.\n", 10 | "\n", 11 | "Задание такое:\n", 12 | "\n", 13 | "Напишите программу, которая загадывает случайное число от 1 до 100, и предлагает игрокам отгадать число. Правила такие:\n", 14 | "\n", 15 | "1. Если отгадка игрока меньше 1 или больше 100, то сказать \"ВНЕ ДИАПАЗОНА\"\n", 16 | "2. На первом шаге игрока, если его отгадка\n", 17 | " * отстоит не дальше чем на 10 от загаданного числа, то сказать \"ТЕПЛО!\"\n", 18 | " * если дальше чем на 10 от загаданного числа, то сказать \"ХОЛОДНО!\"\n", 19 | "3. На всех последующих шагах, если отгадка: \n", 20 | " * ближе к загаданному числу, чем предыдущая отгадка, то сказать \"ТЕПЛЕЕ!\"\n", 21 | " * если дальше от загаданного числа, чем предыдущая отгадка, то сказать \"ХОЛОДНЕЕ!\"\n", 22 | "4. Когда отгадка игрока равна загаданному числу, то сказать ему что отгадка правильна, *и* сказать сколько попыток это заняло!\n", 23 | "\n", 24 | "Вы можете написать программу с нуля, или использовать предложенные ниже шаги. В отдельном блокноте приведено решение. Желаю удачи!\n" 25 | ] 26 | }, 27 | { 28 | "cell_type": "markdown", 29 | "metadata": {}, 30 | "source": [ 31 | "#### Сначала, возьмите случайное число от 1 до 100, используя библиотеку random, и сохраните это число в переменной\n", 32 | "\n", 33 | "Замечание: `random.randint(a,b)` возвращает случайное число в диапазоне `[a, b]`, включая обе границы диапазона." 34 | ] 35 | }, 36 | { 37 | "cell_type": "code", 38 | "execution_count": null, 39 | "metadata": { 40 | "collapsed": true 41 | }, 42 | "outputs": [], 43 | "source": [] 44 | }, 45 | { 46 | "cell_type": "markdown", 47 | "metadata": {}, 48 | "source": [ 49 | "#### Далее, напечатайте введение в игру и описание правил" 50 | ] 51 | }, 52 | { 53 | "cell_type": "code", 54 | "execution_count": null, 55 | "metadata": { 56 | "collapsed": true 57 | }, 58 | "outputs": [], 59 | "source": [] 60 | }, 61 | { 62 | "cell_type": "markdown", 63 | "metadata": {}, 64 | "source": [ 65 | "#### Создайте список для хранения отгадок\n", 66 | "\n", 67 | "Подсказка: в качестве начального значения можно использовать 0. Это полезно т.к. это значение можно использовать как \"False\"" 68 | ] 69 | }, 70 | { 71 | "cell_type": "code", 72 | "execution_count": null, 73 | "metadata": { 74 | "collapsed": true 75 | }, 76 | "outputs": [], 77 | "source": [] 78 | }, 79 | { 80 | "cell_type": "markdown", 81 | "metadata": {}, 82 | "source": [ 83 | "#### Напишите цикл `while`, в котором спрашиваете отгадку с проверкой её попадания в диапазон от 1 до 100. Проверьте несколько раз, чтобы убедиться, что это работает." 84 | ] 85 | }, 86 | { 87 | "cell_type": "code", 88 | "execution_count": null, 89 | "metadata": { 90 | "collapsed": true 91 | }, 92 | "outputs": [], 93 | "source": [ 94 | "while True:\n", 95 | " \n", 96 | " pass" 97 | ] 98 | }, 99 | { 100 | "cell_type": "markdown", 101 | "metadata": {}, 102 | "source": [ 103 | "#### Напишите цикл `while`, который сравнивает отгадку игрока и загаданным числом. Если отгадка правильна, то выйдите из цикла (break). Иначе, скажите игроку, теплее или холоднее, и продолжайте спрашивать отгадки.\n", 104 | "\n", 105 | "Подсказки:\n", 106 | "* может быть полезно сначала написать основные варианты работы программы на бумаге!\n", 107 | "* Вы можете использовать функцию `abs()`, чтобы найти расстояние между двумя числами\n", 108 | "* Если Вы добавляете в список все новые отгадки, то предыдущую отгадку можно получить с помощью `guesses[-2]`" 109 | ] 110 | }, 111 | { 112 | "cell_type": "code", 113 | "execution_count": null, 114 | "metadata": { 115 | "collapsed": true 116 | }, 117 | "outputs": [], 118 | "source": [ 119 | "while True:\n", 120 | "\n", 121 | " # Копируем текст из предыдущей ячейки для ввода чисел\n", 122 | "\n", 123 | " pass" 124 | ] 125 | }, 126 | { 127 | "cell_type": "markdown", 128 | "metadata": {}, 129 | "source": [ 130 | "Вот и всё! Вы только что запрограммировали Вашу первую игру на Python!\n", 131 | "\n", 132 | "В следующем разделе мы узнаем, как перевести некоторые из этих повторяющихся действий в *функции*, которые можно вызывать по мере необходимости." 133 | ] 134 | }, 135 | { 136 | "cell_type": "markdown", 137 | "metadata": {}, 138 | "source": [ 139 | "### Отличная работа!" 140 | ] 141 | } 142 | ], 143 | "metadata": { 144 | "kernelspec": { 145 | "display_name": "Python 3", 146 | "language": "python", 147 | "name": "python3" 148 | }, 149 | "language_info": { 150 | "codemirror_mode": { 151 | "name": "ipython", 152 | "version": 3 153 | }, 154 | "file_extension": ".py", 155 | "mimetype": "text/x-python", 156 | "name": "python", 157 | "nbconvert_exporter": "python", 158 | "pygments_lexer": "ipython3", 159 | "version": "3.6.1" 160 | } 161 | }, 162 | "nbformat": 4, 163 | "nbformat_minor": 2 164 | } 165 | -------------------------------------------------------------------------------- /02-Операторы Python (Python Statements)/.ipynb_checkpoints/09-Guessing Game Challenge-checkpoint.ipynb: -------------------------------------------------------------------------------- 1 | { 2 | "cells": [ 3 | { 4 | "cell_type": "markdown", 5 | "metadata": {}, 6 | "source": [ 7 | "# Задание - Игра на угадывание чисел\n", 8 | "\n", 9 | "Давайте используем циклы `while` для создания игры на угадывание чисел.\n", 10 | "\n", 11 | "Задание такое:\n", 12 | "\n", 13 | "Напишите программу, которая загадывает случайное число от 1 до 100, и предлагает игрокам отгадать число. Правила такие:\n", 14 | "\n", 15 | "1. Если отгадка игрока меньше 1 или больше 100, то сказать \"ВНЕ ДИАПАЗОНА\"\n", 16 | "2. На первом шаге игрока, если его отгадка\n", 17 | " * отстоит не дальше чем на 10 от загаданного числа, то сказать \"ТЕПЛО!\"\n", 18 | " * если дальше чем на 10 от загаданного числа, то сказать \"ХОЛОДНО!\"\n", 19 | "3. На всех последующих шагах, если отгадка: \n", 20 | " * ближе к загаданному числу, чем предыдущая отгадка, то сказать \"ТЕПЛЕЕ!\"\n", 21 | " * если дальше от загаданного числа, чем предыдущая отгадка, то сказать \"ХОЛОДНЕЕ!\"\n", 22 | "4. Когда отгадка игрока равна загаданному числу, то сказать ему что отгадка правильна, *и* сказать сколько попыток это заняло!\n", 23 | "\n", 24 | "Вы можете написать программу с нуля, или использовать предложенные ниже шаги. В отдельном блокноте приведено решение. Желаю удачи!\n" 25 | ] 26 | }, 27 | { 28 | "cell_type": "markdown", 29 | "metadata": {}, 30 | "source": [ 31 | "#### Сначала, возьмите случайное число от 1 до 100, используя библиотеку random, и сохраните это число в переменной\n", 32 | "\n", 33 | "Замечание: `random.randint(a,b)` возвращает случайное число в диапазоне `[a, b]`, включая обе границы диапазона." 34 | ] 35 | }, 36 | { 37 | "cell_type": "code", 38 | "execution_count": null, 39 | "metadata": { 40 | "collapsed": true 41 | }, 42 | "outputs": [], 43 | "source": [] 44 | }, 45 | { 46 | "cell_type": "markdown", 47 | "metadata": {}, 48 | "source": [ 49 | "#### Далее, напечатайте введение в игру и описание правил" 50 | ] 51 | }, 52 | { 53 | "cell_type": "code", 54 | "execution_count": null, 55 | "metadata": { 56 | "collapsed": true 57 | }, 58 | "outputs": [], 59 | "source": [] 60 | }, 61 | { 62 | "cell_type": "markdown", 63 | "metadata": {}, 64 | "source": [ 65 | "#### Создайте список для хранения отгадок\n", 66 | "\n", 67 | "Подсказка: в качестве начального значения можно использовать 0. Это полезно т.к. это значение можно использовать как \"False\"" 68 | ] 69 | }, 70 | { 71 | "cell_type": "code", 72 | "execution_count": null, 73 | "metadata": { 74 | "collapsed": true 75 | }, 76 | "outputs": [], 77 | "source": [] 78 | }, 79 | { 80 | "cell_type": "markdown", 81 | "metadata": {}, 82 | "source": [ 83 | "#### Напишите цикл `while`, в котором спрашиваете отгадку с проверкой её попадания в диапазон от 1 до 100. Проверьте несколько раз, чтобы убедиться, что это работает." 84 | ] 85 | }, 86 | { 87 | "cell_type": "code", 88 | "execution_count": null, 89 | "metadata": { 90 | "collapsed": true 91 | }, 92 | "outputs": [], 93 | "source": [ 94 | "while True:\n", 95 | " \n", 96 | " pass" 97 | ] 98 | }, 99 | { 100 | "cell_type": "markdown", 101 | "metadata": {}, 102 | "source": [ 103 | "#### Напишите цикл `while`, который сравнивает отгадку игрока и загаданным числом. Если отгадка правильна, то выйдите из цикла (break). Иначе, скажите игроку, теплее или холоднее, и продолжайте спрашивать отгадки.\n", 104 | "\n", 105 | "Подсказки:\n", 106 | "* может быть полезно сначала написать основные варианты работы программы на бумаге!\n", 107 | "* Вы можете использовать функцию `abs()`, чтобы найти расстояние между двумя числами\n", 108 | "* Если Вы добавляете в список все новые отгадки, то предыдущую отгадку можно получить с помощью `guesses[-2]`" 109 | ] 110 | }, 111 | { 112 | "cell_type": "code", 113 | "execution_count": null, 114 | "metadata": { 115 | "collapsed": true 116 | }, 117 | "outputs": [], 118 | "source": [ 119 | "while True:\n", 120 | "\n", 121 | " # Копируем текст из предыдущей ячейки для ввода чисел\n", 122 | "\n", 123 | " pass" 124 | ] 125 | }, 126 | { 127 | "cell_type": "markdown", 128 | "metadata": {}, 129 | "source": [ 130 | "Вот и всё! Вы только что запрограммировали Вашу первую игру на Python!\n", 131 | "\n", 132 | "В следующем разделе мы узнаем, как перевести некоторые из этих повторяющихся действий в *функции*, которые можно вызывать по мере необходимости." 133 | ] 134 | }, 135 | { 136 | "cell_type": "markdown", 137 | "metadata": {}, 138 | "source": [ 139 | "### Отличная работа!" 140 | ] 141 | } 142 | ], 143 | "metadata": { 144 | "kernelspec": { 145 | "display_name": "Python 3", 146 | "language": "python", 147 | "name": "python3" 148 | }, 149 | "language_info": { 150 | "codemirror_mode": { 151 | "name": "ipython", 152 | "version": 3 153 | }, 154 | "file_extension": ".py", 155 | "mimetype": "text/x-python", 156 | "name": "python", 157 | "nbconvert_exporter": "python", 158 | "pygments_lexer": "ipython3", 159 | "version": "3.6.1" 160 | } 161 | }, 162 | "nbformat": 4, 163 | "nbformat_minor": 2 164 | } 165 | -------------------------------------------------------------------------------- /11-Генераторы Python (Python Generators)/02-Iterators and Generators Homework.ipynb: -------------------------------------------------------------------------------- 1 | { 2 | "cells": [ 3 | { 4 | "cell_type": "markdown", 5 | "metadata": {}, 6 | "source": [ 7 | "# Итераторы и Генераторы - домашнее задание \n", 8 | "\n", 9 | "### Задача 1\n", 10 | "\n", 11 | "Создайте генератор, который создает квадраты чисел, вплоть до некоторого числа N." 12 | ] 13 | }, 14 | { 15 | "cell_type": "code", 16 | "execution_count": 1, 17 | "metadata": { 18 | "collapsed": true 19 | }, 20 | "outputs": [], 21 | "source": [ 22 | "def gensquares(N):\n", 23 | "\n", 24 | " pass" 25 | ] 26 | }, 27 | { 28 | "cell_type": "code", 29 | "execution_count": 2, 30 | "metadata": {}, 31 | "outputs": [ 32 | { 33 | "name": "stdout", 34 | "output_type": "stream", 35 | "text": [ 36 | "0\n", 37 | "1\n", 38 | "4\n", 39 | "9\n", 40 | "16\n", 41 | "25\n", 42 | "36\n", 43 | "49\n", 44 | "64\n", 45 | "81\n" 46 | ] 47 | } 48 | ], 49 | "source": [ 50 | "for x in gensquares(10):\n", 51 | " print(x)" 52 | ] 53 | }, 54 | { 55 | "cell_type": "markdown", 56 | "metadata": {}, 57 | "source": [ 58 | "### Задача 2\n", 59 | "\n", 60 | "Создайте генератор, который возвращает \"n\" случайных чисел между нижней и верхней границами (границы являются параметрами функции).
Замечание: используйте библиотеку random. Например:" 61 | ] 62 | }, 63 | { 64 | "cell_type": "code", 65 | "execution_count": 3, 66 | "metadata": {}, 67 | "outputs": [ 68 | { 69 | "data": { 70 | "text/plain": [ 71 | "9" 72 | ] 73 | }, 74 | "execution_count": 3, 75 | "metadata": {}, 76 | "output_type": "execute_result" 77 | } 78 | ], 79 | "source": [ 80 | "import random\n", 81 | "\n", 82 | "random.randint(1,10)" 83 | ] 84 | }, 85 | { 86 | "cell_type": "code", 87 | "execution_count": 4, 88 | "metadata": { 89 | "collapsed": true 90 | }, 91 | "outputs": [], 92 | "source": [ 93 | "def rand_num(low,high,n):\n", 94 | "\n", 95 | " pass" 96 | ] 97 | }, 98 | { 99 | "cell_type": "code", 100 | "execution_count": 5, 101 | "metadata": {}, 102 | "outputs": [ 103 | { 104 | "name": "stdout", 105 | "output_type": "stream", 106 | "text": [ 107 | "6\n", 108 | "1\n", 109 | "10\n", 110 | "5\n", 111 | "8\n", 112 | "2\n", 113 | "8\n", 114 | "5\n", 115 | "4\n", 116 | "5\n", 117 | "1\n", 118 | "4\n" 119 | ] 120 | } 121 | ], 122 | "source": [ 123 | "for num in rand_num(1,10,12):\n", 124 | " print(num)" 125 | ] 126 | }, 127 | { 128 | "cell_type": "markdown", 129 | "metadata": {}, 130 | "source": [ 131 | "### Задача 3\n", 132 | "\n", 133 | "Используйте функцию iter(), чтобы превратить строку ниже в итератор:\n" 134 | ] 135 | }, 136 | { 137 | "cell_type": "code", 138 | "execution_count": null, 139 | "metadata": { 140 | "collapsed": true 141 | }, 142 | "outputs": [], 143 | "source": [ 144 | "s = 'hello'\n", 145 | "\n", 146 | "# напишите здесь код" 147 | ] 148 | }, 149 | { 150 | "cell_type": "markdown", 151 | "metadata": {}, 152 | "source": [ 153 | "### Задача 4\n", 154 | "Опишите пример использования генератора с командой yield, такой пример, в котором Вы не хотели бы использовать обычную функцию с командой return.





\n", 155 | "\n" 156 | ] 157 | }, 158 | { 159 | "cell_type": "markdown", 160 | "metadata": {}, 161 | "source": [ 162 | "### Дополнительное задание!\n", 163 | "Можете ли Вы объяснить, что такое *gencomp* в коде ниже? (Замечание: Мы не рассматривали это на лекциях. Вам может понадобится поиск в Google или Stack Overflow, чтобы найти ответ!)" 164 | ] 165 | }, 166 | { 167 | "cell_type": "code", 168 | "execution_count": 6, 169 | "metadata": {}, 170 | "outputs": [ 171 | { 172 | "name": "stdout", 173 | "output_type": "stream", 174 | "text": [ 175 | "4\n", 176 | "5\n" 177 | ] 178 | } 179 | ], 180 | "source": [ 181 | "my_list = [1,2,3,4,5]\n", 182 | "\n", 183 | "gencomp = (item for item in my_list if item > 3)\n", 184 | "\n", 185 | "for item in gencomp:\n", 186 | " print(item)" 187 | ] 188 | }, 189 | { 190 | "cell_type": "markdown", 191 | "metadata": {}, 192 | "source": [ 193 | "Подсказка: Ищите в Google фразу *generator comprehension*!\n", 194 | "\n", 195 | "# Отличная работа!" 196 | ] 197 | }, 198 | { 199 | "cell_type": "code", 200 | "execution_count": null, 201 | "metadata": { 202 | "collapsed": true 203 | }, 204 | "outputs": [], 205 | "source": [] 206 | } 207 | ], 208 | "metadata": { 209 | "kernelspec": { 210 | "display_name": "Python 3", 211 | "language": "python", 212 | "name": "python3" 213 | }, 214 | "language_info": { 215 | "codemirror_mode": { 216 | "name": "ipython", 217 | "version": 3 218 | }, 219 | "file_extension": ".py", 220 | "mimetype": "text/x-python", 221 | "name": "python", 222 | "nbconvert_exporter": "python", 223 | "pygments_lexer": "ipython3", 224 | "version": "3.6.1" 225 | } 226 | }, 227 | "nbformat": 4, 228 | "nbformat_minor": 1 229 | } 230 | -------------------------------------------------------------------------------- /11-Генераторы Python (Python Generators)/.ipynb_checkpoints/02-Iterators and Generators Homework-checkpoint.ipynb: -------------------------------------------------------------------------------- 1 | { 2 | "cells": [ 3 | { 4 | "cell_type": "markdown", 5 | "metadata": {}, 6 | "source": [ 7 | "# Итераторы и Генераторы - домашнее задание \n", 8 | "\n", 9 | "### Задача 1\n", 10 | "\n", 11 | "Создайте генератор, который создает квадраты чисел, вплоть до некоторого числа N." 12 | ] 13 | }, 14 | { 15 | "cell_type": "code", 16 | "execution_count": 1, 17 | "metadata": { 18 | "collapsed": true 19 | }, 20 | "outputs": [], 21 | "source": [ 22 | "def gensquares(N):\n", 23 | "\n", 24 | " pass" 25 | ] 26 | }, 27 | { 28 | "cell_type": "code", 29 | "execution_count": 2, 30 | "metadata": {}, 31 | "outputs": [ 32 | { 33 | "name": "stdout", 34 | "output_type": "stream", 35 | "text": [ 36 | "0\n", 37 | "1\n", 38 | "4\n", 39 | "9\n", 40 | "16\n", 41 | "25\n", 42 | "36\n", 43 | "49\n", 44 | "64\n", 45 | "81\n" 46 | ] 47 | } 48 | ], 49 | "source": [ 50 | "for x in gensquares(10):\n", 51 | " print(x)" 52 | ] 53 | }, 54 | { 55 | "cell_type": "markdown", 56 | "metadata": {}, 57 | "source": [ 58 | "### Задача 2\n", 59 | "\n", 60 | "Создайте генератор, который возвращает \"n\" случайных чисел между нижней и верхней границами (границы являются параметрами функции).
Замечание: используйте библиотеку random. Например:" 61 | ] 62 | }, 63 | { 64 | "cell_type": "code", 65 | "execution_count": 3, 66 | "metadata": {}, 67 | "outputs": [ 68 | { 69 | "data": { 70 | "text/plain": [ 71 | "9" 72 | ] 73 | }, 74 | "execution_count": 3, 75 | "metadata": {}, 76 | "output_type": "execute_result" 77 | } 78 | ], 79 | "source": [ 80 | "import random\n", 81 | "\n", 82 | "random.randint(1,10)" 83 | ] 84 | }, 85 | { 86 | "cell_type": "code", 87 | "execution_count": 4, 88 | "metadata": { 89 | "collapsed": true 90 | }, 91 | "outputs": [], 92 | "source": [ 93 | "def rand_num(low,high,n):\n", 94 | "\n", 95 | " pass" 96 | ] 97 | }, 98 | { 99 | "cell_type": "code", 100 | "execution_count": 5, 101 | "metadata": {}, 102 | "outputs": [ 103 | { 104 | "name": "stdout", 105 | "output_type": "stream", 106 | "text": [ 107 | "6\n", 108 | "1\n", 109 | "10\n", 110 | "5\n", 111 | "8\n", 112 | "2\n", 113 | "8\n", 114 | "5\n", 115 | "4\n", 116 | "5\n", 117 | "1\n", 118 | "4\n" 119 | ] 120 | } 121 | ], 122 | "source": [ 123 | "for num in rand_num(1,10,12):\n", 124 | " print(num)" 125 | ] 126 | }, 127 | { 128 | "cell_type": "markdown", 129 | "metadata": {}, 130 | "source": [ 131 | "### Задача 3\n", 132 | "\n", 133 | "Используйте функцию iter(), чтобы превратить строку ниже в итератор:\n" 134 | ] 135 | }, 136 | { 137 | "cell_type": "code", 138 | "execution_count": null, 139 | "metadata": { 140 | "collapsed": true 141 | }, 142 | "outputs": [], 143 | "source": [ 144 | "s = 'hello'\n", 145 | "\n", 146 | "# напишите здесь код" 147 | ] 148 | }, 149 | { 150 | "cell_type": "markdown", 151 | "metadata": {}, 152 | "source": [ 153 | "### Задача 4\n", 154 | "Опишите пример использования генератора с командой yield, такой пример, в котором Вы не хотели бы использовать обычную функцию с командой return.





\n", 155 | "\n" 156 | ] 157 | }, 158 | { 159 | "cell_type": "markdown", 160 | "metadata": {}, 161 | "source": [ 162 | "### Дополнительное задание!\n", 163 | "Можете ли Вы объяснить, что такое *gencomp* в коде ниже? (Замечание: Мы не рассматривали это на лекциях. Вам может понадобится поиск в Google или Stack Overflow, чтобы найти ответ!)" 164 | ] 165 | }, 166 | { 167 | "cell_type": "code", 168 | "execution_count": 6, 169 | "metadata": {}, 170 | "outputs": [ 171 | { 172 | "name": "stdout", 173 | "output_type": "stream", 174 | "text": [ 175 | "4\n", 176 | "5\n" 177 | ] 178 | } 179 | ], 180 | "source": [ 181 | "my_list = [1,2,3,4,5]\n", 182 | "\n", 183 | "gencomp = (item for item in my_list if item > 3)\n", 184 | "\n", 185 | "for item in gencomp:\n", 186 | " print(item)" 187 | ] 188 | }, 189 | { 190 | "cell_type": "markdown", 191 | "metadata": {}, 192 | "source": [ 193 | "Подсказка: Ищите в Google фразу *generator comprehension*!\n", 194 | "\n", 195 | "# Отличная работа!" 196 | ] 197 | }, 198 | { 199 | "cell_type": "code", 200 | "execution_count": null, 201 | "metadata": { 202 | "collapsed": true 203 | }, 204 | "outputs": [], 205 | "source": [] 206 | } 207 | ], 208 | "metadata": { 209 | "kernelspec": { 210 | "display_name": "Python 3", 211 | "language": "python", 212 | "name": "python3" 213 | }, 214 | "language_info": { 215 | "codemirror_mode": { 216 | "name": "ipython", 217 | "version": 3 218 | }, 219 | "file_extension": ".py", 220 | "mimetype": "text/x-python", 221 | "name": "python", 222 | "nbconvert_exporter": "python", 223 | "pygments_lexer": "ipython3", 224 | "version": "3.6.1" 225 | } 226 | }, 227 | "nbformat": 4, 228 | "nbformat_minor": 1 229 | } 230 | -------------------------------------------------------------------------------- /14-Продвинутые Объекты и Структуры Данных (Advanced Python Objects and Data Structures)/04-Advanced Dictionaries.ipynb: -------------------------------------------------------------------------------- 1 | { 2 | "cells": [ 3 | { 4 | "cell_type": "markdown", 5 | "metadata": {}, 6 | "source": [ 7 | "# Словари - Дополнительные Материалы\n", 8 | "В отличие от других структур данных, для словарей мы уже рассмотрели большинство нужных методов в этом курсе. Здесь мы рассмотрим ещё немного, для полноты картины:" 9 | ] 10 | }, 11 | { 12 | "cell_type": "markdown", 13 | "metadata": {}, 14 | "source": [ 15 | "## Генераторы словарей (Dictionary Comprehensions)\n", 16 | "\n", 17 | "Как и для генераторов списков, для быстрого создания словарей есть своя версия генераторов (это сложный для перевода термин, по английски это comprehension). Они используются не так часто, как для списков, но синтаксис следующий:" 18 | ] 19 | }, 20 | { 21 | "cell_type": "code", 22 | "execution_count": 1, 23 | "metadata": {}, 24 | "outputs": [ 25 | { 26 | "data": { 27 | "text/plain": [ 28 | "{0: 0, 1: 1, 2: 4, 3: 9, 4: 16, 5: 25, 6: 36, 7: 49, 8: 64, 9: 81}" 29 | ] 30 | }, 31 | "execution_count": 1, 32 | "metadata": {}, 33 | "output_type": "execute_result" 34 | } 35 | ], 36 | "source": [ 37 | "{x:x**2 for x in range(10)}" 38 | ] 39 | }, 40 | { 41 | "cell_type": "markdown", 42 | "metadata": {}, 43 | "source": [ 44 | "Одна из причин, по которой этот синтаксис не очень часто используется, это сложность в создании ключей, которые не основаны на значениях." 45 | ] 46 | }, 47 | { 48 | "cell_type": "markdown", 49 | "metadata": {}, 50 | "source": [ 51 | "## Итерации по ключам, значениям и элементам\n", 52 | "Для словарей можно выполнять итерации с помощью методов keys(), values() и items(). Например:" 53 | ] 54 | }, 55 | { 56 | "cell_type": "code", 57 | "execution_count": 2, 58 | "metadata": { 59 | "collapsed": true 60 | }, 61 | "outputs": [], 62 | "source": [ 63 | "d = {'k1':1,'k2':2}" 64 | ] 65 | }, 66 | { 67 | "cell_type": "code", 68 | "execution_count": 3, 69 | "metadata": {}, 70 | "outputs": [ 71 | { 72 | "name": "stdout", 73 | "output_type": "stream", 74 | "text": [ 75 | "k1\n", 76 | "k2\n" 77 | ] 78 | } 79 | ], 80 | "source": [ 81 | "for k in d.keys():\n", 82 | " print(k)" 83 | ] 84 | }, 85 | { 86 | "cell_type": "code", 87 | "execution_count": 4, 88 | "metadata": {}, 89 | "outputs": [ 90 | { 91 | "name": "stdout", 92 | "output_type": "stream", 93 | "text": [ 94 | "1\n", 95 | "2\n" 96 | ] 97 | } 98 | ], 99 | "source": [ 100 | "for v in d.values():\n", 101 | " print(v)" 102 | ] 103 | }, 104 | { 105 | "cell_type": "code", 106 | "execution_count": 5, 107 | "metadata": {}, 108 | "outputs": [ 109 | { 110 | "name": "stdout", 111 | "output_type": "stream", 112 | "text": [ 113 | "('k1', 1)\n", 114 | "('k2', 2)\n" 115 | ] 116 | } 117 | ], 118 | "source": [ 119 | "for item in d.items():\n", 120 | " print(item)" 121 | ] 122 | }, 123 | { 124 | "cell_type": "markdown", 125 | "metadata": {}, 126 | "source": [ 127 | "# Просмотр ключей, значений и элементов\n", 128 | "Сами по себе методы keys(), values() и items() возвращают объект словаря *view object*. Это не отдельный список элементов. Представление (view) всегда связано с самим словарём." 129 | ] 130 | }, 131 | { 132 | "cell_type": "code", 133 | "execution_count": 6, 134 | "metadata": {}, 135 | "outputs": [ 136 | { 137 | "data": { 138 | "text/plain": [ 139 | "dict_keys(['k1', 'k2'])" 140 | ] 141 | }, 142 | "execution_count": 6, 143 | "metadata": {}, 144 | "output_type": "execute_result" 145 | } 146 | ], 147 | "source": [ 148 | "key_view = d.keys()\n", 149 | "\n", 150 | "key_view" 151 | ] 152 | }, 153 | { 154 | "cell_type": "code", 155 | "execution_count": 7, 156 | "metadata": {}, 157 | "outputs": [ 158 | { 159 | "data": { 160 | "text/plain": [ 161 | "{'k1': 1, 'k2': 2, 'k3': 3}" 162 | ] 163 | }, 164 | "execution_count": 7, 165 | "metadata": {}, 166 | "output_type": "execute_result" 167 | } 168 | ], 169 | "source": [ 170 | "d['k3'] = 3\n", 171 | "\n", 172 | "d" 173 | ] 174 | }, 175 | { 176 | "cell_type": "code", 177 | "execution_count": 8, 178 | "metadata": {}, 179 | "outputs": [ 180 | { 181 | "data": { 182 | "text/plain": [ 183 | "dict_keys(['k1', 'k2', 'k3'])" 184 | ] 185 | }, 186 | "execution_count": 8, 187 | "metadata": {}, 188 | "output_type": "execute_result" 189 | } 190 | ], 191 | "source": [ 192 | "key_view" 193 | ] 194 | }, 195 | { 196 | "cell_type": "markdown", 197 | "metadata": {}, 198 | "source": [ 199 | "Отлично! Теперь Вы можете использовать различные методы для словарей!" 200 | ] 201 | } 202 | ], 203 | "metadata": { 204 | "kernelspec": { 205 | "display_name": "Python 3", 206 | "language": "python", 207 | "name": "python3" 208 | }, 209 | "language_info": { 210 | "codemirror_mode": { 211 | "name": "ipython", 212 | "version": 3 213 | }, 214 | "file_extension": ".py", 215 | "mimetype": "text/x-python", 216 | "name": "python", 217 | "nbconvert_exporter": "python", 218 | "pygments_lexer": "ipython3", 219 | "version": "3.6.1" 220 | } 221 | }, 222 | "nbformat": 4, 223 | "nbformat_minor": 1 224 | } 225 | --------------------------------------------------------------------------------