Jelajahi Sumber

Merge branch 'master' of dtelenkov:Home/codewars

TelenkovDmitry 8 bulan lalu
induk
melakukan
2468aacac3
1 mengubah file dengan 89 tambahan dan 0 penghapusan
  1. 89 0
      courses/python_oop/dec.py

+ 89 - 0
courses/python_oop/dec.py

@@ -1,3 +1,5 @@
+import hashlib
+import os
 
 class BankAccount:
 
@@ -91,12 +93,99 @@ class Notebook:
         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} центов"
+
+
 def main():
     # acc = BankAccount('Ivan', 200)
     # print(acc.my_balance)
 
+    '''
     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")