我无法使用oop概念运行我的python程序

问题描述 投票:0回答:2

谁能告诉我为什么代码只运行

operation_perform
下的内容而不是后面的内容?

import math
class Shape:
  def operation_perform(self):
    m = input('''
      Select the shape:
      1. Select 1 for area.
      2. Select 2 for perimeter.
      ''')
    
    if m == '1':   
      def area(self, a, b = 0):
        n = input('''
        select the shape:
        1. Select 1 for circle.
        2. Select 2 for square.
        3. Select 3 for rectangular.
        ''')

        if n == '1':
          print('area of circle: ', math.pi * self.a**2)
        
        if n == '2':
          print('area of square: ', self.a**2)

        if n == '3':
          print('area of rectangular: ', math.pi * self.a * self.b)

    elif m == '2':
      def perimeter(self, a, b = 0):
        n = input('''
          select the shape:
          1. Select 1 for circle.
          2. Select 2 for square.
          3. Select 3 for rectangular.
          ''')

        if n == '1':
          print('perimeter of circle: ', 2 * math.pi * self.a)
          
        if n == '2':
          print('perimeter of square: ', 4 * self.a)

        if n == '3':
          print('perimeter of rectangular: ', 2*(self.a + self.b))
    else:
        exit()

s = Shape() 

s.operation_performed()

我得到的输出如下所示:

output: 
      Select the shape:
      1. Select 1 for area.
      2. Select 2 for perimeter.
      1  

为什么我的程序没有进入

area()
perimeter()
函数?我不能在不使用构造函数的情况下做到这一点吗?

python oop
2个回答
2
投票

问题是您在

area
方法内定义了
perimeter
operations_perform
方法,但没有调用它们。

应用更正:

import math

class Shape:
    def operation_perform(self):
        m = input('''
        Select the shape:
        1. Select 1 for area.
        2. Select 2 for perimeter.
        ''')
        if m == '1':
            self.area()
        elif m == '2':
            self.perimeter()
        else:
            exit()
    def area(self):
        a = float(input("Enter the first dimension: "))
        b = float(input("Enter the second dimension (if any, else enter 0): "))
        n = input('''
        select the shape:
        1. Select 1 for circle.
        2. Select 2 for square.
        3. Select 3 for rectangular.
        ''')
        if n == '1':
            print('area of circle: ', math.pi * a**2)
        if n == '2':
            print('area of square: ', a**2)
        if n == '3':
            print('area of rectangular: ', a * b)
    def perimeter(self):
        a = float(input("Enter the first dimension: "))
        b = float(input("Enter the second dimension (if any, else enter 0): "))
        n = input('''
        select the shape:
        1. Select 1 for circle.
        2. Select 2 for square.
        3. Select 3 for rectangular.
        ''')
        if n == '1':
            print('perimeter of circle: ', 2 * math.pi * a)
        if n == '2':
            print('perimeter of square: ', 4 * a)
        if n == '3':
            print('perimeter of rectangular: ', 2*(a + b))
s = Shape() 
s.operation_perform()

编辑:OOP'd

import math

class Shape:
    def area(self):
        pass
    def perimeter(self):
        pass
class Circle(Shape):
    def __init__(self, radius):
        self.radius = radius
    def area(self):
        return math.pi * self.radius ** 2
    def perimeter(self):
        return 2 * math.pi * self.radius
class Square(Shape):
    def __init__(self, side):
        self.side = side
    def area(self):
        return self.side ** 2
    def perimeter(self):
        return 4 * self.side
class Rectangle(Shape):
    def __init__(self, length, width):
        self.length = length
        self.width = width
    def area(self):
        return self.length * self.width
    def perimeter(self):
        return 2 * (self.length + self.width)
circle = Circle(5)
print('Circle area:', circle.area())
print('Circle perimeter:', circle.perimeter())
square = Square(4)
print('Square area:', square.area())
print('Square perimeter:', square.perimeter())
rectangle = Rectangle(4, 2)
print('Rectangle area:', rectangle.area())
print('Rectangle perimeter:', rectangle.perimeter())

0
投票

您正在创建

area
perimeter
函数,但从未调用它们。

© www.soinside.com 2019 - 2024. All rights reserved.