Раздел «Язык Си».PythonStatic:

Матрицы. Задачи

Задача 1. Конструктор, \_\_str\_\_

Реализуйте класс Matrix. Он должен содержать:

Тест 1
Входные данные:
# Task 1 check 1
m = Matrix([[1, 0], [0, 1]])
print(m)
m = Matrix([[2, 0, 0], [0, 1, 10000]])
print(m)
m = Matrix([[-10, 20, 50, 2443], [-5235, 12, 4324, 4234]])
print(m)

Вывод программы:
1   0
0   1
2   0   0
0   1   10000
-10   20   50   2443
-5235   12   4324   4234



Тест 2
Входные данные:
# Task 1 check 2
m1 = Matrix([[1, 0, 0], [1, 1, 1], [0, 0, 0]])
m2 = Matrix([[1, 0, 0], [1, 1, 1], [0, 0, 0]])
print(str(m1) == str(m2))
Вывод программы:
True



Тест 3
Входные данные:
# Task 1 check 3
m = Matrix([[1, 1, 1], [0, 100, 10]])
print(str(m) == '1\t1\t1\n0\t100\t10')
Вывод программы:
True

Задача 2. Перегрузка операций

Добавьте в предыдущий класс следующие методы:

Например:

Разумеется, данные методы не должны менять содержимое матрицы.

Проект "игра UNO"

scp student@s41700.vdi.miptNOSPAM.ru:/home/student/shared/oop1/oop1_card_uno_orig.py .

Task Developer
Подсчитать счет в конце игры по всем игрокам и вывести его.  
Вводить не номер выбранной карты, а ее написание в вашей руке.  
Требовать писать UNO если после сыгранной карты на руке остается 1 карта. Если игрок забыл это сделать, начислять пенальти. Автоматические игроки должны делать UNO всегда  
Показывать руку игроку отсортированной по цветам (RGBY), и цифре на карте, потом идут специальные, потом черные.  
? Когда банкующая колода заканчивается, замешать в нее (перемешать!) колоду отбоя (кроме верхней карты).  
?? Локализация  
Тестирование: запускать состояние игры, прочитав его из файла (json). При этом ввести моду TEST, которая позволит обходить требование, что в руках строго 7 карт и нет отбоя.  
Тестирование: recorder, который пишет лог игры для последующего проигрывания его плеером  
Тестирование: player, который шаг за шагом проигрывает лог, записанный recorder.  
   

Поля класса

Методы класса

Перегрузка операторов

https://docs.python.org/3/reference/datamodel.html

Operator Function   Method Description
+    __add__(self, other)   Addition
*    __mul__(self, other)   Multiplication
-    __sub__(self, other)   Subtraction
%    __mod__(self, other)   Remainder
/    __truediv__(self, other)   Division
<    __lt__(self, other)   Less than
<=    __le__(self, other)   Less than or equal to
==    __eq__(self, other)   Equal to
!=    __ne__(self, other)   Not equal to
>    __gt__(self, other)  Greater than
>=    __ge__(self, other)   Greater than or equal to
[index]    __getitem__(self, index)   Index operator
in    __contains__(self, value)  Check membership
len  __len__(self)   The number of elements
str  __str__(self)   The string representation

Как работает @property и зачем он нужен

 property([fget[, fset[, fdel[, doc]]]]) -> property 

Позволяет использовать методы в качестве свойств объектов — порождает дескриптор, позволяющий создавать «вычисляемые» свойства (тип property).

Пример использования в классическом виде:

    class Mine(object):

        def __init__(self):
            self._x = None

        def get_x(self):
            return self._x

        def set_x(self, value):
            self._x = value

        def del_x(self):
            self._x = 'No more'

        x = property(get_x, set_x, del_x, 'Это свойство x.')

    type(Mine.x)  # property
    mine = Mine()
    mine.x  # None
    mine.x = 3
    mine.x  # 3
    del mine.x  
    mine.x  # No more

Используя функцию в качестве декоратора можно легко создавать вычисляемые свойства только для чтения:

    class Mine(object):

        def __init__(self):
            self._x = 'some value'

        @property
        def prop(self):
            return self._x

    mine = Mine()
    mine.prop  # some value
    mine.prop = 'other value'  # AttributeError

    del mine.prop  # AttributeError?

Объект свойства также предоставляет методы getter, setter, deleter, которые можно использовать в качестве декораторов для указания функций реализующих получение, установку и удаление свойства соответственно. Следующий код эквивалентен коду из первого примера:

    class Mine(object):

        def __init__(self):
            self._x = None

        x = property()

        @x.getter
        def x(self):
            """Это свойство x."""
            return self._x

        @x.setter
        def x(self, value):
            self._x = value

        @x.deleter
        def x(self):
            self._x = 'No more'

IDEA! Как видно из приведённого выше примера, функции-вычислители свойства должны иметь то же имя, что и само свойство.

Задачи

Задача 0 - "Справедливый" купец

Купец нанял N работников (не менее 1 и не более 100). Все работники делали одинаковую работу. По окончании работ купец расплатился с работниками монетами. Но он дал каждому монет не поровну, а как-нибудь: кому-то много, а кому-то мог вообще не заплатить.

Работники возмутились и стали требовать справедливости.

Купец обещал уладить дело.

Он поставил всех работников в круг. Затем у каждой пары работников он брал деньги и складывал. Если число монет двух работников нечетное, то одну монету купец забирал себе, а остальное поровну делил между этими двумя работниками. Купец начинал круг с пары 1-2, затем 2-3, ... и заканчивал круг парой N-1

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

Рабочие, получив РАВНОЕ количество монет уходили домой, а купец получал еще немножечко денег.

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

Автор: Овсянникова Т.В.

Задача 1. Сдача долларами

За 1 доллар дают 65 рублей 33 коп. В одном долларе 100 центов. Автомат по продаже мороженного принимает деньги в рублях и долларах. Сдачу отдает только в долларах и центах. Мороженное стоит D долларов, p центов. Человек положил в автомат R рублей.

Написать программу, чтобы вычислить сколько он получит сдачи в долларах и центах.

Задача 2. Сдача той же валютой

За 1 доллар дают 65 рублей 33 коп. В одном долларе 100 центов. Автомат по продаже мороженного принимает деньги в рублях и долларах. Сдачу отдает только в долларах и центах. Мороженное стоит D долларов, p центов. Человек положил в автомат R рублей.

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

Задача 3. Сдача той же валютой - 2

Автомат по продаже мороженого стоит на территории посольства России в Мьянме.

За 1 доллар дают 65 рублей 33 коп.

За 1 доллар дают 1364 kyat 50 pya.

В одном долларе 100 центов.

Автомат по продаже мороженного принимает деньги в рублях, kyat и долларах. Сдачу отдает той же валютой. Мороженное стоит D долларов, p центов.

Человек положил в автомат R рублей, kyat или долларов.

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

Задача 5. Юань

Добавить в автомат юани. 1 доллар 6.63 юаня.

"Копеек" у юаня нет.

Добавить юани в автомат smile

-- TatyanaDerbysheva - 19 Nov 2017