Класс для описания цилиндра
Нужно разработать класс для описания цилиндра. Запишите данные класса в текстовый файл.
Поля:
радиус основания и высота цилиндра R и h;
площадь поверхности S;
объем V;
площадь основания S0Методы:
конструктор: присвоение нулевых значений переменным;
ввод пользователем с клавиатуры значений свойств класса;
расчет величины площади основания цилиндра и вывод ее значения на экран;
расчет и вывод на экран площади поверхности цилиндра;
расчет объема цилиндра и вывод его значения на экран.
Только начал изучать Питон, решил сразу на примерах, после С++ тяжеловато.
Подскажите, пожалуйста, как можно корректно исправить мой класс, чтобы пользователь вводил данные и всё считалось. Также ещё пока не знаю про запись в файл.
import math
class Cylinder:
r = 0
h = 0
s = 0
v = 0
s0 = 0
def __init__(self, r, h, s, v, s0):
self.r = r
self.h = h
self.s = s
self.v = v
self.s0 = s0
def sOsn(self):
s0 = math.pi*pow(r, 2)
print("Площадь основания цилиндра = " + str(s0))
def sPov(self):
s = 2*math.pi*pow(r, 2) + 2*math.pi*r*h
print("Площадь поверхности цилиндра = " + str(s))
def vCyl(self):
v = math.pi*h*pow(r, 2)
print("Объём цилиндра = " + str(v))
cylinder = Cylinder()
cylinder._init_()
cylinder.sOsn()
cylinder.sPov()
cylinder.vCyl()
Ответы (2 шт):
Ввод пользователя можно реализовать с помощью input
r = int(input("Введите r"))
h = int(input("Введите h"))
s = int(input("Введите s"))
v = int(input("Введите v"))
s0 = int(input("Введите s0"))
также эти переменные нужно передать в класс
Cylinder(r, h, s, v, v0)
cylinder = Cylinder()
cylinder._init_()
Вторая строка лишния, потому что Cylinder() сам вызывает конструктор класса
class Cylinder:
r = 0
h = 0
s = 0
v = 0
s0 = 0
def __init__(self, r, h, s, v, s0):
self.r = r
self.h = h
self.s = s
self.v = v
self.s0 = s0
В коде можно убрать содержимое от class Cylinder: до def __init__(self, r, h, s, v, s0):
class Cylinder:
def __init__(self, r, h, s, v, s0):
self.r = r
self.h = h
self.s = s
self.v = v
self.s0 = s0
Чтобы использовать переменные которые вы создали в __init__ место r вам надо писать self.r
Место pow(r, 2) лучше писать r ** 2, а если это просто возведение в квадрат то лучше писать так r * r
print("Площадь основания цилиндра = " + str(s0))
Место этого лучше использовать f строки
print(f"Площадь основания цилиндра = {s0}")
pi лучше задать как переменную и убрать import math
PI = 3.141592653589793
В итоге получаем
PI = 3.141592653589793
class Cylinder:
def __init__(self, r, h, s, v, s0):
self.r = r
self.h = h
self.s = s
self.v = v
self.s0 = s0
def sOsn(self):
s0 = PI * self.r * self.r
print(f"Площадь основания цилиндра = {s0}")
def sPov(self):
s = 2 * PI * self.r * self.r + 2 *math.pi * self.r * self.h
print(f"Площадь поверхности цилиндра = {s}")
def vCyl(self):
v = PI * self.h * self.r * self.r
print(f"Объём цилиндра = {v}")
r = int(input("Введите r"))
h = int(input("Введите h"))
s = int(input("Введите s"))
v = int(input("Введите v"))
s0 = int(input("Введите s0"))
cylinder = Cylinder(r, h, s, v, s0)
cylinder.sOsn()
cylinder.sPov()
cylinder.vCyl()
Ввод с командной строки:
r, h, s, v, s0 = map(int, input("Введите r, h, s, v, s0 через пробел: ").split())
Чтобы ссылаться на атрибуты класса из init метода, нужно использовать self
import math
class Cylinder:
def __init__(self, r, h, s, v, s0):
self.r = r
self.h = h
self.s = s
self.v = v
self.s0 = s0
def sOsn(self):
self.s0 = math.pi * pow(self.r, 2)
print("Площадь основания цилиндра = " + str(self.s0))
def sPov(self):
self.s = 2 * math.pi * pow(self.r, 2) + 2 * math.pi * self.r * self.h
print("Площадь поверхности цилиндра = " + str(self.s))
def vCyl(self):
v = math.pi * self.h * pow(self.r, 2)
print("Объём цилиндра = " + str(v))
cylinder = Cylinder(r, h, s, v, s0)
cylinder.sOsn()
cylinder.sPov()
cylinder.vCyl()