Создать информационную систему позволяющую работать с сотрудниками некой компании python

Урок 8. Python: от простого к практике. Продолжение

Geek Repo:Geek Repo

Github PK Tool:Github PK Tool

Home_Work_08_Python_-database

Семинар 8. Домашнее задание:

Доделать решение задачи про базы данных:

Задача:
Создать информационную систему позволяющую работать с сотрудниками некой компании студентами вуза учениками школы

(прямая отсылка к первому семинару «введение в базы данных»)

Структура программы:

  1. Модуль для запуска программы

button.py

  1. Модуль контроллера

controller.py

  1. Модуль сортировки

sort.py

  1. Модуль ввода- вывода

write_read_file.py

  1. Модуль просмотра (UI)

viev.py

About

Урок 8. Python: от простого к практике. Продолжение


Languages

Language:Python 100.0%

import mysql.connector

con = mysql.connector.connect(

    host="localhost", user="root", password="password", database="emp")

def Add_Employ():

    Id = input("Enter Employee Id : ")

    if(check_employee(Id) == True):

        print("Employee aready existsnTry Againn")

        menu()

    else:

        Name = input("Enter Employee Name : ")

        Post = input("Enter Employee Post : ")

        Salary = input("Enter Employee Salary : ")

        data = (Id, Name, Post, Salary)

        sql = 'insert into empd values(%s,%s,%s,%s)'

        c = con.cursor()

        c.execute(sql, data)

        con.commit()

        print("Employee Added Successfully ")

        menu()

def Promote_Employee():

    Id = int(input("Enter Employ's Id"))

    if(check_employee(Id) == False):

        print("Employee does not  existsnTry Againn")

        menu()

    else:

        Amount = int(input("Enter increase in Salary"))

        sql = 'select salary from empd where id=%s'

        data = (Id,)

        c = con.cursor()

        c.execute(sql, data)

        r = c.fetchone()

        t = r[0]+Amount

        sql = 'update empd set salary=%s where id=%s'

        d = (t, Id)

        c.execute(sql, d)

        con.commit()

        print("Employee Promoted")

        menu()

def Remove_Employ():

    Id = input("Enter Employee Id : ")

    if(check_employee(Id) == False):

        print("Employee does not  existsnTry Againn")

        menu()

    else:

        sql = 'delete from empd where id=%s'

        data = (Id,)

        c = con.cursor()

        c.execute(sql, data)

        con.commit()

        print("Employee Removed")

        menu()

def check_employee(employee_id):

    sql = 'select * from empd where id=%s'

    c = con.cursor(buffered=True)

    data = (employee_id,)

    c.execute(sql, data)

    r = c.rowcount

    if r == 1:

        return True

    else:

        return False

def Display_Employees():

    sql = 'select * from empd'

    c = con.cursor()

    c.execute(sql)

    r = c.fetchall()

    for i in r:

        print("Employee Id : ", i[0])

        print("Employee Name : ", i[1])

        print("Employee Post : ", i[2])

        print("Employee Salary : ", i[3])

        print("---------------------

        -----------------------------

        ------------------------------

        ---------------------")

    menu()

def menu():

    print("Welcome to Employee Management Record")

    print("Press ")

    print("1 to Add Employee")

    print("2 to Remove Employee ")

    print("3 to Promote Employee")

    print("4 to Display Employees")

    print("5 to Exit")

    ch = int(input("Enter your Choice "))

    if ch == 1:

        Add_Employ()

    elif ch == 2:

        Remove_Employ()

    elif ch == 3:

        Promote_Employee()

    elif ch == 4:

        Display_Employees()

    elif ch == 5:

        exit(0)

    else:

        print("Invalid Choice")

        menu()

menu()

Recommend Projects

  • React photo

    React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo

    Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo

    Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo

    TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo

    Django

    The Web framework for perfectionists with deadlines.

  • Laravel photo

    Laravel

    A PHP framework for web artisans

  • D3 photo

    D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Visualization

    Some thing interesting about visualization, use data art

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo

    Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo

    Microsoft

    Open source projects and samples from Microsoft.

  • Google photo

    Google

    Google ❤️ Open Source for everyone.

  • Alibaba photo

    Alibaba

    Alibaba Open Source for everyone

  • D3 photo

    D3

    Data-Driven Documents codes.

  • Tencent photo

    Tencent

    China tencent open source team.

0 / 0 / 0

Регистрация: 20.09.2019

Сообщений: 15

1

Написать рекомендательную систему отдела кадров

01.10.2019, 09:19. Показов 2348. Ответов 5


Напишите рекомендательную систему отдела кадров некоторой компании, которая реализует следующую логику: Предлагает пользователю выбрать желаемый тип профессии (вывести на экран под цифрами типы профессий и предложить ввести номер). Типы профессий:
1 – Человек – Человек
2 – Человек – Знаковая система
3 – Человек – Природа
4 – Человек – Художественный образ
5 – Человек – Техника
Далее запрашивает от пользователя демографические данные (ФИО, возраст, пол, уровень образования, стаж работы в аналогичной должности, сколько месяцев назад исполнял обязанности в аналогичной должности. Можете придумать свои критерии. На основании полученных от пользователя данных, сообщает о том, какие вакансии с учетом введенных данных имеются для этого пользователя в этой компании (предусмотрите хотя бы 3 вакансии для каждого типа профессии). В случае, если в выбранном кандидатом типе профессий нет такой вакансии, чтобы кандидат удовлетворял требованиям компании к этой вакансии, выдайте пользователю сообщение о том, что вакансии для него в компании нет. Ответ пользователю выведите предложением на естественном языке: «Уважаемый Имя Отчество! В нашей компании имеется для вас вакансия: НазваниеВакансии» или «Уважаемый Имя Отчество! На данный момент в нашей компании отсутствуют вакансии для Вас» Профиль компании, имеющиеся вакансии и требования к кандидату придумайте самостоятельно.

Можете помочь найти ошибку в коде? Я хочу, чтобы мне выдало вакансию заместителя ректора, но процесс проскакивает мимо этого пункта и выдает «мы вам перезвоним». С некоторыми другими пунктами происходит так же

Вот мой код:

Python
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
prof = input("Выберите желаемую профессию: 1 – Человек – Человек,n2 – Человек – Знаковая система,n3 – Человек – Природа,n4 – Человек – Художественный образ,n5 – Человек – Техника n  ")
prof=int(prof)
name=input("Введите свое имя." )
age,gender=input("Введите свой возраст и пол через пробел. ").split()
age = int(age)
magor =input("Какое у вас образование? n1-среднее n2-специальное n3-бакалавр n4-магистр n5-специалист n ")
exp = input("Есть ли у вас стаж? n1-да n2-нет")
exp=int(exp)
if exp ==1:
    time,pasttime=input("Сколько вы были на аналогичной должности?,nКогда вы были на аналогичной должности в последний раз?n Ответы вводите цифрами и через пробел.   ").split()
    time=int(time)
    pasttime=int(pasttime)
 
if prof == 1 and age>=25 and magor == 3 or magor ==4 or magor ==5:
    print("Уважаемый %s, В нашей компании имеется для вас вакансия: Учитель начальных классов" %name)
elif prof == 1 and age>=35 and magor == 3 or magor ==4 or magor ==5 and exp ==1 and time >=7 and pasttime<=5:
    print("Уважаемый %s, В нашей компании имеется для вас вакансия: Заведующий кафедрой психологии" %name)
elif prof == 1 and age>=45 and magor == 3 or magor ==4 or magor ==5 and exp ==1 and time >=15 and pasttime<=3:
    print("Уважаемый %s, В нашей компании имеется для вас вакансия: Заместитель ректора" %name)
    
elif prof ==2 and age>=20 and exp ==1 and time >= 1:
    print("Уважаемый %s. В нашей компании имеется для вас вакансия: Менеджер" %name)
elif prof ==2 and age>=20 and exp ==1 and time >= 1:
    print("Уважаемый %s, В нашей компании имеется для вас вакансия: Системный администратор" %name)
elif prof ==2 and age>=25 and magor ==2 or magor ==3 or magor ==5:
    print("Уважаемый %s, В нашей компании имеется для вас вакансия: Программист" %name)
    
elif prof ==3 and age>=30 and magor == 2 or magor == 3 or magor ==5 and exp ==1 and time >= 5 and pasttime>=5:
    print("Уважаемый %s, В нашей компании имеется для вас вакансия: Метеоролог" %name)
elif prof ==3 and age>=40 and magor == 2 or magor == 3 or magor ==5 and exp ==1 and time >= 10 and pasttime>=7:
    print("Уважаемый %s, В нашей компании имеется для вас вакансия: Биолог" %name)
elif prof ==3 and age>=35 and magor == 3 or magor ==5 and exp ==1 and time >= 7 and pasttime>=5:
    print("Уважаемый %s, В нашей компании имеется для вас вакансия: Геолог" %name)
    
    
elif prof ==4 and age>=22 and exp ==2:
    print("Уважаемый %s, В нашей компании имеется для вас вакансия: Дизайнер" %name)
elif prof ==4 and age>=27 and magor == 2 or magor == 3 or magor ==5 and exp ==1 and time >=3:
    print("Уважаемый %s, В нашей компании имеется для вас вакансия: Режиссер" %name)
elif prof ==4 and age>=40 and magor == 2 and exp ==1 and time >=15 and pasttime<=3:
    print("Уважаемый %s, В нашей компании имеется для вас вакансия: Ювелир" %name)
    
    
elif prof ==5 and age>=22 and exp ==2:
    print("Уважаемый %s, В нашей компании имеется для вас вакансия: Jr.программист" %name)
elif prof ==5 and age>=27 and exp ==1 and time ==5:
    print("Уважаемый %s, В нашей компании имеется для вас вакансия: Старший программист" %name)
elif prof ==5 and age>=23 and exp ==2:
     print("Уважаемый %s, В нашей компании имеется для вас вакансия: Водитель" %name)
     
else:
    print("Мы вам перезвоним")



0



Время на прочтение
4 мин

Количество просмотров 15K

Часто приходится разрабатывать приложения для корпоративной системы которые должны были функционировать еще вчера, не требующие строго соответствия корпоративным стандартам. Такими приложениями могут представлять cms к сайтам, gui для сервисов под *nix системы просто приложением учетной системы. Разработка приложений подобного рода на скриптовых языках

есть тема!

обычно оптимальна с точки зрения скорости выполнения. Под катом пример реализации приложения на python+PyQt4, функции приложения парсинг и загрузка данных из xls файлов…
Для того чтобы

приготовить яичницу

я использовал:

  1. Python2.5
  2. PyQt-4.4.3
  3. kinterbasdb3 (БД КИС — Firebird)
  4. xlrd-0.6

В качестве редактора всем рекомендую emacs python-mode (это касается и
виндопользователей):

emsc python-mode

1. Достаем посуду из шкафа (хранение настроек)

Вообще для скриптовых языков такой вопрос не стоит так как, вы можете завести файл настроек типа settings.py и спокойно запускать его на уровне кода:
# -*- coding: cp1251 -*-
host='localhost/3051:intur'
user='SYSDBA'
path='d:\dlogs\scanner\xls'

oprts = (
u'НАТАЛИ',
u'ЭКСПРЕСС',
u'ИНТАЕР',
u'ЛАНТА',
u'КОРАЛ',
)


Получение переменных в программе выглядит так:
mod = __import__(modName)
host = getattr(mod, 'host', 'horn:intur')
user = getattr(mod, 'user', 'SYSDBA')

2.Рисование форм

Qt Software — вообще красавцы с точки зрения документации, или если сравнивать тулзы для рисования GUI — то здесь они тоже молодцы. Главное окошко программы я нарисовал в QtDesigner + отметил сигналы с виджетов, которые нужно обрабатывать.
emsc python-mode
Для того чтобы быстро собирать формы в дизайнере безусловно нужно немного поднатореть в понимание механизмов формирования Layout и Spacers. Существует два варианта поднятия окошка в приложения, либо вы генерируете файл необходимом для вас языке программирования, либо с помощью спец.модулей Qt строите классы из xml-файлов описания. Я обычно генерирую файл, не могу сказать что это чем-то лучше, просто мне это кажется более удобным. Для питона PyQt поставляет pyuic.bat который просто нужно скопировать в директорию вашего проекта и генерировать классы-обработчики окошек по мере вашей работы в дизайнере
У меня это для главного окна выглядит так:

       pyuic.bat -o mwnd.py mwnd.ui


В отличие от wx Qt генеруют не наследники классов главных окон, а классы- модификаторы которые получают в качестве аргумента базовый класс окна и «вешают» на него ваши контролы. При генерации на с++ Qt использует множественное наследование класс вашего приложения становится наследником класса базового окна и класса-модификатора. Интересно что при генерации файлов слоты pyuic вешаются на базовый класс, отсюда несоответствие — обработчики сигналов находятся в наследнике базового класса окна, а ссылки на контролы этого же окна находятся у класса-модификатора сгенерированного pyuic.

    def _initApp(self):
        self.mwnd, self.mwnd.ui = MainWnd(), Uwnd()
        self.mwnd.ui.setupUi(self.mwnd)


Я поступил просто: связал класс-модификатор с наследником базового класса окна, получилось просто при необходимости обращения к контролам общаюсь к ним как — self.ui.«name». Вроде очевидная штука, но как часто это бывает пришла ко мне в голову не с первого раза.

! Еще интересно что в питон не переваривает ключевые слова в названиях атрибутов и методов классов, поэтому вы не можете завести переменную self.pass или self.exec(). Отсюда и смешная надпись в каждой PyQt приложении sys.exit(app.exec_())

3. Ставим скороводку на плиту, или запуск приложения

Вот код main.py — его задачи запуститься, загрузить файл настроек, запросить пароль и в случае удачного подключения запустить главное окно приложения

main.py

4. Не забудем положить яица в яичницу.

Наследник главного окна приложения (MainWnd) выполняет функции отслеживания поведения пользователя, здесь кстати видны слоты которые мы сгенерировали в дизайнере, здесь основная задача кода максимально прозрачные и простые функции управления окном для основного класса приложения выполняющего загрузку файла в БД.
Класс выполняющий основную функцию приложения — парсинг и загрузку данных (MainModel) не имеет смысла без главного окна поэтому сделаем его атрибутом окна. Для парсинга xls файлов в питоне есть тривиальная в использовании, и тем замечательная библиотека xlrd, работает с файлом напрямую не поднимая громоздких OLE машин, и поэтому еще и более быстродейственна. Приложение позволяет загружать в режиме только измененных файлов, поэтому часть когда MainModel, уведено для сравнения дат модификации и последней загрузки, которая хранится в БД. Так кроме главного рабочего класса приложения никто с БД не общается даем ему небольшой класс (dbConn), которые хранит инструкции MainModel в «терминах» sql.

WndModel.py

Вообще по науке, есть некая неуклюжесть программы из-за протягивания переменных (например app) с класса Container до классов 2 уровня иерархий. В больших программах таких переменных становится чуть более чем

9000

много, и эта задача решается с помощью синглтона (в следующий раз это я учту).

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

P.S. Полный исходный код здесь

UPD. вынес код на внешний кодохранитель, если кто подскажет как корректно подсветить python-код на Хабре буду благодарен.

Корпоративный справочник на python
2018-04-06 в 15:52, , рубрики: python

Часто, в территориально и инфраструктурно разнесенных офисах предприятия, сотрудники пользуются «файликом» для поиска номеров других сотрудников. Это связанно либо с отсутствием нормального корп.портала, бардаком в АД либо с ее отсутствием вообще.

Задача:

  • Создать web справочник для компании со множеством партнерских и дочерних офисов;
  • Минимальный интерфейс для пользователей;
  • Вывод информации в табличном виде и детальный вывод отдельно взятого контакта;
  • Автодонабор имени в строке поиска;
  • Обеспечить возможность редактирования записей справочника секретарями офисов;
  • Обеспечить возможность ограничения прав на редактирование справочника;
  • Возможность вывести данные отдельного предприятия;
  • Отдельное отображение общих (сервисных) номеров.


Прочитав пару отличных статей (раз, два) можно было не морочить голову, но
офисы имеют разную инфраструктуру и невозможно получить доступа в АД и мне очень хотелось поупражняться в любимом Python.

В моем проекте на Github-е будет уже заполненная тестовая база SQLite.

К сожалению, SQLite не поддерживает INSERT в представления (VIEW), поэтому в проекте не реализована возможность ограничить редактирования секретарями определенного офиса контактов только своего офиса. При использовании же связки MySQL/Flask-Admin — это возможно.

Ссылка на github

Интерфейс поиска

Корпоративный справочник на python - 1

Корпоративный справочник на python - 2

Корпоративный справочник на python - 3

Корпоративный справочник на python - 4

Админ. интерфейс реализован с помощью библиотеки Flask-Admin

login: demo
password: demo!

Корпоративный справочник на python - 5

Корпоративный справочник на python - 6

Корпоративный справочник на python - 7

Корпоративный справочник на python - 8

Корпоративный справочник на python - 9

Оригинал статьи

Автор: Жрец

Источник

Язык программирования Python[править]

Элементарные конструкции[править]

Типы данных[править]

Целые числа
Числа ничем не отличаются от обычных чисел. Они поддерживают набор самых обычных математических операций:

Операция Описание
x + y Сложение
x — y Вычитание
x * y Умножение
x / y Деление
x // y Целая часть от деления
x % y Остаток от деления
-x​ Смена знака числа
abs(x) Модуль числа
x ** y Возведение в степень

Вещественные числа
Вещественные числа поддерживают те же операции, что и целые. Однако вещественные числа неточны, и это может привести к ошибкам.

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

Оператор Описание
math.sin() Возвращает синус числа
math.asin() Возвращает арксинус числа
math.cos() Возвращает косинус числа
math.cos() Возвращает арккосинус числа
math.tan() Возвращает тангенс числа
math.fabs() Возвращает модуль числа
math.sqrt() Возвращает корень числа
math.pow() Возводит число в степень

Модуль random реализует генератор случайных чисел и функции случайного выбора.

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

Работа со строками в Python удобна. Существует несколько литералов строк, которые мы сейчас и рассмотрим.

Строки в апострофах и в кавычках — одно и то же. Причина наличия двух вариантов в том, чтобы позволить вставлять в литералы строк символы кавычек или апострофов, не используя экранирование.

Экранированные последовательности позволяют вставить символы, которые сложно ввести с клавиатуры.

Экранированная последовательность Описание
«n» Перевод строки
«a» Звонок
«b» Забой
«f» Перевод страницы
«r» Возврат каретки
«t» Горизонтальная табуляция
«v» Вертикальная табуляция
«N{id}» Идентификатор ID базы данных Юникода
«uhhhh» 16-битовый символ Юникода в 16-ричном представлении
«Uhhhh…» 32-битовый символ Юникода в 32-ричном представлении
«xhh» 16-ричное значение символа
«ooo» 8-ричное значение символа
«» Символ Null (не является признаком конца строки)

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

Операция Описание
S1 + S2 Конкатенация (сложение строк)
S * 2 Повторение строки
S[i] Обращение по индексу
len(S) Длина строки
S.find(str, [start],[end]) Поиск подстроки в строке. Возвращает номер первого вхождения или -1
S.index(str, [start],[end]) Поиск подстроки в строке. Возвращает номер первого вхождения
S.replace(шаблон, замена) Замена шаблона
S.split(символ) Разбиение строки по разделителю
S.upper() Преобразование строки к верхнему регистру
S.lower() Преобразование строки к нижнему регистру

Логические выражения. Ветвления[править]

Логические выражения и операторы[править]

Говоря на естественном языке (например, русском) мы обозначаем сравнения словами «равно», «больше», «меньше». В языках программирования используются специальные знаки, подобные тем, которые используются в математике: > (больше), < (меньше), >= (больше или равно), <= (меньше или равно), == (равно), != (не равно).
Не путайте операцию присваивания значения переменной, обозначаемую в языке Python одиночным знаком «равно», и операцию сравнения (два знака «равно»). Присваивание и сравнение – разные операции
Логические операторы
A and B — истина, если оба значения A и B истинны.
A or B — истина, если хотя бы одно из значений A и B истинно.
not A — истина, если A ложно

Ветвления[править]

Синтаксис инструкции if
Сначала записывается часть if с условным выражением, далее могут следовать одна или более необязательных частей elif, и, наконец, необязательная часть else.
Конструкция с несколькими elif может также служить отличной заменой конструкции switch — case в других языках программирования.

Функции[править]

Параметры и аргументы функции[править]

Функция в python — объект, принимающий аргументы и возвращающий значение. Обычно функция определяется с помощью инструкции def:
def add(a, b):

    return a * b

Инструкция return говорит, что нужно вернуть значение. В этом случае функция возвращает произведение a и b.
Функция может быть любой сложности и возвращать любые объекты (списки, кортежи и функции)
Функция может и не заканчиваться инструкцией return, при этом функция вернет значение None.
Аргументы функции
Функция может принимать произвольное количество аргументов или не принимать их вовсе. Также распространены функции с произвольным числом аргументов, функции с позиционными и именованными аргументами, обязательными и необязательными.

Локальные и глобальные переменные[править]

В программировании особе внимание уделяется концепции о локальных и глобальных переменных, а также связанное с ними представление об областях видимости. Соответственно, локальные переменные видны только в локальной области видимости, которой может выступать отдельно взятая функция. Глобальные переменные видны во всей программе. «Видны» – значит, известны, доступны. К ним можно обратиться по имени и получить связанное с ними значение.
В Python, переменные, на которые только ссылаются внутри функции, считаются глобальными. Если переменной присваивается новое значение где-либо в теле функции, считается, что она локальная, и, если вам нужно, то нужно явно указывать её глобальной.
К глобальной переменной можно обратиться из локальной области видимости. К локальной переменной нельзя обратиться из глобальной области видимости, потому что локальная переменная существует только в момент выполнения тела функции. При выходе из нее, локальные переменные исчезают. Компьютерная память, которая под них отводилась, освобождается. Когда функция будет снова вызвана, локальные переменные будут созданы заново.
К локальной области относятся тела функций. Если, находясь в глобальной области видимости, мы попытаемся обратиться к локальной переменной, то возникнет ошибка.

Структуры данных[править]

Списки. Кортежи. Словари[править]

Списки
Списки в Python — упорядоченные изменяемые коллекции объектов произвольных типов (почти как массив, но типы могут отличаться).
Чтобы использовать списки, их нужно создать. Создать список можно несколькими способами. Можно обработать любой итерируемый объект встроенной функцией list.
Список можно создать и при помощи литерала.
И еще один способ создать список — это генераторы списков. Генератор списков — способ построить новый список, применяя выражение к каждому элементу последовательности. Генераторы списков очень похожи на цикл for.
Методы списков

Метод Описание
list.append(x) Добавляет элемент в конец списка
list.extend(L) Расширяет список list, добавляя в конец все элементы списка L
list.insert(i, x) Вставляет на i-ый элемент значение x
list.remove(x) Удаляет первый элемент в списке, имеющий значение x. ValueError, если такого элемента не существует
list.pop([i]) Удаляет i-ый элемент и возвращает его. Если индекс не указан, удаляется последний элемент
list.index(x, [start [, end]]) Возвращает положение первого элемента со значением x (при этом поиск ведется от start до end)
list.count(x) Возвращает количество элементов со значением x
list.sort([key=функция]) Сортирует список на основе функции
list.reverse() Разворачивает список
list.copy() Поверхностная копия списка
list.clear() Очищает список

Кортежи
Разница между списком и кортежом

  • Кортеж защищен от изменений.
  • Меньший размер.
  • Возможность использовать кортежи в качестве ключей словаря.

Создать кортеж из итерируемого объекта можно с помощью функции tuple()
Методы кортеж
Все операции над списками, не изменяющие список. Можно также по-разному менять элементы местами и так далее.
Словари
Словари в Python — неупорядоченные коллекции произвольных объектов с доступом по ключу. Их иногда ещё называют ассоциативными массивами или хеш-таблицами.
Создать его можно несколькими способами.

  • С помощью литерала

a = {}

  • C помощью функции dict

a = dict()

  • C помощью метода fromkeys

a = dict.fromkeys([‘b’, ‘c’])

  • C помощью генераторов словарей, которые очень похожи на генераторы списков

a = {b: b ** 2 for a in range(5)}
Присвоение по новому ключу расширяет словарь, присвоение по существующему ключу перезаписывает его, а попытка извлечения несуществующего ключа порождает исключение.
Методы словарей

Метод Описание
dict.clear() очищает словарь
dict.copy() возвращает копию словаря
dict.get(key[, default]) возвращает значение ключа, но если его нет, не бросает исключение, а возвращает default (по умолчанию None)
dict.items() возвращает пары (ключ, значение)
dict.keys() возвращает ключи в словаре
dict.pop(key[, default]) удаляет ключ и возвращает значение. Если ключа нет, возвращает default (по умолчанию бросает исключение)
dict.popitem() удаляет и возвращает пару (ключ, значение). Если словарь пуст, бросает исключение KeyError
dict.setdefault(key[, default]) возвращает значение ключа, но если его нет, не бросает исключение, а создает ключ с значением default (по умолчанию None)
dict.update([other]) обновляет словарь, добавляя пары (ключ, значение) из other. Существующие ключи перезаписываются. Возвращает None
dict.values() возвращает значения в словаре

Циклы[править]

Цикл while и for[править]

Цикл while
While — один из самых универсальных циклов в Python, поэтому довольно медленный. Выполняет тело цикла до тех пор, пока условие цикла истинно:
a = 0
while a < 20:

   print (a)
a++

Результат: 0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19
Цикл for
Цикл for сложнее, менее универсальный, но выполняется гораздо быстрее цикла while. Этот цикл проходится по любому итерируемому объекту (например строке или списку), и во время каждого прохода выполняет тело цикла:
for i in ‘I love Python’:

   print (i * 3, end = '')

Результат: III lllooovvveee PPPyyyttthhhooonnn
Оператор break
Оператор break досрочно прерывает цикл:
for i in ‘I love Python’:

   if (i == 'e'):
break
print (i * 3, end = '')

Результат: III lllooovvv

Язык структурированных запросов SQL[править]

Работа с реляционной базой данных[править]

Создание таблиц[править]

Базовые таблицы создаются оператором CREATE TABLE:
CREATE TABLE <имя таблицы>(<список спецификаций столбцов и ограничений>);
Спецификация столбца включает имя поля и тип данных, которые могут находиться в этом столбце. Некоторые ограничения могут быть заданы не только отдельными спецификациями, но и в спецификации столбца. Примерами могут служить ограничения первичного и внешнего ключей, а также ограничение NOT NULL:
CREATE TABLE Pupil(FirstName varchar(15), Name varchar(10), Telephone integer);
Значение N указывает максимальное число символов, которое могут содержать данные в данном столбце. VARCHAR является переменным типом, это означает, что если мы зададим значение с числом символов меньше N, то записано на диск будет именно заданное количество символов. Альтернативой служит точный строковый тип CHAR; для него отсутствующие символы дополняются пробелами справа, т.е. на диск будет всегда записано N символов.
Если значение N не указано, то по умолчанию подразумевается 1, т.е. один символ.

Заполнение таблиц[править]

Как только таблица создана, в нее могут быть помещены данные с помощью оператора INSERT:
INSERT INTO Pupil VALUES (‘Петров’, ‘Николай’, 89995633244), (‘Михеева’, ‘Мария’, 89027856674)

Обновление и удаление данных[править]

Оператор UPDATE изменяет имеющиеся данные в таблице. Команда имеет вид:
UPDATE <Имя таблицы>
SET <Имя столбца> = <Выражение для вычисления значения столбца>
WHERE <Предикат>
С помощью одного оператора могут быть заданы значения для любого количества столбцов. Однако в одном и том же операторе UPDATE можно вносить изменения в каждый столбец указанной таблицы только один раз. При отсутствии предложения WHERE будут обновлены все строки таблицы.
Ссылка на «выражение для вычисления значения столбца» может относиться к текущим значениям в изменяемой таблице.
Удаление данных в таблице
Оператор DELETE удаляет строки из таблиц, представлений или курсоров, причем в двух последних случаях действие оператора распространяется на те базовые таблицы, из которых извлекались данные в эти представления или курсоры. Оператор удаления имеет простой синтаксис:
DELETE FROM <Имя таблицы>
WHERE <Предикат>;
Если предложение WHERE отсутствует, удаляются все строки из таблицы. Более быстро эту операцию (удаление всех строк из таблицы) можно в Transact-SQL также выполнить с помощью команды:
TRUNCATE TABLE <Имя таблицы>

Соединение таблиц[править]

Целостность базы данных: внешний ключ
Внешний ключ – это ограничение, которое поддерживает согласованное состояние данных между двумя таблицами, обеспечивая так называемую ссылочную целостность. Этот тип целостности означает, что всегда есть возможность получить полную информацию об объекте, распределенную по нескольким таблицам.
Связь между таблицами не является равноправной. В ней всегда есть главная таблица и таблица подчиненная. Связи бывают двух типов: «один к одному» и «один ко многим». Связь «один к одному» означает, что строке главной таблицы соответствует не более одной строки в подчиненной таблице. Связь «один ко многим» означает, что одной строке главной таблицы отвечает любое число строк в подчиненной таблице.
Связь устанавливается посредством равенства значений определенных столбцов в главной и подчиненной таблицах. При этом столбец в подчиненной таблице, который соотносится со столбцом в главной таблице, и называется внешним ключом.
Поскольку главная таблица всегда находится со стороны «один», то столбец, участвующий в связи по внешнему ключу, должен иметь ограничение PRIMARY KEY или UNIQUE. Внешний же ключ задается при создании или изменении структуры подчиненной таблицы при помощи спецификации FOREIGN KEY:
FOREIGN KEY(<Список столбцов 1>) REFERENCES <Имя главной таблицы>(<Список столбцов 2>)
Количество столбцов в списках 1 и 2 должно быть одинаковым, а типы данных этих столбцов должны быть совместимы.

Организация запросов[править]

Выборка данных[править]

Оператор SELECT
Оператор SELECT осуществляет выборку из базы данных и имеет наиболее сложную структуру среди всех операторов языка SQL. Практически любой пользователь баз данных в состоянии написать простейший оператор SELECT типа:
SELECT * FROM <Имя таблицы>
который осуществляет выборку всех записей из объекта БД табличного типа. При этом столбцы и строки результирующего набора не упорядочены.

Фильтрация данных[править]

Следует отметить, что вертикальная выборка может содержать дубликаты строк в том случае, если она не содержит потенциального ключа, однозначно определяющего запись. Если требуется получить только уникальные строки, то можно использовать ключевое слово DISTINCT:
SELECT DISTINCT <Имя столбца1>, <Имя столбца2>
FROM <Имя таблицы>;
Группировка данных
Чтобы упорядочить строки результирующего набора, можно выполнить сортировку по любому количеству полей, указанных в предложении SELECT. Для этого используется предложение ORDER BY список полей, являющееся всегда последним предложением в операторе SELECT. При этом в списке полей могут указываться как имена полей, так и их порядковые позиции в списке предложения SELECT:
SELECT DISTINCT <Имя столбца1>, <Имя столбца2>
FROM <Имя таблицы>
ORDER BY <Имя столбца2> DESC;
Сортировку можно проводить по возрастанию (ASC) или по убыванию (DESC).
Сортировку можно выполнять даже по столбцам, отсутствующим в списке SELECT. Естественно, эти столбцы должны присутствовать на выходе предложения FROM:
SELECT <Имя столбца1>
FROM <Имя таблицы>
ORDER BY <Имя столбца2> DESC;

Сложные запросы[править]

Синтаксис сложных запросов:
SELECT <Имя поля 1>, <Имя поля 2>, <Имя поля 3>, … FROM <Имя таблицы 1>, <Имя таблицы 1>, <Имя таблицы 3>, … WHERE <предикат 1>, <предикат 1>, <предикат 1>…

Создание и работа с информационной системой[править]

Библиотека SQLite[править]

SQLite – это автономный, работающий без сервера транзакционный механизм базы данных SQL. Будучи файловой базой данных, она предоставляет хороший набор инструментов для более простой (в сравнении с серверными базами данных) обработки данных. Когда приложение использует SQLite, их связь производится с помощью функциональных и прямых вызовов файлов, содержащих данные, а не какого-то интерфейса, что повышает скорость и производительность операций.
Объект–соединение, получаемый в результате успешного вызова функции connect(), должен иметь следующие методы:

  • close() — закрывает соединение с базой данных.
  • commit() — завершает транзакцию
  • rollback() — откатывает начатую транзакцию (восстанавливает исходное состояние). Закрытие соединения при незавершенной транзакции автоматически производит откат транзакции
  • cursor() — возвращает объект–курсор, использующий данное соединение. Если база данных не поддерживает курсоры, модуль сопряжения должен их имитировать.

Под транзакцией понимается группа из одной или нескольких операций, которые изменяют базу данных. Транзакция соответствует логически неделимой операции над базой данных, а частичное выполнение транзакции приводит к нарушению целостности БД. Например, при переводе денег с одного счета на другой операции по уменьшению первого счета и увеличению второго являются транзакцией. Методы commit() и rollback() обозначают начало и конец транзакции в явном виде. Кстати, не все базы данных поддерживают механизм транзакций.
Следует отметить, что в зависимости от реализации DB–API 2.0 модуля, необходимо сохранять ссылку на объект–соединение в продолжение работы курсоров этого соединения. В частности, это означает, что нельзя сразу же получать объект–курсор, не привязывая объект–соединение к некоторому имени. Также нельзя оставлять объект–соединение в локальной переменной, возвращая из функции или метода объект–курсор.
Объект–курсор
Курсор (от англ. cursor — CURrrent Set Of Records, текущий набор записей) служит для работы с результатом запроса. Результатом запроса обычно является одна или несколько прямоугольных таблиц со столбцами–полями и строками–записями. Приложение может читать и обрабатывать полученные таблицы и записи в таблице по одной, поэтому в курсоре хранится информация о текущей таблице и записи. Конкретный курсор в любой момент времени связан с выполнением одной SQL–инструкции.
Атрибуты объекта–курсора тоже определены DB–API:

  • arraysize — атрибут, равный количеству записей, возвращаемых методом fetchmany(). По умолчанию равен 1
  • callproc(procname[, params]) — вызывает хранимую процедуру procname с параметрами из изменчивой последовательности params. Хранимая процедура может изменить значения некоторых параметров последовательности. Метод может возвратить результат, доступ к которому осуществляется через fetch–методы
  • close() — закрывает объект–курсор
  • description — этот доступный только для чтения атрибут является последовательностью из семиэлементных последовательностей. Каждая из этих последовательностей содержит информацию, описывающую один столбец результата:

(name, type_code, display_size, internal_size, precision, scale, null_ok) Первые два элемента (имя и тип) обязательны, а вместо остальных (размер для вывода, внутренний размер, точность, масштаб, возможность задания пустого значения) может быть значение None. Этот атрибут может быть равным None для операций, не возвращающих значения

  • execute(operation[, parameters]) — исполняет запрос к базе данных или команду СУБД. Параметры (parameters) могут быть представлены в принятой в базе данных нотации в соответствии с атрибутом paramstyle
  • executemany(operation, seq_of_parameters) — выполняет серию запросов или команд, подставляя параметры в заданный шаблон. Параметр seq_of_parameters задает последовательность наборов параметров
  • fetchall() — возвращает все (или все оставшиеся) записи результата запроса
  • fetchmany([size]) — возвращает следующие несколько записей из результатов запроса в виде последовательности последовательностей. Пустая последовательность означает отсутствие данных. Необязательный параметр size указывает количество возвращаемых записей (реально возвращаемых записей может быть меньше). По умолчанию size равен атрибуту arraysize объекта–курсора
  • fetchone() — возвращает следующую запись (в виде последовательности) из результата запроса или None при отсутствии данных
  • nextset() — переводит курсор к началу следующего набора данных, полученного в результате запроса (при этом часть записей в предыдущем наборе может остаться непрочитанной). Если наборов больше нет, возвращает None. Не все базы данных поддерживают возврат нескольких наборов результатов за одну операцию
  • rowcount — количество записей, полученных или затронутых в результате выполнения последнего запроса. В случае отсутствия execute–запросов или невозможности указать количество записей равен –1
  • setinputsizes(sizes) — предопределяет области памяти для параметров, используемых в операциях. Аргумент sizes задает последовательность, где каждый элемент соответствует одному входному параметру. Элемент может быть объектом–типом соответствующего параметра или целым числом, задающим длину строки. Он также может иметь значение None, если о размере входного параметра ничего нельзя сказать заранее или он предполагается очень большим. Метод должен быть вызван до execute–методов
  • setoutputsize(size[, column]) — устанавливает размер буфера для выходного параметра из столбца с номером column. Если column не задан, метод устанавливает размер для всех больших выходных параметров. Может использоваться, например, для получения больших бинарных объектов (Binary Large Object, BLOB)

Объекты–типы
DB–API 2.0 предусматривает названия для объектов–типов, используемых для описания полей базы данных:

Объект Тип
TEXT Строка и символ
INTEGER Целое число
REAL Вещественное число
DATETIME Дата и время
None NULL–значение (отсутствующее значение)

Схематично работа с базой данных может выглядеть примерно так:
Подключение к базе данных (вызов connect() с получением объекта–соединения).
Создание одного или нескольких курсоров (вызов метода объекта–соединения cursor() с получением объекта–курсора).
Исполнение команды или запроса (вызов метода execute() или его вариантов).
Получение результатов запроса (вызов метода fetchone() или его вариантов).
Завершение транзакции или ее откат (вызов метода объекта–соединения commit() или rollback()).
Когда все необходимые транзакции произведены, подключение закрывается вызовом метода close() объекта–соединения.

Графическая библиотека Tkinter[править]

Кнопки. Метки. Текстовое поле[править]

Button (кнопка)
Самыми важными свойствами виджета класса Button являются text, с помощью которого устанавливается надпись на кнопке, и command для установки действия, то есть того, что будет происходить при нажатии на кнопку. По умолчанию размер кнопки соответствует ширине и высоте текста, однако с помощью свойств width и height эти параметры можно изменить. Cвойства как bg, fg, activebackground и activeforeground определяют соответственно цвет фона и текста, цвет фона и текста во время нажатия.
Label (метка)
Виджет Label просто отображает текст в окне и служит в основном для информационных целей. Свойства метки во многом схожи как и у кнопки. Клик по метке не обрабатывается Tkinter.
Значение шрифта можно передать как строку или как кортеж. Второй вариант удобен, если имя шрифта состоит из двух и более слов. После названия шрифта можно указать размер и стиль.
Entry (однострочное текстовое поле)
Текстовые поля предназначены для ввода информации пользователем. Нередко также для вывода, если предполагается, что текст из них будет скопирован. Текстовые поля как элементы графического интерфейса бывают однострочными и многострочными.
Свойства экземпляров Entry во многом схожи с двумя предыдущими виджетами. А вот методы – нет. Из текстового поля можно взять текст. За это действие отвечает метод get(). В текстовое поле можно вставить текст методом insert(). Также можно удалить текст методом delete().
Метод insert() принимает позицию, в которую надо вставлять текст, и сам текст.
Метод delete() принимает один или два аргумента. В первом случае удаляется один символ в указанной позиции. Во втором – срез между двумя указанными индексами, не включая последний. Если нужно полностью очистить поле, то первым аргументом должен быть 0, вторым – END.
Text (многострочное текстовое поле)
В tkinter многострочное текстовое поле создается от класса Text. По умолчанию его размер равен 80-ти знакоместам по горизонтали и 24-м по вертикали.
Однако эти свойства можно изменять с помощью опций width и height. Есть возможность конфигурировать шрифт, цвета и другое.
Text и Scrollbar (полоса прокрутки)
Если в текстовое поле вводится больше линий текста, чем его высота, то оно само будет прокручиваться вниз. При просмотре прокручивать вверх-вниз можно с помощью колеса мыши и стрелками на клавиатуре. Однако бывает удобнее пользоваться скроллером – полосой прокрутки.
В tkinter скроллеры производятся от класса Scrollbar. Объект-скроллер связывают с виджетом, которому он требуется. Это не обязательно многострочное текстовое поле. Часто полосы прокрутки бывают нужны спискам.
Основные методы у Text такие же как у Entry – get(), insert(), delete(). Однако, если в случае однострочного текстового поля было достаточно указать один индекс элемента при вставке или удалении, то в случае многострочного надо указывать два – номер строки и номер символа в этой строке (другими словами, номер столбца). При этом нумерация строк начинается с единицы, а столбцов – с нуля.

Фрейм. Менеджеры геометрии[править]

Frame (фрейм)
Виджет Frame очень важен для процесса группировки и организации других виджетов каким-то дружественным способом. Он работает как контейнер, который отвечает за расположение других виджетов.
Он использует прямоугольные области на экране, чтобы организовать макет и обеспечить заполнение этих виджетов. Фрейм также можно использовать как базовый класс для реализации сложных виджетов.
Вот простой синтаксис для создания этого виджета:
fr = Frame(Master, Option, …)

  • master — представляет родительское окно
  • Параметры — вот список наиболее часто используемых параметров для этого виджета. Эти параметры можно использовать как пары ключ-значение, разделенные запятыми.

Дополнительные параметры:

Параметр Описание
bg Нормальный цвет фона отображается за меткой и индикатором
bd Размер границы вокруг индикатора. По умолчанию 2 пикселя
cursor Если вы установите для этой опции имя курсора ( стрелка, точка и т. д. ), Курсор мыши изменится на этот шаблон, когда он находится над кнопкой
height Вертикальный размер нового кадра
highlightbackground Цвет фокуса выделяется, когда рамка не имеет фокуса
highlightcolor Цвет, показанный в фокусе, выделяется, когда рамка имеет фокус
highlightthickness Толщина фокуса подсветка
relief При значении по умолчанию рельеф = FLAT кнопка выбора не выделяется на фоне. Вы можете установить эту опцию на любой другой стиль
width Ширина кнопки по умолчанию определяется размером отображаемого изображения или текста. Вы можете установить эту опцию на количество символов, и кнопка-флажок всегда будет иметь место для такого количества символов

Метод pack
В Tkinter существует три менеджера геометрии – упаковщик, сетка и размещение по координатам. В этом уроке будет рассмотрен первый как наиболее простой и часто используемый.
Упаковщик (packer) вызывается методом pack(), который имеется у всех виджетов-объектов. Мы уже использовали его. Если к элементу интерфейса не применить какой-либо из менеджеров геометрии, то он не отобразится в окне. При этом в одном окне нельзя комбинировать разные менеджеры. Если вы начали размещать виджеты методом pack(), то не надо тут же использовать методы grid() (сетка) и place() (место).
Если в упаковщики не передавать аргументы, то виджеты будут располагаться вертикально, друг над другом. Тот объект, который первым вызовет pack(), будет вверху. Который вторым – под первым, и так далее.
У метода pack() есть параметр side (сторона), который принимает одно из четырех значений-констант tkinter – TOP, BOTTOM, LEFT, RIGHT (верх, низ, лево, право). По умолчанию, когда в pack() не указывается side, его значение равняется TOP. Из-за этого виджеты располагаются вертикально.
Метод grid
Табличный способ размещения предпочтителен из-за его гибкости и удобства, когда дело доходит до разработки относительно сложных интерфейсов. Grid позволяет избежать использования множества фреймов, что неизбежно в случае упаковщика Pack.
При размещении виджетов методом grid() родительский контейнер условно разделяется на ячейки подобно таблице. Адрес каждой ячейки состоит из номера строки и номера столбца. Нумерация начинается с нуля. Ячейки можно объединять как по вертикали, так и по горизонтали.
Размещение виджета в той или иной ячейке задается через аргументы row и column, которым присваиваются соответственно номера строки и столбца. Чтобы объединить ячейки по горизонтали, используется атрибут columnspan, которому присваивается количество объединяемых ячеек. Опция rowspan объединяет ячейки по вертикали.
В этом методе есть атрибут sticky (липкий), который принимает значения направлений сторон света (N, S, W, E, NW, NE, SW, SE). Если, например, указать NW, то виджет прибьет к верхнему левому углу ячейки. Виджеты можно растягивать на весь объем ячейки (sticky=N+S+W+E) или только по одной из осей (N+S или W+E). Эффект от «липучки» заметен, только если виджет меньше ячейки.

Работа с методом bind[править]

Метод bind
Метод bind привязывает событие к какому-либо действию (нажатие кнопки мыши, нажатие клавиши на клавиатуре и т.д.). bind принимает три аргумента:

  • название события
  • функцию, которая будет вызвана при наступлении события
  • третий аргумент (необязательный) — строка «+» — означает, что эта привязка добавляется к уже существующим. Если третий аргумент опущен или равен пустой строке — привязка замещает все другие привязки данного события к виджету.

Метод bind возвращает идентификатор привязки, который может быть использован в функции unbind.
Функция, которая вызывается при наступлении события, должна принимать один аргумент. Это объект класса Event, в котором описано наступившее событие. Объект класса Event имеет следующие атрибуты:

Артибут Описание
serial серийный номер события (все события)
num номер кнопки мыши (ButtonPress, ButtonRelease)
focus имеет ли окно фокус (Enter, Leave)
height и width ширина и высота окна (Configure, Expose)
keycode код нажатой клавиши (KeyPress, KeyRelease)
state состояние события (для ButtonPress, ButtonRelease, Enter, KeyPress, КeyRelease, Leave, Motion — в виде числа; для Visibility — в виде строки)
time время наступления события (все события)
x и y координаты мыши
x_root и y_root координаты мыши на экране (ButtonPress, ButtonRelease, KeyPress, KeyRelease, Motion
char набранный на клавиатуре символ (KeyPress, KeyRelease)
keysym набранный на клавиатуре символ (KeyPress, KeyRelease)
keysym_num набранный на клавиатуре символ в виде числа (KeyPress, KeyRelease)
type тип события в виде числа (все события)
widget виджет, который получил событие (все события)
delta изменение при вращении колеса мыши (MouseWheel)

Эта функция может возвращать строки «continue» и «break». Если функция возвращает «continue» то Tkinter продолжит обработку других привязок этого события, если «break» — обработка этого события прекращается. Если функция ничего не возвращает (если возвращает None), то обработка событий продолжается.

Глоссарий[править]

Аргументы функции — это конкретные значения, которые передаются в функцию при ее вызове.

Ветвление в программировании (оператор ветвления) — конструкция языка программирования, позволяющая выполнить команду или набор команд в случае, если какое-либо логическое выражение истино. Если необходимо выбрать одну из нескольких команд этот оператор обеспечивает выполнение одной из этих команд или набора команд в зависимости от истинности логического выражения.

Выборка данных — выбор данных из таблиц по заданному критерию.

Глобальные переменные — это переменная, которая доступна в любом месте программы, то есть ее область видимости — вся программа, за исключением намеренно закрытых областей.

Кнопка — виртуальная кнопка, созданная при помощи языка программирования, нажатие которой обеспечивает выполнение какой-либо заданной операции. Если выполнение операции на кнопку не задано, то клик по кнопке не обрабатывается.

Кортеж — это определенная последовательность неизменяемых объектов. Кортежи отличаются от списков тем, что элементы в нем нельзя изменять.

Логическое выражение — конструкция языка программирования, которая возвращает в качестве результата значение «истина» или «ложь».

Логические операторы — это операторы, принимающие в качестве аргументов логические значения (ложь или истина), результатом выполнения которых является так же логическое выражение.

Локальные переменные — это переменная, которая доступна только в определенном блоке кода. Область видимости этой переменной начинается в моменте ее объявления и завершается в конце этого блока.

Метка — виджет, отображающий текст в окне и служит в основном для информационных целей. Клик по метке не обрабатывается.

Метод Bind — метод графической библиотеки python, который позволяет связать между собой виджет, событие и действие.

Параметры функции — локальные переменные, которым присваивают значение в момент вызова функции. Параметры указываются в заголовке функции в скобках.

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

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

Списки в Python — это структура для хранения объектов различных типов, размер которой можно изменять.

Таблица информационной системы — основной тип структуры данных (объект) реляционной модели.

Текстовое поле — виджет, отображающийся как пустое поле для ввода информации пользователем.

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

Упаковщик в Python — менеджер геометрии (расположения) в Python, специальный механизм, позволяющий расположить виджеты на окне.

Фрейм (рамка) — вспомогательный виджет, предназначенный для расположения всех виджетов на панели. Фреймы располагают на главном окне, а остальные виджеты — в фрейме.

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

Цикл while — цикл с постусловием, то есть условие цикла проверяется только после выполнения тела цикла. В таком цикле тело цикла выполняется хотя бы один раз.

Понравилась статья? Поделить с друзьями:
  • Сосновоборский городской суд ленинградской области официальный сайт госпошлина реквизиты
  • Сотрудник компании причинил ущерб третьим лицам когда за это расплачивается работодатель
  • Социально ответственные инициативы бизнеса имеют глубокие традиции в российской культуре
  • Спам который имеет цель опорочить ту или иную фирму компанию политического кандидата это
  • Спам который распространяет поддельные сообщения от имени банков или финансовых компаний