text = '''Что это? я падаю! у меня ноги подкашиваются» , — 
подумал он и упал на спину. Он раскрыл глаза, надеясь увидать, 
чем кончилась борьба французов с артиллеристами, и желая знать, 
убит или нет рыжий артиллерист, взяты или спасены пушки. Но он 
ничего не видал. Над ним не было ничего уже, кроме неба, — высокого 
eнеба, не ясного, но все-таки неизмеримо высокого, с тихо ползущими 
по нем серыми облаками. «Как тихо, спокойно и торжественно, совсем 
не так, как я бежал, — подумал князь Андрей, — не так, как мы бежали, 
кричали и дрались; совсем не так, как с озлобленными и испуганными 
лицами тащили друг у друга банник француз и артиллерист, — совсем не 
так ползут облака по этому высокому бесконечному небу. Как же я не 
видал прежде этого высокого неба? И как я счастлив, что узнал его 
наконец. Да! все пустое, все обман, кроме этого бесконечного неба. 
Ничего, ничего нет, кроме его. Но и того даже нет, ничего нет, кроме 
тишины, успокоения. И слава Богу!.. »'''

# text = text.lower()

# for_del = [',', '.', '!', '?', '"', '»', '«', '—', ';']
# for sign in for_del:
#     text = text.replace(sign, '')

# words_dict = {}
# words_lst = text.split()
# # print(words_lst)
# for word in words_lst:
#     if word in words_dict:
#         words_dict[word] += 1
#     else:
#         words_dict[word] = 1

# for key in words_dict:
#     print(key, words_dict[key])

# def update_dict(d, key, value):
#     if key in d:
#         d[key] += value
#     elif 2*key in d:
#         d[2*key] += value
#     else:
#         d[2*key] = value

# dictionary = {
#     1: 3,
#     4: 6
# }
# update_dict(dictionary, 9, 1)
# print(dictionary)
# update_dict(dictionary, 9, 2)
# print(dictionary)

'''
ООП - объектно-ориентированное программирование

класс - шаблон, в котором находится описание того, что будет в 
    объекте (поля) и то, что будет уметь делать объект (методы)

объект - экземпляр класса (что-то обособленное с конкретными полями)
'''

# синтаксис создания класса
class Human:
    # конструктор класса (вызывается во время создания объекта)
    # self - пустой объект класса, у которого мы указываем параметры
    def __init__(self, name='nameless', age=0, height=0):
        self.name = name
        self.age = age
        self.height = height

    # метод класса.
    # self - объект перед точкой
    def say_hi(self):
        print(f'{self.name} говорит "привет"')

    # метод, который форматирует то, как выводится объект
    def __repr__(self):
        return f'<Human {self.name} {self.age} {self.height}>'

# создание объекта класса:
h1 = Human(name='John2', height=90)
# все поля объекта доступны через точку
# h1.name = 'John'
# h1.age = 12
# h1.height = 159
print(h1.name, h1.age, h1.height)

h2 = Human('Bob')
print(h2.name, h2.age, h2.height)

h3 = Human('Alice')
print(h3.name, h3.age, h3.height)

h1.say_hi()
h2.say_hi()

print(h1)
print(h2)
print(h3)
# то, что написано после return, подставляется на место вызова функции
'''
задание 1:
создать класс Car
у класса будет 4 поля
и 3 метода

создать 3 объекта класса Car и вызвать у них эти методы 
(должны получить разный результат)
'''
