123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325 |
- import hashlib
- import os
- class BankAccount:
- def __init__(self, name, balance):
- self.name = name
- self.__balance = balance
- @property
- def my_balance(self):
- return self.__balance
- @my_balance.setter
- def my_balance(self, value):
- if not isinstance(value, (int, float)):
- raise ValueError('Баланс должен быть числом')
- @my_balance.deleter
- def my_balance(self):
- del self.__balance
- class MagicBox:
- def __init__(self, contents=None):
- self._contents = contents
- @property
- def contents(self):
- if self._contents == "rabbit":
- return "A magical rabbit!"
- else:
- return self._contents
-
- @contents.setter
- def entity(self, new_contents):
- if new_contents == "wishes":
- print("Your wishes are granted!")
- self._contents = new_contents
- else:
- print("the magic didn't work this time.")
- self._contents = new_contents
- class Celsius:
- def __init__(self, temp) -> None:
- self.__temperature = temp
- def to_fahrenheit(self):
- return self.__temperature*9/5 + 32
- @property
- def temperature(self):
- return self.__temperature
- @temperature.setter
- def temperature(self, value):
- if value < -273.15:
- raise ValueError("Температура должна быть больше 273.15")
- else:
- self.__temperature = value
- class File:
- def __init__(self, size_in_bytes):
- self._size_in_bytes = size_in_bytes
- @property
- def size(self):
- if self._size_in_bytes < 1024:
- return f"{self._size_in_bytes} B"
- elif self._size_in_bytes < 1048576:
- return "%.2f KB" % (self._size_in_bytes/1024.0)
- elif self._size_in_bytes < 1073741824:
- return "%.2f MB" % (self._size_in_bytes/1048576.0)
- else:
- return "%.2f GB" % (self._size_in_bytes/1073741824.0)
- @size.setter
- def size(self, value):
- self._size_in_bytes = value
- class Notebook:
- def __init__(self, notes: list):
- self._notes = notes
- @property
- def notes_list(self):
- for i, j in enumerate(self._notes):
- print(f"{i+1}.{j}")
- class User:
- def __init__(self, name, password) -> None:
- self.name = name
- self.password = password
- @property
- def password(self):
- raise AttributeError("Пароль можно только менять, нельзя смотреть")
- @password.setter
- def password(self, plaintext):
- salt = os.urandom(32)
- self._hashed_password = hashlib.pbkdf2_hmac(
- "sha256", plaintext.encode("utf-8"), salt, 100_000
- )
- class Money:
- def __init__(self, dollars, cents):
- # self.total_cents = 0
- self.total_cents = dollars*100 + cents
- @property
- def dollars(self):
- return self.total_cents//100
- @dollars.setter
- def dollars(self, value):
- if not isinstance(value, (int)):
- print("Error dollars")
- return
- if value < 0:
- print("Error dollars")
- return
- else:
- self.total_cents = self.total_cents%100 + value*100
- @property
- def cents(self):
- return self.total_cents%100
- @cents.setter
- def cents(self, value):
- if not isinstance(value, (int)):
- print("Error cents")
- elif value < 0 or value >= 100:
- print("Error cents")
- else:
- self.total_cents = (self.total_cents//100)*100 + value
- def __str__(self) -> str:
- return f"Ваше состояние составляет {self.total_cents//100} долларов {self.total_cents%100} центов"
- """Вычисляемые войства"""
- class Square:
- def __init__(self, a) -> None:
- self.__side = a
- self.__area = None
- self.__perimeter = None
- @property
- def side(self):
- return self.__side
- @side.setter
- def side(self, value):
- self.__side = value
- self.__area = None
- self.__perimeter = None
- @property
- def area(self):
- if self.__area == None:
- print('calculate area')
- self.__area = self.__side**2
- return self.__area
- @property
- def perimeter(self):
- if self.__perimeter == None:
- print('calculate perimeter')
- self.__perimeter = self.__side*4
- return self.__perimeter
- class Rectangle:
- def __init__(self, length, width):
- self.__length = length
- self.__width = width
- self.__area = None
- @property
- def area(self):
- if self.__area == None:
- self.__area = self.__length*self.__width
- return self.__area
-
- class Date:
- def __init__(self, day, month, year) -> None:
- self.day = day
- self.month = month
- self.year = year
- @property
- def date(self):
- return "%02d/%02d/%04d" % (self.day, self.month, self.year)
- @property
- def usa_date(self):
- return "%02d-%02d-%04d" % (self.month, self.day, self.year)
- class Password:
- def __init__(self, password) -> None:
- self.__password = password
- @property
- def password(self):
- return self.__password
- @password.setter
- def password(self, value):
- self.__password = value
- @property
- def strength(self):
- if len(self.password) < 8:
- return "Weak"
- elif len(self.password) >= 12:
- return "Strong"
- else:
- return "Medium"
- def main():
- pass_1 = Password("Alligator34")
- assert pass_1.password == "Alligator34"
- assert pass_1.strength == "Medium"
- assert len(pass_1.__dict__) == 1, 'У ЭК должен храниться только один атрибут'
- pass_2 = Password("Alligator345678")
- assert pass_2.password == "Alligator345678"
- assert pass_2.strength == "Strong"
- pass_1.password = "123"
- assert pass_1.strength == "Weak"
- assert len(pass_2.__dict__) == 1, 'У ЭК должен храниться только один атрибут'
- pass_3 = Password("345678")
- assert pass_3.strength == "Weak"
- print('Good')
- assert len(pass_3.__dict__) == 1, 'У ЭК должен храниться только один атрибут'
- # acc = BankAccount('Ivan', 200)
- # print(acc.my_balance)
- '''
- date = Date(3, 4, 2001)
- print(date.date)
- print(date.usa_date)
- '''
- # one_dollar = 1
- # print(f"{one_dollar:05}")
- '''
- note = Notebook(['Buy Potato', 'Buy Carrot', 'Wash car'])
- note.notes_list
- '''
- '''
- bill = Money(101, 99)
- assert isinstance(bill, Money)
- print(bill.__dict__.keys())
- print(bill) # Ваше состояние составляет 101 долларов 99 центов
- print(bill.dollars, bill.cents) # 101 99
- print(bill.total_cents)
- bill.dollars = 666
- print(bill.total_cents)
- print(bill) # Ваше состояние составляет 666 долларов 99 центов
- bill.cents = 12
- print(bill.total_cents)
- print(bill) # Ваше состояние составляет 666 долларов 12 центов
- print(bill.total_cents)
- assert bill.total_cents == 66612
- assert list(bill.__dict__.keys()) == ['total_cents']
- ken = Money(111, 90)
- assert isinstance(ken, Money)
- print(ken)
- ken.dollars = 'hello' # Error dollars
- ken.dollars = 0
- print(ken)
- ken.cents = [1, 2, 3] # Error cents
- ken.cents = 100 # Error cents
- ken.cents = 99
- print(ken)
- '''
- '''
- box = MagicBox("rubies")
- print(box.contents)
- print(box._contents)
- box.entity = "wishes"
- print(box._contents)
- print(box.entity)
- '''
- '''
- cel = Celsius(12.0)
- cel.temperature = 15
- cel.temperature = -300
- print(cel.temperature)
- '''
- if __name__ == '__main__':
- main()
|