Skip to content

Master #1

New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Open
wants to merge 133 commits into
base: develop
Choose a base branch
from
Open
Changes from all commits
Commits
Show all changes
133 commits
Select commit Hold shift + click to select a range
0e8e82d
вторая ветка c ребенком
May 3, 2020
57e713c
Merge branch 'develop'
May 6, 2020
57b386e
Урок 8. Зачет
mlyundin May 6, 2020
4456643
Add lesson
skillbox-tech May 6, 2020
7c91f98
10 модуль 1 задание
May 6, 2020
c24ede0
10 модуль 2 задание
May 6, 2020
42e34b3
10 модуль 3 задание
May 6, 2020
82aacc5
Урок 10. Нужно поправить
mlyundin May 7, 2020
be2f57e
9 модуль 2 задание
May 9, 2020
8b040ea
9 модуль 3 задание
May 12, 2020
2ab4b6c
10 модуль 2 задание
May 13, 2020
8e09eb5
lesson_009 - есть замечания
May 13, 2020
a3e74e1
10 модуль 3 задание
May 13, 2020
b43a46c
Merge remote-tracking branch 'origin/master'
May 13, 2020
326506a
9 модуль 3 задание
May 13, 2020
87c56bf
9 модуль 1 задание
May 13, 2020
bcc7b1c
9 модуль 2 задание
May 14, 2020
b6c67e9
lesson_009 - продолжаем работу в 01 и 02
May 14, 2020
4cd24ae
lesson_010 - нужно еще поработать над 02 и 03
May 14, 2020
6aaa169
9 модуль 2 задание
May 15, 2020
9f7410b
9 модуль 3 задание
May 15, 2020
cbbb8f3
lesson_010 - доделываем 02 и 03
May 16, 2020
34de82e
10 модуль 3 задание
May 20, 2020
8aa897a
10 модуль 2 задание
May 20, 2020
87d8bac
lesson_010 - зачет
May 21, 2020
0b27838
9 модуль 1 задание
May 23, 2020
3e2251d
модуль 9 2 задание
May 30, 2020
7dc455f
lesson_009 - подсказки в 01 и 02
May 31, 2020
1ee69c6
модуль 9 1 задание
Jun 3, 2020
d963046
модуль 9 2 задание
Jun 3, 2020
9459ba6
Add lesson
skillbox-tech Jun 5, 2020
ad6be48
Review lesson 9
Jun 5, 2020
087e42b
модуль 9 2 задание
Jun 8, 2020
6e2490f
модуль 9 1 задание
Jun 8, 2020
4e9e5d9
Review lesson 9
Jun 9, 2020
6d44391
модуль 9 1 задание
Jun 9, 2020
ef483fb
модуль 9 2 задание
Jun 9, 2020
347c001
Lesson 9 ok
Jun 10, 2020
b168540
11.2
Jun 15, 2020
c7e7998
11.2
Nov 6, 2020
340fafb
11.3
Nov 7, 2020
d058934
Add lesson
skillbox-tech Nov 7, 2020
bd28cca
Merge remote-tracking branch 'origin/master'
Nov 7, 2020
23ae992
11.1
Nov 9, 2020
c223709
11.4
Nov 9, 2020
905d9fe
Lesson 011 01 - Corrected
Nov 10, 2020
3d0c08e
Lesson 011 02 - Corrected
Nov 10, 2020
01cf0c6
Lesson 011 03 - Completed
Nov 10, 2020
54cf404
Lesson 011 04 - Corrected
Nov 10, 2020
4355e13
11.1
Nov 10, 2020
9a1a8e6
11.4
Nov 11, 2020
413fddd
11.2
Nov 11, 2020
1911901
Lesson 011 04 - Corrected
Nov 12, 2020
d13d599
Lesson 011 02 - Corrected
Nov 12, 2020
245d84a
Lesson 011 01 - Corrected
Nov 12, 2020
11d9299
11.2
Nov 12, 2020
0a8be76
11.4
Nov 12, 2020
83aa1bf
11.1
Nov 12, 2020
96d6e60
Lesson 011 01 - Completed
Nov 13, 2020
5586680
Lesson 011 04 - Completed
Nov 13, 2020
1a8acc8
Lesson 011 02 - Corrected
Nov 13, 2020
d8f54cc
11.2
Nov 13, 2020
e169caf
Lesson 011 02 - Corrected
Nov 14, 2020
8c07630
11.2
Nov 14, 2020
5e09235
Lesson 011 02 - Corrected
Nov 15, 2020
e02da54
11.2
Nov 15, 2020
2290cf3
Lesson 011 02 - Corrected
Nov 16, 2020
9cdffb1
11.2
Nov 17, 2020
53dfb41
Lesson 011 02 - Completed
Nov 17, 2020
290a6dc
Add lesson
skillbox-tech Nov 18, 2020
0a8d22e
13.1
Nov 18, 2020
5dea13a
Lesson 013 01 - Corrected
Nov 18, 2020
bac4c4d
13.2
Nov 19, 2020
74f2eaa
12.1
Nov 19, 2020
af31719
Lesson 012 01 - Corrected
Nov 20, 2020
7d68e39
12.1
Nov 20, 2020
8602cc4
requirements added
Nov 20, 2020
fa9b28e
requirements added
Nov 21, 2020
7285f7f
Lesson 012 01 - Corrected
Nov 21, 2020
cfb897a
requirements,gitignore, settings default для чат бота
Nov 22, 2020
4d7fb6e
Add lesson
skillbox-tech Nov 22, 2020
b79d59f
бот и боулинг
Nov 25, 2020
195f05e
Lesson 014 01 - Corrected
Nov 25, 2020
d2e6501
исправления
Nov 25, 2020
74fe15e
исправления
Nov 26, 2020
f400bc3
Lesson 012 01 - Corrected
Nov 27, 2020
9aa43ae
Lesson 014 01 - Corrected
Nov 27, 2020
ae5e2f3
исправления
Nov 27, 2020
5fb9143
Lesson 014 01 - Corrected
Nov 27, 2020
ee8dd7e
исправления
Nov 27, 2020
a0303ac
Lesson 014 01 - Completed
Nov 28, 2020
848c754
Lesson 012 01 - Completed
Nov 28, 2020
40c6b84
12.2 задание
Nov 28, 2020
a54798c
Lesson 012 02 - Corrected
Nov 28, 2020
1fc83a0
исправления
Nov 30, 2020
57e0a0e
Lesson 012 02 - Completed
Nov 30, 2020
397d99a
бот
Nov 30, 2020
75a14e9
Lesson 012 03 - Corrected
Nov 30, 2020
fe08ed7
исправления 12.3
Dec 1, 2020
91c65c7
боулинг с методом состояние
Dec 1, 2020
6a7c6b6
Lesson 012 03 - Corrected
Dec 2, 2020
8d75b8d
бот
Dec 2, 2020
6d98666
Lesson 012 03 - Corrected
Dec 2, 2020
7ce4d7d
Lesson 014 01 - Corrected
Dec 2, 2020
37028bb
12.3
Dec 2, 2020
8085b3f
Lesson 012 03 - Completed
Dec 2, 2020
c5e38f3
Add lesson
skillbox-tech Dec 2, 2020
7a1e2fb
боулинг реализация state
Dec 4, 2020
ec505f1
боулинг
Dec 4, 2020
d97b721
Lesson 014 01 - Corrected
Dec 5, 2020
22e9f51
bowling
Dec 5, 2020
059e1d5
Lesson 014 01 - Corrected
Dec 6, 2020
bf3536b
вопросы по боту и подземелью
Dec 6, 2020
7d55a50
Lesson 015 01 - Corrected
Dec 7, 2020
a8e2192
14
Dec 7, 2020
2be5973
Lesson 014 01 - Corrected
Dec 8, 2020
4b2e8a0
14
Dec 8, 2020
da3bddd
Lesson 014 01 - Corrected
Dec 9, 2020
26b48c5
15.1
Dec 13, 2020
7dfabd9
Lesson 015 01 - Corrected
Dec 14, 2020
f4f1288
бот
Dec 14, 2020
0b3043c
Lesson 014 02 - Add part
Dec 15, 2020
a1e9814
Lesson 014 01 - Completed
Dec 15, 2020
3e4120b
14.2
Dec 15, 2020
4b5989d
Lesson 014 02 - Corrected
Dec 16, 2020
acf75c1
таблица
Dec 16, 2020
1cea9d8
Lesson 014 02 - Completed
Dec 16, 2020
7d7f47f
Lesson 014 03 - Add part
Dec 16, 2020
0608c1b
14.3
Dec 16, 2020
2433288
Lesson 014 03 - Completed
Dec 17, 2020
79bf8f7
Add lesson
skillbox-tech Dec 17, 2020
71f1455
15 дз
Jan 21, 2021
f9742f1
Lesson 015 01 - Corrected
Jan 22, 2021
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
5 changes: 5 additions & 0 deletions chat_bot/.gitignore
Original file line number Diff line number Diff line change
@@ -0,0 +1,5 @@
.idea
14modulbot/settings.py
__pycache__
venv
*.log
42 changes: 42 additions & 0 deletions chat_bot/chat_bot.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,42 @@
#!/usr/bin/env python3

import random

from key import token
import vk_api
import vk_api.bot_longpoll

group_id = 200421873

class Bot:
def __init__(self, group_id, token):
self.group_id = group_id
self.token = token
self.vk = vk_api.VkApi(token = token)
self.long_poller = vk_api.bot_longpoll.VkBotLongPoll(self.vk, self.group_id)
self.api = self.vk.get_api()

def run(self):
for event in self.long_poller.listen():
try:
self.on_event(event)
except Exception as err:
print(err)

def on_event(self, event):
if event.type == vk_api.bot_longpoll.VkBotEventType.MESSAGE_NEW:
self.api.messages.send(
message=event.object.text,
random_id=random.randint(0,2**20),
peer_id=event.object.peer_id,
)
print(event.object.text)

else:
print('мы пока не умеем обрабатывать событие такого типа', event.type)



if __name__ == "__main__":
bot = Bot(group_id, token)
bot.run()
59 changes: 59 additions & 0 deletions chat_bot/requirements.txt
Original file line number Diff line number Diff line change
@@ -0,0 +1,59 @@
appnope==0.1.0
asgiref==3.2.10
attrs==19.3.0
backcall==0.1.0
bleach==3.1.1
certifi==2020.11.8
chardet==3.0.4
decorator==4.4.1
defusedxml==0.6.0
Django==3.1.2
entrypoints==0.3
idna==2.10
importlib-metadata==1.5.0
ipykernel==5.1.4
ipython==7.12.0
ipython-genutils==0.2.0
ipywidgets==7.5.1
jedi==0.16.0
Jinja2==2.11.1
jsonschema==3.2.0
jupyter==1.0.0
jupyter-client==5.3.4
jupyter-console==6.1.0
jupyter-core==4.6.3
MarkupSafe==1.1.1
mistune==0.8.4
nbconvert==5.6.1
nbformat==5.0.4
notebook==6.0.3
pandocfilters==1.4.2
parso==0.6.1
pexpect==4.8.0
pickleshare==0.7.5
prometheus-client==0.7.1
prompt-toolkit==3.0.3
ptyprocess==0.6.0
pygame==1.9.6
Pygments==2.5.2
pyrsistent==0.15.7
python-dateutil==2.8.1
pytz==2020.1
pyzmq==18.1.1
qtconsole==4.6.0
requests==2.25.0
Send2Trash==1.5.0
simple-draw==2.6.6
six==1.14.0
sqlparse==0.4.1
termcolor==1.1.0
terminado==0.8.3
testpath==0.4.4
tornado==6.0.3
traitlets==4.3.3
urllib3==1.26.2
vk-api==11.9.0
wcwidth==0.1.8
webencodings==0.5.1
widgetsnbextension==3.5.1
zipp==3.0.0
2 changes: 2 additions & 0 deletions chat_bot/settings.py.default
Original file line number Diff line number Diff line change
@@ -0,0 +1,2 @@
GROUP_ID = ''
TOKEN = ''
69 changes: 31 additions & 38 deletions lesson_008/01_family.py
Original file line number Diff line number Diff line change
@@ -188,7 +188,6 @@ def cat_shopping(self):
print('{} деньги кончились!'.format(self.name))
self.fullness -= 10


# home = House()
# serge = Husband(name='Сережа', sweet_home=home)
# masha = Wife(name='Маша', sweet_home=home)
@@ -286,25 +285,40 @@ def soil(self):
# отличия от взрослых - кушает максимум 10 единиц еды,
# степень счастья - не меняется, всегда ==100 ;)

class Child:

def __init__(self):
pass
class Child(Human):

def __str__(self):
return super().__str__()
def __init__(self, name, sweet_home):
self.name = name
self.fullness = 30
self.sanity = 100
self.house = sweet_home

def act(self):
pass
if self.fullness <= 0:
print('{} умер...'.format(self.name))
return
dice = randint(1, 2)
if self.fullness <= 30:
self.eat()
elif dice == 1:
self.eat()
elif dice == 2:
self.sleep()

def eat(self):
pass
if self.house.man_food >= 10:
print('{} поел'.format(self.name))
self.fullness += 10
self.house.man_food -= 10
self.all_eat += 10
else:
print('{} нет еды'.format(self.name))
self.fullness -= 10

def sleep(self):
pass



print('{} лег спать'.format(self.name))
self.fullness -= 10


######################################################## Часть третья
@@ -317,40 +331,19 @@ def sleep(self):
home = House()
serge = Husband(name='Сережа', sweet_home=home)
masha = Wife(name='Маша', sweet_home=home)
# kolya = Child(name='Коля')
kolya = Child(name='Коля', sweet_home=home)
murzik = Cat(name='Мурзик', sweet_home=home)

for day in range(365):
cprint('================== День {} =================='.format(day), color='red')
serge.act()
masha.act()
# kolya.act()
murzik.act()
kolya.act()
home.act()
murzik.act()
cprint(serge, color='cyan')
cprint(masha, color='cyan')
# cprint(kolya, color='cyan')
cprint(kolya, color='cyan')
cprint(murzik, color='cyan')
cprint(home, color='cyan')

# Усложненное задание (делать по желанию)
#
# Сделать из семьи любителей котов - пусть котов будет 3, или даже 5-10.
# Коты должны выжить вместе с семьей!
#
# Определить максимальное число котов, которое может прокормить эта семья при значениях зарплаты от 50 до 400.
# Для сглаживание случайностей моделирование за год делать 3 раза, если 2 из 3х выжили - считаем что выжили.
#
# Дополнительно вносить некий хаос в жизнь семьи
# - N раз в год вдруг пропадает половина еды из холодильника (коты?)
# - K раз в год пропадает половина денег из тумбочки (муж? жена? коты?!?!)
# Промоделировать - как часто могут случаться фейлы что бы это не повлияло на жизнь героев?
# (N от 1 до 5, K от 1 до 5 - нужно вычислит максимумы N и K при котором семья гарантированно выживает)
#
# в итоге должен получится приблизительно такой код экспериментов
# for food_incidents in range(6):
# for money_incidents in range(6):
# life = Simulation(money_incidents, food_incidents)
# for salary in range(50, 401, 50):
# max_cats = life.experiment(salary)
# print(f'При зарплате {salary} максимально можно прокормить {max_cats} котов')
# зачет!
138 changes: 137 additions & 1 deletion lesson_009/01_char_stat.py
Original file line number Diff line number Diff line change
@@ -21,7 +21,141 @@
# Упорядочивание по частоте - по убыванию. Ширину таблицы подберите по своему вкусу
# Требования к коду: он должен быть готовым к расширению функциональности. Делать сразу на классах.

# TODO здесь ваш код
import zipfile


class Counter:
prev_char = 'A'
char_summa = 0
letters_list = []
numbers_list = []

def __init__(self, zip_file_name):
self.zip_file_name = zip_file_name
self.stat = {}

def unzip(self):
zfile = zipfile.ZipFile(self.zip_file_name, 'r')
for filename in zfile.namelist():
zfile.extract(filename)
return filename

def initialise(self, file_name):
with open(file_name, 'r', encoding='cp1251') as file:
print('+{txt:-^30}+'.format(txt='+'))
print('|{txt:^14}|'.format(txt='буква'), '{txt:^14}|'.format(txt='частота'))
for line in file:
for char in line:
if self.prev_char in self.stat:
if char in self.stat[self.prev_char]:
if char.isalpha() is True:
self.stat[self.prev_char][char] += 1
elif char.isalpha() is True:
self.stat[self.prev_char][char] = 1
else:
self.stat[self.prev_char] = {char: 1}
print('+{txt:-^30}+'.format(txt='+'))

def statistic(self):
for _, count in self.stat.items():
for letters, numbers in count.items():
self.letters_list.append(letters)
self.sort()
self.numbers_list.append(numbers)
for char_counts in self.numbers_list:
self.char_summa += char_counts
for char in self.letters_list:
count.get(char)
print('|{txt:^14}|'.format(txt=char), '{txt:^14}|'.format(txt=count.get(char)))
print('+{txt:-^30}+'.format(txt='+'))
print('|{txt:^14}|'.format(txt='итого'), '{txt:^14}|'.format(txt=self.char_summa))
print('+{txt:-^30}+'.format(txt='+'))

def count_statistic(self):
for _, count in self.stat.items():
count = dict(zip(count.values(), count.keys()))
for letters, numbers in count.items():
self.letters_list.append(letters)
self.sort()
self.numbers_list.append(letters)
for char_counts in self.numbers_list:
self.char_summa += char_counts
for char in self.letters_list:
count.get(char)
print('|{txt:^14}|'.format(txt=count.get(char)), '{txt:^14}|'.format(txt=char))
print('+{txt:-^30}+'.format(txt='+'))
print('|{txt:^14}|'.format(txt='итого'), '{txt:^14}|'.format(txt=self.char_summa))
print('+{txt:-^30}+'.format(txt='+'))

def sort(self):
pass


class Countmin(Counter):
def sort(self):
self.letters_list.sort()


class Countmax(Counter):
def sort(self):
self.letters_list.sort(reverse=True)


class Lettersmin(Counter):
def sort(self):
self.letters_list.sort()


class Lettersmax(Counter):
def sort(self):
self.letters_list.sort(reverse=True)


# sort_method = Countmin(zip_file_name='/Users/andrey/PycharmProjects/python_base/lesson_009/python_snippets/voyna-i-mir.txt.zip')
# sort_method.unzip()
# sort_method.initialise(file_name='voyna-i-mir.txt')
# sort_method.count_statistic()

# sort_method = Countmax(zip_file_name='/Users/andrey/PycharmProjects/python_base/lesson_009/python_snippets/voyna-i-mir.txt.zip')
# sort_method.unzip()
# sort_method.initialise(file_name='voyna-i-mir.txt')
# sort_method.count_statistic()


# sort_method = Lettersmin(zip_file_name='/Users/andrey/PycharmProjects/python_base/lesson_009/python_snippets/voyna-i-mir.txt.zip')
# sort_method.unzip()
# sort_method.initialise(file_name='voyna-i-mir.txt')
# sort_method.statistic()

sort_method = Lettersmax(
zip_file_name='/Users/andrey/PycharmProjects/python_base/lesson_009/python_snippets/voyna-i-mir.txt.zip')
sort_method.unzip()
sort_method.initialise(file_name='voyna-i-mir.txt')
sort_method.statistic()

# Хорошо, теперь применим паттерн "Шаблонный метод"
# То есть в базовом классе оставить метод для получения отсортированной статистики пустым,
# а потом сделать его наследников, в которых переопределить этот метод соответствующим образом

# Смотрите, у вас во всех наследниках код по сути одинаковый, отличается только сортировка статистики.
# То есть у вас есть базовый класс, в котором определены методы -
# 1. раззиповать архив()
# 2. собрать словарь со статистикой()
# Эти два метода у вас уже есть
# 3. распечатать эту статистику в таблице()
# внутри этого метода нужно отсортировать статистику (вызвать метод sort())
# и в цикле ее распечатать, обернув в таблицу
# 4. def sort():
# pass
# Так вот именно метод сортировки у вас будет переопределяться в наследниках. Сам метод печатания таблички
# ничем отличаться не будет, так что его достаточно определить только в базов классе.
# То есть в базовом классе мы оставляем этот метод пустым, затем в наследниках переопределяем только его, допустим
# для LettersPlus это будет выглядеть так -
# LettersMin(Counter):
# def sort():
# self.stat.sort(reverse=True)
# В остальных наследниках аналогичная логика - только соритруем словарь нужным образом
# И при вызове метда распечатки таблицы у нас будет осуществлена сортировка словаря нужным образом

# После выполнения первого этапа нужно сделать упорядочивание статистики
# - по частоте по возрастанию
@@ -30,3 +164,5 @@
# Для этого пригодится шаблон проектирование "Шаблонный метод"
# см https://goo.gl/Vz4828
# и пример https://gitlab.skillbox.ru/vadim_shandrinov/python_base_snippets/snippets/4

# зачет!
Loading