2017-07-08 88 views
0

我是面向对象的概念的新手,我尝试使用面向对象技术来解决这个问题。我已经用普通的编程技术解决了这个问题,但是我不能用OO技术来解决它。Python 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() 

回答

0

你的日期是字符串,你再要互相减去。首先使用这样的东西将它们转换为整数或浮点数:

expectedDate = [int(i) for i in (input().split(" "))] 
actualDate = [int(i) for i in (input().split(" "))] 

这是否解决了您的问题?


如果你只想调用getFine.print()功能,而不是其他funtions,你可以调用的方法getFine.print()这些类的方法。因为你很可能要一年的月份和日期分开上的每个函数调用,你可以那部分转移到init方法

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() 
+0

谢谢你这么多的时间和帮助,它的工作,我学到新的东西小时后头部划伤:) – Kush

相关问题