-
Notifications
You must be signed in to change notification settings - Fork 0
aturenko #95
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
base: main
Are you sure you want to change the base?
aturenko #95
Changes from all commits
File filter
Filter by extension
Conversations
Jump to
Diff view
Diff view
There are no files selected for viewing
| 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): | ||
| 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") | ||
|
|
||
|
|
||
|
|
||
|
|
||
|
|
||
| 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() |
| 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: | ||
|
Owner
There was a problem hiding this comment. Choose a reason for hiding this commentThe 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: | ||
|
Owner
There was a problem hiding this comment. Choose a reason for hiding this commentThe 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) | ||
| 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): | ||
|
Owner
There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. А нужен ли Pupil свой |
||
| self._pupilname = pupilname | ||
|
|
||
| def solve_task(self): | ||
| time.sleep(random.randint(3, 6)) | ||
| print("I'm not ready yet") | ||
|
Owner
There was a problem hiding this comment. Choose a reason for hiding this commentThe 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() | ||
| 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 | ||
|
|
||
|
Owner
There was a problem hiding this comment. Choose a reason for hiding this commentThe 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 # после этого файла не существует | ||
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Методы надо именовать в snake_case