Buonasera,
Da qualche settimana mi sono affacciato alla scrittura di codici con "Python" e per esercitarmi ho deciso di creare una classe "Frazioni". In sostanza si occupa di leggere due frazioni, fare le operazioni elementari e semplificare il risultato con l'algoritmo di Euclide.
Ebbene, il programma andava benone fino a che non ho deciso di implementare un menù (con else/if funziona) tramite un "vocabolario". La mia idea era di fare una sorta di "switch", come in Java, ma a quanto pare non è possibile; dunque mi sono deciso a procedere come precedentemente spiegato.
Al momento dell'esecuzione appaiono errori multipli:
File "<ipython-input-65-79758fa4186e>", line 122
7: f3 = f1 + f2
^
SyntaxError: invalid syntax
Spero in un vostro ausilio, di seguito il codice completo.
SyntaxError: invalid syntax
class Frazione:
def __init__(self, numeratore=0, denominatore=0):
self.__numeratore = numeratore
self.__denominatore = denominatore
@property
def numeratore(self):
return self.__numeratore
@numeratore.setter
def numeratore(self, numeratore):
self.__numeratore = numeratore
@property
def denominatore(self):
return self.__denominatore
@denominatore.setter
def denominatore(self, numeratore):
self.__denominatore = denominatore
def __add__(self, f2):
denominatore = self.__denominatore * f2.denominatore
numeratore = denominatore / self.__denominatore * self.__numeratore + denominatore / f2.denominatore * f2.numeratore
if numeratore > denominatore:
a = numeratore
b = denominatore
else:
a = denominatore
b = numeratore
while(b!=0):
r = a % b
a = b
b = r
mcd = a
numeratore = numeratore / mcd
denominatore = denominatore / mcd
return Frazione(numeratore, denominatore)
def __sub__(self, f2):
denominatore = self.__denominatore * f2.denominatore
numeratore = denominatore / self.__denominatore * self.__numeratore + denominatore / f2.denominatore * f2.numeratore
if numeratore > denominatore:
a = numeratore
b = denominatore
else:
a = denominatore
b = numeratore
while(b!=0):
r = a % b
a = b
b = r
mcd = a
numeratore = numeratore / mcd
denominatore = denominatore / mcd
return Frazione(numeratore, denominatore)
def __mul__(self, f2):
denominatore = self.__denominatore * f2.denominatore
numeratore = self.__numeratore * f2.numeratore
if numeratore > denominatore:
a = numeratore
b = denominatore
else:
a = denominatore
b = numeratore
while(b!=0):
r = a % b
a = b
b = r
mcd = a
numeratore = numeratore / mcd
denominatore = denominatore / mcd
return Frazione(numeratore, denominatore)
def __mul__(self, f2):
denominatore = self.__denominatore * f2.numeratore
numeratore = self.__numeratore * f2.denominatore
if numeratore > denominatore:
a = numeratore
b = denominatore
else:
a = denominatore
b = numeratore
while(b!=0):
r = a % b
a = b
b = r
mcd = a
numeratore = numeratore / mcd
denominatore = denominatore / mcd
return Frazione(numeratore, denominatore)
def __str__(self):
return str(self.__numeratore) + "/" + str(self.__denominatore)
def riduzione(self, valore):#self
switcher = {
1: print("La prima frazione corrisponde a " , f1,"\n"),
2: print("La seconda frazione corrisponde a " , f2,"\n"),
3: print("Inserire il nuovo numeratore (f1)")
f1.numeratore = input(),
4: print("Inserire il nuovo denominatore (f1)")
f1.denominatore = input(),
5: print("Inserire il nuovo numeratore (f2):")
f2.numeratore = input(),
6: print("Inserire il nuovo denominatore (f2):")
f2.denominatore = input(),
7: f3 = f1 + f2
print("La somma tra la prima frazione e la seconda vale " , f3,"\n"),
8: f3 = f1 - f2
print("La differenza tra la prima frazione e la seconda vale " , f3,"\n"),
9: f3 = f1 * f2
print("Il prodotto tra la prima frazione e la seconda vale " , f3,"\n"),
10: f3 = f1 / f2
print("Il rapporto tra la prima frazione e la seconda vale " , f3,"\n"),
}
return switcher.get(valore, "Il valore inserito non è stato riconosciuto.")
#-------------------------------------------------------------
print("Inserire numeratore e denominatore della prima frazione")
f1 = Frazione(int(input( "Numeratore= ")), int(input("Denominatore= ")))
print("Inserire numeratore e denominatore della seconda frazione")
f2 = Frazione(int(input( "Numeratore= ")), int(input("Denominatore= ")))
cnt=0
while (cnt!= 'e'):
print ("""Cosa si desidera fare ? \n
Premere 1 per visualizzare la prima frazione \n
Premere 2 per visualizzare la seconda frazione \n
Premere 3 per modificare il numeratore della prima frazione \n
Premere 4 per modificare il denominatore della prima frazione \n
Premere 5 per modificare il numeratore della seconda frazione \n
Premere 6 per modificare il denominatore della seconda frazione \n
Premere 7 per eseguire una addizione \n
Premere 8 per eseguire una sottrazione \n
Premere 9 per eseguire una moltiplicazione \n
Premere 10 per eseguire una divisione \n
Premere 'e' per uscire dal programma.""") #""" servono per fare le cose su più righe
ItemsMenu = Frazione()
print(ItemsMenu.riduzione(int(input())))