Upload
-
View
419
Download
1
Embed Size (px)
Citation preview
Python. Модулідоц., к.пед.н. Осадча К.П.
Бібліотеки
• збірка об'єктів чи підпрограм для вирішення близьких за тематикою задач.
Залежно від мови програмування бібліотеки містять об'єктні модулі чи сирцевий код та дані, допоміжні для задіяння та інтеграції нових можливостей в програмні рішення.
Навіщо?• Написання нового програмного
коду вимагає часу, тому зручно повторно використовувати частини готових програм.
• Ці фрагменти коду можна зберігати у бібліотеках
Стандартна бібліотека Python містить такі модулі
• subprocess• fractions• cmath• glob• copy• os.path• json• calendar• os• pickle
• datetime• bisect• collections• array• itertools• time• sys• random• math• socket…
Модуль random• Цей модуль вибирає випадкові
числа або переставляє елементи списку у випадковому порядку
>>> random.random() 0.37444887175646646 >>> random.uniform(1, 10) 1.1800146073117523 >>> random.randrange(10) 7 >>> random.randrange(0, 101, 2) 26 >>> random.choice('abcdefghij') 'c' >>> random.sample([1, 2, 3, 4, 5], 3) [4, 1, 5]
Модуль random
Модуль socket• Допомагає комп'ютерам
підключатися один до одного по мережі і через Інтернет
Модуль time• Підкаже поточний час і дату• Може обчислювати дати:
наприклад, який день буде три дні потому?
Модуль datetime •надає класи для обробки часу і дати різними способами
Приклад
>>> from datetime import datetime, date, time >>> d = date(2005, 7, 14) >>> t = time(12, 30) >>> datetime.combine(d, t) datetime.datetime(2005, 7, 14, 12, 30)
Pygame• Бібліотека для створення
відеоігор• Дозволяє працювати зі звуком і
спеціальною ігровою графікою
Завантаження модулів>>> import math >>> math.e 2.718281828459045
>>> import time, random >>> time.time() 1376047104.056417 >>> random.random() 0.9874550833306869
Використання псевдонімів
>>> import math as m >>> m.e 2.718281828459045
Інструкція from>>> from math import (sin, cos, tan, atan)...>>> from math import e, ceil as c >>> e 2.718281828459045 >>> c(4.6) 5
Інструкція from>>> from sys import * >>> version '3.3.2 (v3.3.2:d047928ae3f6, May 16 2013, 00:03:43) [MSC v.1600 32 bit (Intel)]' >>> version_info sys.version_info(major=3, minor=3, micro=2, releaselevel='final', serial=0)
Довідка
turtle• Слугує для малювання ліній і
фігур на екрані
Модуль turtlefrom turtle import *reset()left(90)forward(100)right(45)forward(70)right(90)forward(70)right(45)forward(100)right(90)forward(100)
Завантажує модуль
Обнуляє позицію черепашки
Просуває черепашку вперед на 70
Повертає черепашку на 90градусів вправо
Результат
Зіркаfrom turtle import *color('red', 'yellow')begin_fill()while True: forward(200) left(170) if abs(pos()) < 1: breakend_fill()done()
Почати слідкувати за черепашкою для заповнення області
Заповнити кольором область, пройдену черепашкою, починаючи з begin_fill();
Повернутися поточне місце розташування черепахи
Черепашка навколо сонця
1. from turtle import *2. color("orange")3. dot(10)4. center = pos()5. color("blue")6. shape("turtle")7. speed(0)8. penup()9. goto(200, 0)10.pendown()11.G = 80012.v = Vec2D(0, 1)13.t = 014.dt = 1
15.while t < 1100:16. goto(pos() + v * dt)17. setheading(towards(center))18. r = distance(center)19. acc = (-G / r ** 3) * pos()20. v += acc * dt21. t += dt22. 23.mainloop()
Малювання точки діаметром
Завершити малювання Почати малювання
Повернути черепашку під кутом
Основні команди для керування черепашкою
• forward(distance) Проповзти вперед на distance пікселів;
• backward(distance) Проповзти назад на distance пікселів;
• right(angle) Повернутися наліво на angle градусів; • left(angle) Повернутися направо на angle градусів; • goto(x, y) Перемістити черепашку в точку з
координатами (x,y); • setx(x) Установити координату x черепашки;• sety(y) Установити координату y черепашки;
Основні команди для керування черепашкою• setheading(to_angle) Повернути черепашку під
кутом to_angle до вертикалі (0 — наверх, 90 — направо);
• home() Повернути черепашку додому — в точку з координатами (0,0);
• circle(radius) Намалювати коло радіуса |r|, центр якої знаходиться зліва від черепашки, якщо r>0 і праворуч, якщо r<1;
• dot(size, color) Намалювати точку діаметра size кольору color;
• undo() Відкотити попереднє дію черепашки
Більше на http://server.179.ru/tasks/python/2017b1/pgm12.5_Turtle.html
Модуль fractionsнадає підтримку раціональних чисел>>> Fraction(1, 3) Fraction(1, 3) >>> >>> Fraction('3/7') Fraction(3, 7) >>> Fraction(100) Fraction(100, 1) >>> Fraction() Fraction(0, 1) >>> Fraction('3.1415') Fraction(6283, 2000) >>> Fraction(3.1415) Fraction(7074029114692207, 2251799813685248)
Раціональні числа можна, як int і float, складати,
множити, ділити>>> from fractions import Fraction >>> a = Fraction(1, 7) >>> b = Fraction(1, 3) >>> a + b Fraction(10, 21) >>> a * b Fraction(1, 21)
fractions.gcd(a, b) - найбільший спільний дільник
>>> from fractions import gcd >>> gcd(1, 5) 1 >>> gcd(1000, 3) 1 >>> gcd(4, 6) 2
Модуль cmath• надає функції для роботи з
комплексними числами.
Модуль glob
•знаходить всі шляхи, які збігаються з заданим шаблоном у відповідності з правилами, використовуваними оболонкою Unix.
Модуль copy• операція присвоювання не копіює
об'єкт, він лише створює посилання на об'єкт.
• Для змінюваних колекцій, або для колекцій, які містять змінні елементи, часто необхідна така копія, щоб її можна було змінити, не змінюючи оригінал.
• Надає загальні (поверхнева та глибока) операції копіювання
Модуль copy• copy.copy(x) - повертає поверхневу
копію x.
• copy.deepcopy(x) - повертає повну копію x.
• Исключениесору.error - виникає, якщо об'єкт неможливо скопіювати.
Модуль copy>>> import copy >>> test_1 = [1, 2, 3, [1, 2, 3]] >>> test_copy = copy.copy(test_1) >>> print(test_1, test_copy) [1, 2, 3, [1, 2, 3]] [1, 2, 3, [1, 2, 3]]
Модуль functools• збірник функцій високого рівня:
взаємодіючих з іншими функціями або повертають інші функції.
• @functools.lru_cache(maxsize=128, typed=False) - декоратор, який зберігає результати maxsize останніх викликів. Це може заощадити час при дорогих обчисленнях, якщо функція періодично викликається з тими ж аргументами.
>>> from functools import lru_cache >>> # Числа Фібоначчі >>> @lru_cache(maxsize=None) ... def fib(n):... if n < 2: ... return n ... return fib(n-1) + fib(n-2) >>> print([fib(n) for n in range(100)])[0, 1, 1, 2, 3, 5, 8, 13, 21, 34, 55,...] >>> print(fib.cache_info()) CacheInfo(hits=196, misses=100, maxsize=None, currsize=100)
Модуль calendarдозволяє надрукувати собі календарик а також містить деякі інші корисні функції для роботи з календарями):•calendar.setfirstweekday(weekday) - встановлює перший день тижня•calendar.firstweekday() - повертає перший день тижня•calendar.isleap(year) - є рік високосним…
Приклад calendarimport calendar cal = calendar.month(2015, 11) print "Here is the calendar:" print cal
Модуль os• надає безліч функцій для роботи з
операційною системою, причому їх поведінка, як правило, не залежить від ОС, тому програми залишаються стерпними.
Модуль os>>> import os >>> os.getcwd() 'C:\\Python33‘ - поточна робоча
директорія.
>>> os.name 'nt' - ім'я операційної системи.
Модуль json• JSON (JavaScript Object Notation) -
простий формат обміну даними, що базується на підмножині синтаксису JavaScript. Модуль json дозволяє кодувати і декодувати дані в зручному форматі.
Модуль json>> import json >>> json.dumps(['foo', {'bar': ('baz', None, 1.0, 2)}]) '["foo", {"bar": ["baz", null, 1.0, 2]}]' >>> print(json.dumps("\"foo\bar")) "\"foo\bar"
Модуль sysзабезпечує доступ до деяких змінних і функцій, взаємодіючим з інтерпретатором python.•sys.argv - список аргументів командного рядка, що передаються сценарієм Python.•sys.copyright - рядок, що містить авторські права, що належать до інтерпретатору Python.•sys.exec_prefix - каталог установки Python.•sys.executable - шлях до інтерпретатору Python.
Модуль sysimport sys for x in sys.argv: print "Argument: ", x
Модуль array• визначає масиви в python
from array import array a = array("i", [10, 20, 30]) for value in a:
print(value)
10 20 30
Методи array• array.append(х) • array.count () • array.extend(iter) - додавання елементів об'єкта в масив.• array.fromfile(F, N) - читає N елементів з файлу і додає
їх в кінець масиву.• array.fromlist(список) - додавання елементів зі списку. • array.index(х) - номер першого входження x в масив.• array.pop(i) - видаляє i-ий елемент масиву і повертає
його.• array.remove(х) - видалити перше входження х з масиву. • array.reverse() - зворотний порядок елементів у масиві.
Прикладimport array a = array.array('i', xrange(5)) a.extend(xrange(5)) print 'Extended:', a
Extended: array('i', [0, 1, 2, 3, 4, 0, 1, 2, 3, 4])
Масив• Набір однотипних елементів, що мають
спільне ім'я, доступ до яких що здійснюється по індексу.
• Є структурою з довільним доступом по індексу
• У Python масив реалізований за допомогою типу даних «список»
• Вони використовуються рідко, коли потрібно досягти високої швидкості роботи. В інших випадках масиви можна замінити іншими типами даних: списками, кортежами, рядками.
Масив (матриця)Часто в задачах доводиться зберігати прямокутні таблиці з даними. Такі таблиці називаються матрицями, або двовимірними масивами. У мові програмування Python таблицю можна представити у вигляді списку рядків, кожен елемент якого є в свою чергу списком, наприклад, чисел
Двомірний масив
matrix = [[1, 2, 3], [1, 2, 7], [4, 9, 2], [6, 2, 5]]print (matrix)[[1, 2, 3], [1, 2, 7], [4, 9, 2], [6, 2, 5]]
print matrix[0] [1, 2, 3]
print matrix[0][1] 2
Модуль tkinter• Для створення кнопок, вікон й
інших графічних елементів для взаємодії користувача з програмою
Створюємо головне вікноfrom tkinter import * def printer(event):
print ("Очередной 'Hello World!'") root = Tk() but = Button(root) but["text"] = "Печать" but.bind("<Button-1>",printer) but.pack() root.mainloop()
def printer(event): print ("Очередной 'Hello World!'")
Завдання кнопки вивести якесь повідомлення у потік виводу, використовуючи функцію print. Робити вона це буде при натисканні на неї лівою кнопкою миші. Дії (алгоритм), які відбуваються при цій чи іншій події, оформляють у вигляді функції, а потім викликають, коли вони знадобляться. Параметр event – це яка-небудь подія.
root = Tk()
Об'єкт вікна верхнього рівня створюється при зверненні до класу Tk модулі tkinter. Змінну пов'язану з об'єктом-вікном прийнято називати root
but = Button(root)
Кнопка створюється при зверненні до класу Button модулі tkinter. Об'єкт кнопка зв'язується з якої-небудь змінною (but). У класі Button є обов'язковий параметр — об'єкт, якому кнопка належить (root).
but["text"] = "Печать" У кнопки багато властивостей: розмір, колір фону і напису та ін. Поки встановимо лише одну властивість — текст (text)
but.bind("<Button-1>",printer)Подія натискання лівою кнопкою миші виглядає так: <Button-1>. Потрібно зв'язати цю подію з обробником (функцією printer). Для зв'язку призначений метод bind.
but.pack()Для відображення кнопки у вікні використовується методу pack.
root.mainloop()Для відображення галвного вікна використовується метод mainloop.
Імітатор кубикаfrom tkinter import * from random import randintdef roll(): text.delete(0.0, END) text.insert(END, str(randint(1,6)))window = Tk()text = Text(window, width=1, height=1)buttonA = Button(window, text='Press to roll!', command=roll)text.pack()buttonA.pack()
Кольори>>> from tkinter import *>>> t=Tk()>>> colorchooser.askcolor()
((222.8671875, 99.38671875, 201.78515625), '#de63c9')
червоний зелений синій
Код кольору у 16-річній системі
Tkinter кординати холста
from random import *from tkinter import *size = 500window = Tk()canvas = Canvas(window, width=size, height=size)canvas.pack()while True: col = choice(['pink', 'orange', 'purple', 'yellow', 'red', 'green', 'blue']) x0 = randint(0, size) y0 = randint(0, size) d = randint(0, size/5) canvas.create_oval(x0, y0, x0+d, y0+d, fill=col) window.update()
Реакція на події
<Button-1> <Right>
<Button-3>
<space>
<Left>
<Up>
<KeyPress-a>
<Down>
Події миші Події клавіатури
Клік лівою кнопкою
Клік правою кнопкою
Натиснута стрілка вправо
Натиснута стрілка вліво
Натиснута клавіша «пробіл»
Натиснута стрілка вверх
Натиснута стрілка вниз
Натиснута клавіша а Можна
поставити різні літери
li = ["red","green"] def color(event):
fra.configure(bg=li[0]) li[0],li[1] = li[1],li[0]
def outgo(event): root.destroy()
from tkinter import *root = Tk() fra = Frame(root,width=100,height=100) but = Button(root,text="Выход") fra.pack() but.pack() root.bind("<Return>",color) but.bind("<Button-1>",outgo) root.mainloop()
Створення свого модуля на Python
Створимо файл mymodule.py, в якій визначимо які-небудь функції:def hello():
print('Hello, world!') def fib(n):
a = b = 1 for i in range(n - 2): a, b = b, a + b return b
Створення свого модуля на Python
Тепер у цій же папці створимо інший файл, наприклад, main.py:import mymodule mymodule.hello() print(mymodule.fib(10))
Створення свого модуля на Python
def hello(): print('Hello, world!')
def fib(n): a = b = 1 for i in range(n - 2): a, b = b, a + b return b if __name__ == "__main__":
hello() for i in range(10): print(fib(i))