Re: OOP with MyTime
On Wednesday, July 2, 2014 4:02:00 PM UTC-4, MRAB wrote: If you want 'between' to be an instance method of the MyTime class, it needs 'self' as well as the 2 arguments 't1' and 't2'. You can then compare the hours, minutes and seconds of self against those of t1 and t2: def between(self, t1, t2): return (t1.hours, t1.minutes, t1.seconds) = (self.hours, self.minutes, self.seconds) and (self.hours, self.minutes, self.seconds) = (t2.hours, t2.minutes, t2.seconds) That could be shortened further using chained comparisons. Note that the code assumes that the times t1 and t2 are ordered, i.e. that time t1 is not later/greater than time t2. So I've now gotten this: class MyTime: def __init__(self, hrs=0, mins=0, secs=0): self.hours = hrs self.minutes = mins self.seconds = secs if self.seconds = 60: self.minutes += self.seconds // 60 self.seconds = self.seconds % 60 if self.minutes = 60: self.hours += self.minutes // 60 self.minutes = self.minutes % 60 if self.hours = 24: self.hours = self.hours % 24 def get_sec(self): return (self.hours * 60 + self.minutes) * 60 + self.seconds def __str__(self): return {:02d}:{:02d}:{:02d}.\ format(self.hours, self.minutes, self.seconds) def between(self, t1, t2): return (t1.hours, t1.minutes, t1.seconds) = (self.hours, self.minutes, self.seconds) and (self.hours, self.minutes, self.seconds) = (t2.hours, t2.minutes, t2.seconds) t1 = MyTime(9, 59, 59) print(t1 =, t1) t2 = MyTime(10, 0, 1) print(t2 =, t2) t3 = MyTime(10, 0, 0) print(t3 =, t3) print(between(t2, t3, t1) =, between(t2, t3, t1)) print(between(t1, t3, t2) =, between(t1, t3, t2)) print(between(t3, t1, t2) =, between(t3, t1, t2)) print(between(t1, t2, t3) =, between(t1, t2, t3)) Am I on the right track or? Not sure where to go from here -- https://mail.python.org/mailman/listinfo/python-list
Re: OOP with MyTime
On Thu, Jul 3, 2014 at 10:51 PM, kjaku...@gmail.com wrote: So I've now gotten this: class MyTime: def between(self, t1, t2): return (t1.hours, t1.minutes, t1.seconds) = (self.hours, self.minutes, self.seconds) and (self.hours, self.minutes, self.seconds) = (t2.hours, t2.minutes, t2.seconds) print(between(t2, t3, t1) =, between(t2, t3, t1)) And what happens when you run this code? A NameError, I would expect. Do you understand how to define and call methods? ChrisA -- https://mail.python.org/mailman/listinfo/python-list
Re: OOP with MyTime
On Thursday, July 3, 2014 9:01:09 AM UTC-4, Chris Angelico wrote: And what happens when you run this code? A NameError, I would expect. Do you understand how to define and call methods? ChrisA Altered the code. But yes a nameerror came up class MyTime: def __init__(self, hrs=0, mins=0, secs=0): self.hours = hrs self.minutes = mins self.seconds = secs if self.seconds = 60: self.minutes += self.seconds // 60 self.seconds = self.seconds % 60 if self.minutes = 60: self.hours += self.minutes // 60 self.minutes = self.minutes % 60 if self.hours = 24: self.hours = self.hours % 24 def get_sec(self): return (self.hours * 60 + self.minutes) * 60 + self.seconds def __str__(self): return {:02d}:{:02d}:{:02d}.\ format(self.hours, self.minutes, self.seconds) def between(self, t1, t2): return (t1.get_sec() = (self.get_sec()) and (self.get_sec()) = (t2.get_sec()) s = MyTime() t1 = s(9, 59, 59) print(t1 =, t1) t2 = s(10, 0, 1) print(t2 =, t2) t3 = s(10, 0, 0) print(t3 =, t3) print(between(t2, t3, t1) =, s.between(t2, t3, t1)) print(between(t1, t3, t2) =, s.between(t1, t3, t2)) print(between(t3, t1, t2) =, s.between(t3, t1, t2)) -- https://mail.python.org/mailman/listinfo/python-list
Re: OOP with MyTime
On 2014-07-03 13:51, kjaku...@gmail.com wrote: On Wednesday, July 2, 2014 4:02:00 PM UTC-4, MRAB wrote: If you want 'between' to be an instance method of the MyTime class, it needs 'self' as well as the 2 arguments 't1' and 't2'. You can then compare the hours, minutes and seconds of self against those of t1 and t2: def between(self, t1, t2): return (t1.hours, t1.minutes, t1.seconds) = (self.hours, self.minutes, self.seconds) and (self.hours, self.minutes, self.seconds) = (t2.hours, t2.minutes, t2.seconds) That could be shortened further using chained comparisons. Note that the code assumes that the times t1 and t2 are ordered, i.e. that time t1 is not later/greater than time t2. So I've now gotten this: class MyTime: def __init__(self, hrs=0, mins=0, secs=0): self.hours = hrs self.minutes = mins self.seconds = secs if self.seconds = 60: self.minutes += self.seconds // 60 self.seconds = self.seconds % 60 if self.minutes = 60: self.hours += self.minutes // 60 self.minutes = self.minutes % 60 if self.hours = 24: self.hours = self.hours % 24 def get_sec(self): return (self.hours * 60 + self.minutes) * 60 + self.seconds def __str__(self): return {:02d}:{:02d}:{:02d}.\ format(self.hours, self.minutes, self.seconds) def between(self, t1, t2): return (t1.hours, t1.minutes, t1.seconds) = (self.hours, self.minutes, self.seconds) and (self.hours, self.minutes, self.seconds) = (t2.hours, t2.minutes, t2.seconds) t1 = MyTime(9, 59, 59) print(t1 =, t1) t2 = MyTime(10, 0, 1) print(t2 =, t2) t3 = MyTime(10, 0, 0) print(t3 =, t3) print(between(t2, t3, t1) =, between(t2, t3, t1)) print(between(t1, t3, t2) =, between(t1, t3, t2)) print(between(t3, t1, t2) =, between(t3, t1, t2)) print(between(t1, t2, t3) =, between(t1, t2, t3)) Am I on the right track or? Not sure where to go from here You need to decide whether you want 'between' to be a method of the MyTime class or a separate function. In the above code it's defined as a method, so you can say: t2.between(t3, t1) which means is t2 between t3 and t1?. That would return False because t3 is greater than t1, but: t2.between(t1, t3) would return True. (I _did_ say that it assumes that the times are ordered.) BTW, gmail is messing up your messages. This will tell you how to fix it: https://wiki.python.org/moin/GoogleGroupsPython -- https://mail.python.org/mailman/listinfo/python-list
Re: OOP with MyTime
On Thu, Jul 3, 2014 at 11:08 PM, kjaku...@gmail.com wrote: Altered the code. But yes a nameerror came up When that sort of thing happens, you have three basic approaches to solving the problem. 1) Read the traceback, look at the line of code it points to, and see if you can figure out what it means. 2) Post here with the full traceback so we have a chance of being able to help you 3) Play 20 questions with us, while making the gathering of information as hard as pulling teeth. Suggestion: The third option is the least effective. :) ChrisA -- https://mail.python.org/mailman/listinfo/python-list
Re: OOP with MyTime
On Thursday, July 3, 2014 9:11:49 AM UTC-4, MRAB wrote: On 2014-07-03 13:51, kjaku...@gmail.com wrote: On Wednesday, July 2, 2014 4:02:00 PM UTC-4, MRAB wrote: If you want 'between' to be an instance method of the MyTime class, it needs 'self' as well as the 2 arguments 't1' and 't2'. You can then compare the hours, minutes and seconds of self against those of t1 and t2: def between(self, t1, t2): return (t1.hours, t1.minutes, t1.seconds) = (self.hours, self.minutes, self.seconds) and (self.hours, self.minutes, self.seconds) = (t2.hours, t2.minutes, t2.seconds) That could be shortened further using chained comparisons. Note that the code assumes that the times t1 and t2 are ordered, i.e. that time t1 is not later/greater than time t2. So I've now gotten this: class MyTime: def __init__(self, hrs=0, mins=0, secs=0): self.hours = hrs self.minutes = mins self.seconds = secs if self.seconds = 60: self.minutes += self.seconds // 60 self.seconds = self.seconds % 60 if self.minutes = 60: self.hours += self.minutes // 60 self.minutes = self.minutes % 60 if self.hours = 24: self.hours = self.hours % 24 def get_sec(self): return (self.hours * 60 + self.minutes) * 60 + self.seconds def __str__(self): return {:02d}:{:02d}:{:02d}.\ format(self.hours, self.minutes, self.seconds) def between(self, t1, t2): return (t1.hours, t1.minutes, t1.seconds) = (self.hours, self.minutes, self.seconds) and (self.hours, self.minutes, self.seconds) = (t2.hours, t2.minutes, t2.seconds) t1 = MyTime(9, 59, 59) print(t1 =, t1) t2 = MyTime(10, 0, 1) print(t2 =, t2) t3 = MyTime(10, 0, 0) print(t3 =, t3) print(between(t2, t3, t1) =, between(t2, t3, t1)) print(between(t1, t3, t2) =, between(t1, t3, t2)) print(between(t3, t1, t2) =, between(t3, t1, t2)) print(between(t1, t2, t3) =, between(t1, t2, t3)) Am I on the right track or? Not sure where to go from here You need to decide whether you want 'between' to be a method of the MyTime class or a separate function. In the above code it's defined as a method, so you can say: t2.between(t3, t1) which means is t2 between t3 and t1?. That would return False because t3 is greater than t1, but: t2.between(t1, t3) would return True. (I _did_ say that it assumes that the times are ordered.) BTW, gmail is messing up your messages. This will tell you how to fix it: https://wiki.python.org/moin/GoogleGroupsPython I keep getting an invalid syntax on the t1 = (9, 59, 59) line, not sure why? t1 = (9, 59, 59) print(t1 =, t1) t2 = (10, 0, 1) print(t2 =, t2) t3 = (10, 0, 0) print(t3 =, t3) print(between(t2, t3, t1) =, t2.between(t3, t1)) -- https://mail.python.org/mailman/listinfo/python-list
Re: OOP with MyTime
On Fri, Jul 4, 2014 at 1:21 AM, kjaku...@gmail.com wrote: I keep getting an invalid syntax on the t1 = (9, 59, 59) line, not sure why? t1 = (9, 59, 59) Two points. Firstly, as I said before, posting the entire exception helps us enormously. Secondly, with most computerized parsers, the file is processed top-down, left-to-right, so it's possible for a syntax error to be discovered a bit after where it actually happens - but not before. So when you get parsing errors, check the immediately preceding line; sometimes it's there. Since you haven't shown us that line, we have no idea what's happening. Showing us the code below the highlighted error line is of no value; showing us the code before that line is helpful. Also: Please don't use Google Groups, or if you must, please clean up its messes. ChrisA -- https://mail.python.org/mailman/listinfo/python-list
Re: OOP with MyTime
On 03/07/2014 16:21, kjaku...@gmail.com wrote: On Thursday, July 3, 2014 9:11:49 AM UTC-4, MRAB wrote: I'm pleased to see that you have answers. In return would you please use the mailing list https://mail.python.org/mailman/listinfo/python-list or read and action this https://wiki.python.org/moin/GoogleGroupsPython to prevent us seeing double line spacing and single line paragraphs, thanks. -- My fellow Pythonistas, ask not what our language can do for you, ask what you can do for our language. Mark Lawrence --- This email is free from viruses and malware because avast! Antivirus protection is active. http://www.avast.com -- https://mail.python.org/mailman/listinfo/python-list
Re: OOP with MyTime
kjaku...@gmail.com writes: I'm trying to write a boolean function that takes two Mytime objects, t1 and t2 as arguments, and returns True if the object falls inbetween the two times. This is a question from the How to Think Like a Computer Scientist book, and I need help. What I've gotten so far: class MyTime: def __init__(self, hrs=0, mins=0, secs=0): self.hours = hrs self.minutes = mins self.seconds = secs def between(t1, t2): if float(t1 = t3) and float(t3 t2): return True else: return False I just don't understand how to make a function that uses MyTime objects into the boolean function? Any help would be great. A method accepts the object itself as the first parameter: import functools @functools.total_ordering class MyTime: ... def inbetween(self, t1, t2): Return whether `self` is in [t1, t2) right-open range. return t1 = self t2 # `self` is the object itself def _astuple(self): return (self.hours, self.minutes, self.seconds) def __lt__(self, other): Return whether `self other`. return self._astuple() other._astuple() def __eq__(self, other): Return whether `self == other`. return self._astuple() == other._astuple() See https://docs.python.org/3/library/functools.html#functools.total_ordering Example: MyTime(1).inbetween(MyTime(0), MyTime(2)) True It is equivalent to: MyTime(0) = MyTime(1) MyTime(2) True -- Akira -- https://mail.python.org/mailman/listinfo/python-list
Re: OOP with MyTime
On 2014-07-02 20:20, kjaku...@gmail.com wrote: I'm trying to write a boolean function that takes two Mytime objects, t1 and t2 as arguments, and returns True if the object falls inbetween the two times. This is a question from the How to Think Like a Computer Scientist book, and I need help. What I've gotten so far: class MyTime: def __init__(self, hrs=0, mins=0, secs=0): self.hours = hrs self.minutes = mins self.seconds = secs def between(t1, t2): if float(t1 = t3) and float(t3 t2): return True else: return False I just don't understand how to make a function that uses MyTime objects into the boolean function? Any help would be great. If you want 'between' to be an instance method of the MyTime class, it needs 'self' as well as the 2 arguments 't1' and 't2'. You can then compare the hours, minutes and seconds of self against those of t1 and t2: def between(self, t1, t2): return (t1.hours, t1.minutes, t1.seconds) = (self.hours, self.minutes, self.seconds) and (self.hours, self.minutes, self.seconds) = (t2.hours, t2.minutes, t2.seconds) That could be shortened further using chained comparisons. Note that the code assumes that the times t1 and t2 are ordered, i.e. that time t1 is not later/greater than time t2. -- https://mail.python.org/mailman/listinfo/python-list