Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
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
31 changes: 31 additions & 0 deletions Practice/aturenko/Task 1 Lec 7.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,31 @@
# 1.Спроектировать классы (один или несколько) для игры в танки и создать экземпляры этих классов.

class Tanks:
def __init__(self, name, mass, speed):
self._name = name
self._mass = mass
self._speed = speed

@staticmethod
def is_shooting(shoot):
if shoot == "Bah":
print("Tank shooting!")
else:
print("The tank does not fire")

def showTanks(self):
Copy link
Copy Markdown
Owner

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Методы надо именовать в snake_case

print(f"Танк {self._name} имеет массу {self._mass} т и скорость {self._speed} км/ч")


tank1 = Tanks("T-90C", 48, 60)
tank2 = Tanks("Abrams M1A2", 69, 70)
tank3 = Tanks("Challenger 2", 62, 56)
tanklist = [tank1, tank2, tank3]
for i in tanklist:
i.showTanks()
Tanks.is_shooting("Bah")





11 changes: 11 additions & 0 deletions Practice/aturenko/Task 1 Lec 8.1.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,11 @@
class Man:
def __init__(self, name):
self._name = name

def solve_task(self):
print("I'm not ready yet")

myman = Man("Иван")

print(myman._name)
myman.solve_task()
56 changes: 56 additions & 0 deletions Practice/aturenko/Task 2 Lec 7.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,56 @@
# 2. Спроектировать класс Duck, при создании экземпляров которого будут задаваться атрибуты name, weight, а атрибут color должен быть общим для всех экземпляров класса. Также в классе должны быть методы:
# - статический метод, выводящий «Сrack»;
# - классовый метод, выводящий цвет уток;
# - методы экземпляров: метод, выводящий имя и вес утки; метод __repl__ ;
# метод, принимающий 2х уток, и возвращающий имя более тяжелой утки (__lt__) ;
# метод, сравнивающий вес 2х уток и возвращающий bool (равен вес или нет (__ne__)) ;
# метод, суммирующий вес 2х уток(__add__).

class Duck:
_color = "yellow"

def __init__(self, name, weight):
self._name = name
self._weight = weight


@staticmethod
def outputCrack():
print("Crack!")

@classmethod
def outputColor(cls):
print(f"Цвет уток {cls._color}")


def outputInfo(self):
print(f"Имя утки {self._name}, вес {self._weight}")


def __repr__(self):
return f'Утка {self._name}, весит {self._weight}'

def __lt__(self, other):
if self._weight > other._weight:
Copy link
Copy Markdown
Owner

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

А что должно вернуться в противном случае?

return f'Более тяжёлая утка - {self._name}'

def __ne__(self, other):
if self._weight != other._weight:
Copy link
Copy Markdown
Owner

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Можно упростить до return self._weight != other._weight

return True
else:
return False

def __add__(self, other):
return self._weight + other._weight

duck1 = Duck("Donald", 4)
duck2 = Duck("Utka", 5)

duck1.outputCrack()
duck2.outputCrack()
duck1.outputColor()
duck1.outputInfo()
duck2.outputInfo()
print(duck1 > duck2)
print(duck1 == duck2)
print(duck1 + duck2)
31 changes: 31 additions & 0 deletions Practice/aturenko/Task 2 Lec 8.1.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,31 @@
import time
import random

class Man:
def __init__(self, name):
self._name = name

def solve_task(self):
print("I'm not ready yet")

myman = Man("Иван")

print(myman._name)
myman.solve_task()

# 2.Написать класс Pupil,у которого переопределен метод solve_task.
# На этот раз он будет думать от 3 до 6 секунд (c помощью метода sleep библиотеки time и randint библиотеки random).

class Pupil(Man):
def __init__(self, pupilname):
Copy link
Copy Markdown
Owner

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

А нужен ли Pupil свой __init__? Он же и так наследует этот метод у родителя.

self._pupilname = pupilname

def solve_task(self):
time.sleep(random.randint(3, 6))
print("I'm not ready yet")
Copy link
Copy Markdown
Owner

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Лучше вместо стр.25 просто сослаться на одноименный родительский метод через super(). Тогда если у solve_task() в классе Man логика поменяется - не придется менять ее и у Pupil.



mypupil = Pupil("Сергей")
print(mypupil._pupilname)
# for people in (myman, mypupil):
mypupil.solve_task()
72 changes: 72 additions & 0 deletions Practice/aturenko/Task 3 Lec 7.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,72 @@
# Написать класс WrapStrToFIle, который будет иметь одно вычисляемое свойство (property) под названием content.
# В конструкторе класс должен инициализовать атрибут filepath, путем присваивания результата функции mktemp библиотеки tempfile.
# При попытке чтения свойства content должен внутри кода свойства открываться файл,
# используя атрибут filepath (с помощью функции open, из этого файла читается все содержимое и возвращается из свойства.
# Если файл не существует, то возникает ошибка, поэтому должна быть обертка вокруг открытия файла на чтение (try...except),
# с помощью которого будет возвращаться 'Файл еще не существует'.
# При присваивании значения свойству content файл по указанному пути должен открываться на запись и записываться содержимое.
# Не забудьте закрывать файл после чтения или записи. При удалении атрибута content, должен удаляться и файл.*

import tempfile
import os

class WrapStrToFile:

def __init__(self):
self._filepath = tempfile.mkstemp() # здесь инициализируется атрибут filepath, он содержит путь до файла-хранилища



@property

Copy link
Copy Markdown
Owner

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Пустые строки 21, 38, 49 - лишние. Отделять декоратор от декорируемой функции не нужно.

def content(self):
try:
with open(self._filepath, "r") as f:
res = f.read()
return res
except:
return "File doesn't exist"


# попытка чтения из файла, в случае успеха возвращаем содержимое

# в случае неудачи возвращаем 'File doesn't exist'



@content.setter

def content(self, value):
try:
with open(self._filepath, "w") as f:
f.write(value)
except Exception:
print("Невозможно записать в файл")
# попытка записи в файл указанного содержимого


@content.deleter

def content(self):
if os.path.isfile(self._filepath):
os.remove(self._filepath)
print("success")
else:
print("File doesn't exists!")
# удаляем файл: os.remove(имя_файла)



wstf = WrapStrToFile()

print(wstf.content) # Output: File doesn't exist

wstf.content = 'test str'

print(wstf.content) # Output: test_str

wstf.content = 'text 2'

print(wstf.content) # Output: text 2

del wstf.content # после этого файла не существует