Пример работы с данными, представляющими собой таблицу базы данных

Программа загружает данные из файла такого формата, где первое поле - это уникальный ключ:

pr.v|Vasil Vas|30.11.1976|34.5|8
mg.s|Kosin Stepa|08.03.1973|40.1|7
el.p|Pier Pety|16.07.1985|30.8|8

 

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

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

В конце данные можно записать в файл.

Пример наследования и композиции в ООП

стр. 641-644

Первый файл содержит только элементы наследования, второй - содержит класс-конструктор. Объекты, созданные из класса конструктора, состоят из других объетов, созданных на основе других классов. Так в примере ниже объект-сцена имеет в своем составе "клиента", "официанта", "повара" и "печь".

Теги

Перехват обращений к атрибутам

class Getat:
    def __getattr__ (self, attrname):
        print ("No this attr")
    def __setattr__ (self, attr, value):
        self.__dict__[attr + '_usr'] = value
 
x = Getat()
x.name
x.age
 
x.name = "Max"
x.age = 21
 
print(x.__dict__)
print(x.name_usr, x.age_usr)

 

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

__setattr__ обрабатывает присваивание значений несуществующим до этого момента атрибутам.

Результа скрипта:

Теги

Пример создания класса, объекты которого можно складывать и умножать

### Идея такова:
###    создается объект класса Num2nums
###    его свойству value устанавливается числовое значение
###    методы summa и multi складывают и умножают цифры числа
###    при этом используют скрытые методы _sum и _mult
###    методы __add__ и __mul__ позволяют участвовать объектам в операциях сложения и умножения
 
class Num2nums():
    def _sum (a):
        b = 0
        while a > 0:
            b = b + a % 10
            a = a // 10
        return b
    def _mult (a):
        b = 1
        while a > 0:
            b = b * (a % 10)
    

Теги

Простые примеры создания классов, подклассов и переопределения операторов

class First():
    def setdata(self,string):
        self.name = string
    def display(self):
        print(self.name)
 
class Second(First):
    def display(self):
        print("Current value: %s" % self.name)
 
class Third(Second):
    def __init__(self,value):
        self.name = value
    def __add__(self,other):
        self.name = self.name + other # не создается новый объект
    def __mul__(self,n):
        self.name = self.name * n
 
class Fourth(Third):
    def __add__(self,other):
        return Fourth(self.name + other) # создается новый объект

Теги

Попытка сделать неравновероятный генератор случайных чисел

 

Идея заключается в следующем:

  1. Весь диапазон чисел (от минимального до максимального значения) делится на случайное количество диапазонов, например, 7.
  2. Далее случайным образом определяется количество чисел, входящих в каждый диапазон.
  3. Числа генерируются, и переходим к следующему интервалу.

Проблема.

Сортировка словаря

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

Однако при выводе только ключей или пар "ключ:значение" бывает важно, чтобы ключи шли по порядку. Решить проблему можно путем использования дополнительной упорядоченной структуры, - в данном случае, списка.

Алгоритм сортировки вывода содержимого словаря сводится к следующему: