Topic: problema con l'uso di una classe  (Letto 60 volte)

0 Utenti e 1 Visitatore stanno visualizzando questo topic.

Offline vivo

  • python unicellularis
  • *
  • Post: 1
  • Punti reputazione: 0
    • Mostra profilo
problema con l'uso di una classe
« il: Gennaio 09, 2021, 10:57 »
ciao a tutti.
Ho visto un esercizio su un libro dove devo creare la classe "Fraction" dove trasforma due numeri interi in frazione ridotta ai minimi termini solo che quando provo a farla andare mi dice questo:  https://prnt.sc/wjm6gq
questa invece è la classe:  https://prnt.sc/wjm6ut

Offline nuzzopippo

  • python neanderthalensis
  • ****
  • Post: 330
  • Punti reputazione: 0
    • Mostra profilo
Re:problema con l'uso di una classe
« Risposta #1 il: Gennaio 09, 2021, 16:54 »
L'output che ricevi è perfettamente regolare, descrive l'oggetto e da l'indirizzo in memoria dello stesso.

Qualora Tu voglia una rappresentazione di tipo stringa di un oggetto della classe da Te creata devi implementare nella Tua classe i metodi "__repr__" o "__str__", magari non ci sei ancora incappato ma le classi sono argomenti complessi, da affrontarsi con un buon libro.

Per altro, ho qualche perplessità circa l'algoritmo da Te implementato, giusto per farti un esempio di uso delle funzioni ho cercato di re-implementarlo dopo essermi rispolverato il vecchio libro di aritmetica (chi se lo ricorda più come si fa ;) ):
Python 3.8.5 (default, Jul 28 2020, 12:59:40) 
[GCC 9.3.0] on linux
Type "help", "copyright", "credits" or "license()" for more information.
>>> class Fraction:
def __init__(self, numeratore=0, denominatore=1):
if not denominatore:
raise ZeroDivisionError('Il denominatore non può essere nullo')
n = abs(numeratore)
d = abs(denominatore)
if n % d == 0:
self.numeratore = n / d
self.denominatore = 1
elif d % n == 0:
self.numeratore = 1
self.denominatore = d / n
else:
if n < d:
a = n // 2
else:
a = d // 2
while a > 1:
if n % a == 0 and d % a == 0:
n = n / a
d = d / a
a -= 1
self.numeratore = n
self.denominatore = d
if numeratore < 0:
self.numeratore = -self.numeratore
if denominatore < 0:
self.denominatore = -self.denominatore
def __str__(self):
return "numeratore %d denominatore % d" % (self.numeratore, self.denominatore)


>>> x = Fraction(3, 6)
>>> print(x)
numeratore 1 denominatore  2
>>> x = Fraction(53, 7)
>>> print(x)
numeratore 53 denominatore  7
>>> x = Fraction(21, 7)
>>> print(x)
numeratore 3 denominatore  1
>>> x = Fraction(-21, 7)
>>> print(x)
numeratore -3 denominatore  1
>>> x
<__main__.Fraction object at 0x7fc8693cb6d0>
>>> print(x.numeratore)
-3.0
>>> print(x.denominatore)
1
>>>