um mal schnell im interaktiven Modus ein paar Dualzahlen zu verrechnen.
Ja, mein Taschenrechner kann das auch (aber nicht mit so großen Zahlen ...) und ganz bestimmt gibt es schon fertige Module, die das können.
Mir geht es darum, ob die Art, wie ich es umgesetzt habe, "Python thinking" ist. Macht der Pythologe an sich das so?
Code: Alles auswählen
# dual.py
# Grundrechenarten mit Dualzahlen
class Dual(object):
def __init__(self,value):
self.value = int(value,2) if isinstance(value,str) else value
if isinstance(self.value,float):
raise ValueError # float is not supported
def __str__(self):
sgn = "-" if self.value<0 else ""
bin = "" if self.value!=0 else "0"
dec = abs(self.value)
while dec>0:
bin += str(dec & 1)
dec >>= 1
return sgn+bin[::-1]
def __add__(self,bin):
return Dual(self.value+bin.value)
def __sub__(self,bin):
return Dual(self.value-bin.value)
def __mul__(self,bin):
return Dual(self.value*bin.value)
def __div__(self,bin):
return Dual(self.value//bin.value)
def __mod__(self,bin):
return Dual(self.value%bin.value)
if __name__ == "__main__":
z1 = Dual(13)
z2 = Dual(5)
print "%s + %s = %s" %(z1,z2,z1+z2)
print "%s - %s = %s" %(z1,z2,z1-z2)
print "%s * %s = %s" %(z1,z2,z1*z2)
print "%s / %s = %s" %(z1,z2,z1/z2)
print "%s %% %s = %s" %(z1,z2,z1%z2)