Python OO,自我调用类中的其他函数?

时间:2017-07-08 11:05:29

标签: python-3.x oop

我是面向对象概念的新手,我尝试使用OO技术解决这个问题。我用普通的编程技术解决了这个问题,但是我无法使用OO技术。

这是问题所在: https://www.hackerrank.com/challenges/30-nested-logic?utm_campaign=30_days_of_code_continuous&utm_medium=email&utm_source=daily_reminder

我尝试过的: 起初,我只调用了student1.print()。没有用,所以我调用了parseDate()和calculateFine()。 我把自己放在学生班的所有变量中,因为我无法真正理解为什么或如何自我工作。

如果我错误地标记了标题,请道歉,但我不知道还要写什么,因为我不确定我的代码中究竟是什么问题。

class getFine():
    def __init__ (self,expectedDate,actualDate):
        self.expectedDate = expectedDate
        self.actualDate = actualDate


    def parseDates(self):
        self.ya = self.actualDate[0]
        self.ma = self.actualDate[1]
        self.da = self.actualDate[0]

        self.ye = self.expectedDate[0]
        self.me = self.expectedDate[1]
        self.de = self.expectedDate[2]

    def calculateFine(self):
        self.fine = 0
        if(self.ya>self.ye):
            self.fine = 10000
        elif self.ya==self.ye:
            if(self.ma>self.me):
                self.fine = 500 * (self.ma-self.me)
            elif(self.ma==self.me) and (self.da>self.de):
                self.fine = 15 * (self.da-self.de)


    def print(self):
        print(self.fine)


def main():
    expectedDate = str(input().split(" "))
    actualDate = str(input().split(" "))
    student1 = getFine(expectedDate, actualDate)
    student1.parseDates()
    student1.calculateFine()
    student1.print()

if __name__ == "__main__":
    main()

1 个答案:

答案 0 :(得分:0)

您的日期是字符串,然后您想要相互减去。首先使用以下内容将它们转换为整数或浮点数:

getFine.print()

这会解决您的问题吗?

如果您只想调用getFine.print()函数而不是其他函数,可以在class getFine(): def __init__ (self,expectedDate,actualDate): self.expectedDate = expectedDate self.actualDate = actualDate self.ya = self.actualDate[0] self.ma = self.actualDate[1] self.da = self.actualDate[2] # typo here 0 --> 2 self.ye = self.expectedDate[0] self.me = self.expectedDate[1] self.de = self.expectedDate[2] def calculateFine(self): self.fine = 0 if(self.ya>self.ye): self.fine = 10000 elif self.ya==self.ye: if(self.ma>self.me): self.fine = 500 * (self.ma-self.me) elif(self.ma==self.me) and (self.da>self.de): self.fine = 15 * (self.da-self.de) def print(self): self.calculateFine() print(self.fine) expectedDate = [int(i) for i in (input().split(" "))] actualDate = [int(i) for i in (input().split(" "))] student1 = getFine(expectedDate, actualDate) student1.print() 方法中调用这些类方法。由于您可能希望在每个函数调用中分隔年份月份和日期,因此可以将该部分移动到init方法

{{1}}