Модуль 24. Задача 7. Совместное проживание

Модуль 24. Задача 7. Совместное проживание

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

Человек может:

  1. Есть (+ сытость, − еда).
  2. Работать (− сытость, + деньги).
  3. Играть (− сытость).
  4. Ходить в магазин за едой (+ еда, − деньги).

У человека есть имя, степень сытости (изначально 50) и дом.

В доме есть холодильник с едой (изначально 50 еды) и тумбочка с деньгами (изначально 0 денег).

Если сытость человека становится меньше нуля, то человек умирает.

Логика действий человека определяется следующим образом:

  1. Генерируется число кубика от 1 до 6.
  2. Если сытость < 20, то поесть.
  3. Иначе, если еды в доме < 10, то сходить в магазин.
  4. Иначе, если денег в доме < 50, то работать.
  5. Иначе, если кубик равен 1, то работать.
  6. Иначе, если кубик равен 2, то поесть.
  7. Иначе играть.

По такой логике эксперимента человеку надо прожить 365 дней.

Реализуйте такую программу и создайте двух людей, живущих в одном доме. Проверьте работу программы несколько раз.

ЧИТАТЬ ДАЛЕЕ …
Модуль 24. Задача 6. Магия

Модуль 24. Задача 6. Магия

Для одной игры необходимо реализовать механику магии, где при соединении двух элементов получается новый. У нас есть четыре базовых элемента: «Вода», «Воздух», «Огонь», «Земля». Из них как раз и получаются новые: «Шторм», «Пар», «Грязь», «Молния», «Пыль», «Лава».

Вот таблица преобразований:

  • Вода + Воздух = Шторм
  • Вода + Огонь = Пар
  • Вода + Земля = Грязь
  • Воздух + Огонь = Молния
  • Воздух + Земля = Пыль
  • Огонь + Земля = Лава

Напишите программу, которая реализует все эти элементы. Каждый элемент необходимо организовать как отдельный класс. Если результат не определён, то возвращается None.

Примечание: сложение объектов можно реализовывать через магический метод __add__, вот пример использования:

class Example_1:
    def __add__(self, other):
        return Example_2()

class Example_2:
    answer = 'сложили два класса и вывели'

a = Example_1()
b = Example_2()
c = a + b
print(c.answer)

Дополнительно: придумайте свой элемент (или элементы), а также реализуйте его взаимодействие с остальными элементами.

ЧИТАТЬ ДАЛЕЕ …
Модуль 24. Задача 5. Весёлая ферма 2

Модуль 24. Задача 5. Весёлая ферма 2

Мы продолжаем писать игру «Весёлая ферма», и теперь необходимо её немного модернизировать. Всё-таки кому-то нужно собирать урожай, и для этого нам понадобится садовник, у которого есть:

  1. Имя.
  2. Грядка с растением, за которым он ухаживает (в нашем случае пока только грядка с картошкой).

И он может:

  1. Ухаживать за грядкой.
  2. Собирать с неё урожай (количество картошки ― пустой список).

Модернизируйте программу, используя новый класс «Садовник». На всякий случай даём описание картошки и грядки:

У картошки есть её номер в грядке, а также стадия зрелости. Она может предоставлять информацию о своей зрелости и расти. Всего у картошки может быть четыре стадии зрелости.

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

Проверьте работу программы, создав грядку из пяти картошек и отдав эту грядку садовнику. Пусть поухаживает за грядкой и соберёт урожай (а может быть даже и не один).

ЧИТАТЬ ДАЛЕЕ …
Модуль 24. Задача 4. Отцы, матери и дети
Модуль 24. Задача 3. Круг

Модуль 24. Задача 3. Круг

На координатной плоскости рисуются круги, у каждого круга следующие параметры: координаты X и Y центра круга и значение R ― радиус круга. По умолчанию центр находится в (0, 0), а радиус равен 1.

Реализуйте класс «Круг», который инициализируется по этим параметрам. Круг также может:

  1. Находить и возвращать свою площадь.
  2. Находить и возвращать свой периметр.
  3. Увеличиваться в K раз.
  4. Определять, пересекается ли он с другой окружностью.
ЧИТАТЬ ДАЛЕЕ …
Nginx - конфигурационный файл
Заметка

Nginx — конфигурационный файл

Перезапуск веб-сервера с нерабочей конфигурацией может привести к его остановке. Чтобы проверить на ошибки конфиг nginx, нужно использовать опцию -t. Опция -t заставит nginx проверить конфигурационный файл на корректный синтаксис и наличие ошибок, и затем попытается открыть файлы, указанные в конфигурации.

Для проверки конфига nginx на ошибки, используйте команду:

# Основной файл (/etc/nginx/nginx.conf)
$ nginx -t
# Проверка конкретного файла
$ nginx -c /home/webuser/notes/config/notes.conf -t
ЧИТАТЬ ДАЛЕЕ …
Терминальный мультиплексор - tmux
Заметка

Терминальный мультиплексор — tmux

Tmux (терминальный мультиплексор) позволяет работать с несколькими сессиями в 1 окне. Вместо нескольких окон терминала к серверу — вы можете использовать одно. Позволяет подключаться/отключаться к текущему состоянию сессии. Запущенные программы и процессы продолжают работать. (Можно использовать вместо nohup, dtach).

Например, на работе правим файлы в Vim. Окно терминала с открытыми файлами, процессами. Отключаемся от сессии. Далее подключаемся к этой сессии из дома и получаем те же окна с открытыми файлами в Vim, процессами и т.д. Можно продолжить работу с того же момента, на котором остановились. Также удобно при разрыве связи. Дополнительно можно работать совместно с другими в терминале, если подключены к одной сессии. Каждый видит, что делает другой.

Терминальный мультиплексор - tmux
ЧИТАТЬ ДАЛЕЕ …
Модуль 24. Задача 2. Студенты

Модуль 24. Задача 2. Студенты

Реализуйте модель с именем Student, содержащую поля: «ФИ», «Номер группы», «Успеваемость» (список из пяти элементов). Затем создайте список из десяти студентов (данные о студентах можете придумать свои или запросить их у пользователя) и отсортируйте его по возрастанию среднего балла. Выведите результат на экран.

ЧИТАТЬ ДАЛЕЕ …
Кто убил мою сессию?
Заметка

Кто убил мою сессию?

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

SELECT indx,
       cast(t.ORIGINATING_TIMESTAMP as date) dt,
       message_type tp,
       message_level lvl,
       message_text txt
FROM   v$diag_alert_ext t
where  ORIGINATING_TIMESTAMP>sysdate-1/24/60*5
 ;

В алертлоге записи об убийстве сессий выглядят примерно следующим образом:

KILL SESSION for sid=(7877, 58164):
  Reason = alter system kill session
  Mode = KILL HARD SAFE -/-/-
  Requestor = USER (orapid = 1447, ospid = 293827, inst = 1)
  Owner = Process: USER (orapid = 929, ospid = 842259)
  Result = ORA-31

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

ЧИТАТЬ ДАЛЕЕ …
Модуль 24. Задача 1. Драка

Модуль 24. Задача 1. Драка

Вы работаете в команде разработчиков мобильной игры, и вам досталась такая часть от ТЗ заказчика:

Есть два юнита, каждый из них называется «Воин». Каждому устанавливается здоровье в 100 очков. Они бьют друг друга в случайном порядке. Тот, кто бьёт, здоровье не теряет. У того, кого бьют, оно уменьшается на 20 очков от одного удара. После каждого удара надо выводить сообщение, какой юнит атаковал и сколько у противника осталось здоровья. Как только у кого-то заканчивается ресурс здоровья, программа завершается сообщением о том, кто одержал победу.

Реализуйте такую программу.

ЧИТАТЬ ДАЛЕЕ …
Заметка

Нумерация версий программного обеспечения

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

Вариант 1. Нумерация целым числом
Обычно программы нумеруются целыми числами 1,2,3,4,5,6,7 и т.д. когда новая версия программы сложна, долго пишется и появляется только раз в год или несколько лет. После того, как такая программа будет протестирована, она помечается целым номером и выпускается для использования. Какие-либо мелкие изменения, добавляемые в процессе обслуживания программы, не учитываются в нумерации. Например, целым числом нумеруется Corel Draw (Corel Draw 10, Corel Draw 11)

ЧИТАТЬ ДАЛЕЕ …
Модуль 23. 6. Чат

Модуль 23. 6. Чат

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

  1. Посмотреть текущий текст чата.
  2. Отправить сообщение (затем вводит сообщение).

Действия запрашиваются бесконечно.

Примечание: для решения задачи вам будет достаточно текущих знаний, нужно лишь проявить немного фантазии и хитрости. Не нужно лезть в дебри работы с сетями, создания GUI-приложений и прочих штук. (Но если очень хочется, то останавливать вас никто не будет!)

ЧИТАТЬ ДАЛЕЕ …
Установка последней версии KeePassXC
Заметка

Установка последней версии KeePassXC

Перепробовав несколько разных KeePass под Linux пока остановился на KeePassXC. На мой взгляд это более удачное решение, чем другие. Но и другие версии ничуть не хуже версии под Windows. Но в репозиториях находится устаревшая версия, а для работы плагина (для браузеров) уже нужна версия не ниже чем 2.6.0. Вот и встал вопрос, об обновлении. Можно скачать релиз и GitHub`а, а можно и добавить репозиторий в хранилище (что на мой взгляд более правильнее).
На странице указан нужный нам репозиторий. Берём его и добавляем.

sudo add-apt-repository ppa:phoerious/keepassxc
sudo apt update
Установка последней версии KeePassXC

После чего можно установить последнюю версию прямо из терминала:

ЧИТАТЬ ДАЛЕЕ …
Модуль 23. Задача 5. Текстовый калькулятор

Модуль 23. Задача 5. Текстовый калькулятор

Иван стоит на пороге величайшего открытия (не будем его расстраивать), которое перевернёт представление обо всей математике и программировании. Имя этому открытию — текстовый калькулятор. Правда, код для своего открытия ему сложно написать самому, и поэтому он попросил вас помочь ему. Так что уже можно бежать в патентное бюро.

Есть файл calc.txt, в котором хранятся записи вида:

- 100 + 34,
- 23 / 4,

то есть ОПЕРАНД_1 ОПЕРАЦИЯ ОПЕРАНД_2, разделённые пробелами.

Операнды — целые числа. Операции — арифметические (включая деление нацело и нахождение остатка).

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

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

Пример 1

Содержимое файла calc.txt:

100 + 34
10 +* 3
23 / 4

Содержимое консоли:

Обнаружена ошибка в строке: 10 +* 3   Хотите исправить? Да
Введите исправленную строку: 10 + 3

Сумма результатов: 152.75

Пример 2

Содержимое файла calc.txt:

100 + 34
10 +* 3
20 -* 2
23 / 4

Содержимое консоли:

Обнаружена ошибка в строке: 10 +* 3   Хотите исправить? Нет
Обнаружена ошибка в строке: 20 -* 2   Хотите исправить? Да
Введите исправленную строку: 20 - 2

Сумма результатов: 157.75
ЧИТАТЬ ДАЛЕЕ …
Модуль 23. Задача 4. Регистрация

Модуль 23. Задача 4. Регистрация

У вас есть файл с протоколом регистраций пользователей на сайте — registrations.txt. Каждая строка содержит имя, емейл и возраст, разделённые пробелами. Например: «Василий test@test.ru 27«.

Напишите программу, которая проверяет данные из файла для каждой строки:

  • Присутствуют все три поля.
  • Поле «Имя» содержит только буквы.
  • Поле «Имейл» содержит @ и . (точку).
  • Поле «Возраст» является числом от 10 до 99.

В результате проверки сформируйте два файла:

  • registrations_good.log — для правильных данных, записывать строки в том виде, как есть;
  • registrations_bad.log — для ошибочных, записывать строку и вид ошибки.

Для валидации строки данных напишите функцию, которая может выдавать исключения:

  • НЕ присутствуют все три поля: IndexError.
  • Поле «Имя» содержит НЕ только буквы: NameError.
  • Поле «Имейл» НЕ содержит @ и . (точку): SyntaxError.
  • Поле «Возраст» НЕ является числом от 10 до 99: ValueError.

Формат выходных данных

Содержимое файла registrations_bad.log:
Ольга kmrn@gmail.com 123        Поле «Возраст» НЕ является числом от 10 до 99
Чехова kb@gmail.com 142     Поле «Возраст» НЕ является числом от 10 до 99
……
Степан ky 59        Поле «Имейл» НЕ содержит @ и . (точку)
……

Содержимое файла registrations_good.log:
Геннадий ttdababmt@gmail.com 69
Ольга ysbxur@gmail.com 20
……
ЧИТАТЬ ДАЛЕЕ …