thanks Cameron! Here is what i have so far… new question… how do i test the iadd, imul, etc. operators? Hopefully this time the indents show up. And yes the beginning code came out of our text book I added on some functions myself but they give you a big chunk of it. I am hoping that this is what the professor was looking for. I want to add some more operators but am unsure how to put them in or test them? For example I want to add __ixor__, itruediv, etc. Any other suggestions would be great!
Thanks def gcd(m, n): while m % n != 0: oldm = m oldn = n m = oldn n = oldm % oldn return n class Fraction: def __init__(self, top, bottom): self.num = top self.den = bottom def __str__(self): if self.den == 1: return str(self.num) elif self.num == 0: return str(0) else: return str(self.num) + "/" + str(self.den) def simplify(self): common = gcd(self.num, self.den) self.num = self.num // common self.den = self.den // common def show(self): print(self.num, "/", self.den) def __add__(self, otherfraction): newnum = self.num * otherfraction.den + \ self.den * otherfraction.num newden = self.den * otherfraction.den common = gcd(newnum, newden) return Fraction(newnum // common, newden // common) def __sub__(self, otherfraction): newnum = self.num * otherfraction.den - \ self.den * otherfraction.num newden = self.den * otherfraction.den common = gcd(newnum, newden) return Fraction(newnum // common, newden // common) def __mul__(self, otherfraction): newnum = self.num * otherfraction.num * \ self.den * otherfraction.den newden = self.den * otherfraction.den common = gcd(newnum, newden) return Fraction(newnum // common, newden // common) def __imul__(self, otherfraction): if isinstance(otherfraction): return self__mul__(otherfraction) def __iadd__(self, otherfraction): if isinstance(otherfraction): return self__iadd__(otherfraction) def __truediv__(self, otherfraction): newnum = self.num * otherfraction.num // self.den * otherfraction.den newden = self.den * otherfraction.den common = gcd(newnum, newden) return Fraction(newnum // common, newden // common) def __pow__(self, otherfraction): newnum = self.num * otherfraction.num ** self.den * otherfraction.den newden = self.den * otherfraction.den common = gcd(newnum, newden) return Fraction(newnum // common, newden // common) def __radd__(self, otherfraction): newnum = self.num * otherfraction.num // self.den * otherfraction.den newden = self.den * otherfraction.den common = gcd(newnum, newden) return Fraction(newnum // common, newden // common) def getNum(self): return self.num def getDen(self): return self.den def __gt__(self, otherfraction): return (self.num / self.den) > (otherfraction.num / otherfraction.den) def __lt__(self, otherfraction): return (self.num / self.den) < (otherfraction.num / otherfraction.den) def __eq__(self, otherfraction): return (self.num / self.den) == (otherfraction.num / otherfraction.den) def __ne__(self, otherfraction): return (self.num /self.den) != (otherfraction.num /otherfraction.den) def __is__(self, otherfraction): return (self.num / self.den) is (otherfraction.num / otherfraction.den) def main(): F1 = Fraction(1,2) F2 = Fraction(2,3) print("F1 = ", F1) print("F2 = ", F2) print("Add Fractions: F1 + F2=", Fraction.__add__(F1, F2)) print("Subtract Fractions: F1 - F2=", Fraction.__sub__(F1, F2)) print("Multiply Fractions: F1 * F2=", Fraction.__mul__(F1, F2)) print("True Division with Fractions: F1 / F2=", Fraction.__truediv__(F1, F2)) print("Exponentiation with Fractions: F1 // F2=", Fraction.__pow__(F1, F2)) print("Is F1 Greater than F2?:", Fraction.__gt__(F1, F2)) print("Is F1 less than F2?:", Fraction.__lt__(F1, F2)) print("Is F1 Equal to F2?:", Fraction.__eq__(F1, F2)) print("Is F1 different than F2?:", Fraction.__ne__(F1, F2)) print ("Is F1 same as F2?:", Fraction.__is__(F1, F2)) print("Is:", Fraction.__iadd__(F1, F2)) if __name__ == '__main__': main() > On Aug 6, 2015, at 5:44 PM, Cameron Simpson <c...@zip.com.au> wrote: > > On 06Aug2015 16:55, Quiles, Stephanie <stephanie.quiles...@albright.edu> > wrote: >> I need to do the following assignment. I need to know how do i hard code an >> example for each of the operators I am implementing? What i have so far is >> below? He said he does not care if we plug in some numbers or if we have >> user input numbers, however I am unsure of how to write a program that tests >> each operator? Or can i write one that tests all of them? I don’t know where >> to start with this. Please help! > > For someone who doesn't know where to start, you seem to have a lot of decent > looking code. Is the code below all yours? If so, a good start. > > Also, please try to preserve the indentation when pasting in code; > indentation is critical in Python as you know and incorrect indentation, when > not an outright syntax error, can be a source of bugs. I'll presume your code > was originally indented correctly. > > Note that in this list we _do_ like code to be pasted inline where it can be > seen directly and commented on like any other part of the message text. We're > not big on attachments or links to external things (other than doco citations > like your reference to the operators Python page). > >> You may implement as many of these operators as you like (such as isub, >> itruediv, etc.) You MUST indicate in your header information which operators >> you are implementing, and you MUST hard code an example for each. > > "Header information" is usually an opening comment. So perhaps start the > program with text like this: > > # Here is a Fraction class implementing variaous operators. It currently > # supports: > # > # + (addition) > # - (subtraction) > # * (multiplication) > # / (true division) > # > > and so forth. > > Regarding examples and tests, one workable approach to to make your program > work as a "main program". The idea is that is invoked as a main program it > will run the examples or tests. > > As your code sits now it could be used as a module - someone could place it > into python's library tree and import it, and use your Fraction class. > However, you can of course run it directly at the command prompt, eg: > > % python your-fraction-file.py > > When you do that, the code is still imported as a module but with the special > name '__main__'. So what a lot of python modules do is have a "main" function > which is to be fired only in the command line circumstance, such as: > > def main(): > F1 = Fraction(1, 2) # 1/2 > F2 = Fraction(2, 3) # 2/3 > print("F1 =", F1) > print("F2 =", F2) > print("F1 + F2 =", F1 + F2) > print("F1 - F2 =", F1 - F2) > print("F1 * F2 =", F1 * F2) > > In order to make your program work as both an importable module which defines > the Fraction class but does not run the main function and also as a main > program which defines the class and then runs the main function you put this > piece of boilerplate code on the very bottom of the program: > > if __name__ == '__main__': > main() > > which checks if you're invoking it directly from the command line. If so, run > the main function. > > Hopefully that gives you an idea about hardwiring examples also. > > Regarding tests, you might write a simple function like this: > > def check(label, computed, expected): > ok = computed == expected > if ok: > print(label, 'OK', computed, '==', expected) > else: > print(label, 'BAD', computed, '!=', expected) > return ok > > Then you might consider modifying your main program to run tests instead of > bare examples, replacing: > > print("F1 + F2 =", F1 + F2) > > with: > > check("F1 + F2", F1 + F2, Fraction(7, 6)) > > Because check() returns whther the check was ok, you might even count the > number of failures for some kind of report: > > fail_count = 0 > ... > if not check("F1 + F2", F1 + F2, Fraction(7, 6)): > fail_count += 1 > ... more checks ... > print(fail_count, "failures") > > and so forth. > > This also gets you test code so that you can test your own program for > correctness before submitting your assignment. > > Feel free to return to this list with updated code and new questions. > > Cheers, > Cameron Simpson <c...@zip.com.au> > _______________________________________________ > Tutor maillist - Tutor@python.org > To unsubscribe or change subscription options: > https://mail.python.org/mailman/listinfo/tutor _______________________________________________ Tutor maillist - Tutor@python.org To unsubscribe or change subscription options: https://mail.python.org/mailman/listinfo/tutor