Класс для описания цилиндра

Нужно разработать класс для описания цилиндра. Запишите данные класса в текстовый файл.

Поля:
радиус основания и высота цилиндра 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 шт):

Автор решения: Danis

Ввод пользователя можно реализовать с помощью 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()
→ Ссылка
Автор решения: RomanR

Ввод с командной строки:

 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()
→ Ссылка