Grundlegend, was ich für das Programm brauche, ist ein so einfacher Bruchrechner (für Addition, Subtraktion, Multiplikation und Division) für die a einzige Zeile eingegeben werden, zum Beispiel:
-input: 1/7 + 3/5
-Ausgang: 26/35
Tipps, um einen Fraktionsrechner-Code optimierter zu machen (schneller und mit weniger Speicher)
Meine anfängliche Code:
import sys
def euclid(numA, numB):
while numB != 0:
numRem = numA % numB
numA = numB
numB = numRem
return numA
for wejscie in sys.stdin:
wyjscie = wejscie.split(' ')
a, b = [int(x) for x in wyjscie[0].split("/")]
c, d = [int(x) for x in wyjscie[2].split("/")]
if wyjscie[1] == '+':
licz = a * d + b * c
mian= b * d
nwd = euclid(licz, mian)
konA = licz/nwd
konB = mian/nwd
wynik = str(konA) + '/' + str(konB)
print(wynik)
elif wyjscie[1] == '-':
licz= a * d - b * c
mian= b * d
nwd = euclid(licz, mian)
konA = licz/nwd
konB = mian/nwd
wynik = str(konA) + '/' + str(konB)
print(wynik)
elif wyjscie[1] == '*':
licz= a * c
mian= b * d
nwd = euclid(licz, mian)
konA = licz/nwd
konB = mian/nwd
wynik = str(konA) + '/' + str(konB)
print(wynik)
else:
licz= a * d
mian= b * c
nwd = euclid(licz, mian)
konA = licz/nwd
konB = mian/nwd
wynik = str(konA) + '/' + str(konB)
print(wynik)
die ich reduziert:
import sys
def euclid(numA, numB):
while numB != 0:
numRem = numA % numB
numA = numB
numB = numRem
return numA
for wejscie in sys.stdin:
wyjscie = wejscie.split(' ')
a, b = [int(x) for x in wyjscie[0].split("/")]
c, d = [int(x) for x in wyjscie[2].split("/")]
if wyjscie[1] == '+':
print("/".join([str((a * d + b * c)/euclid(a * d + b * c, b * d)),str((b * d)/euclid(a * d + b * c, b * d))]))
elif wyjscie[1] == '-':
print("/".join([str((a * d - b * c)/euclid(a * d - b * c, b * d)),str((b * d)/euclid(a * d - b * c, b * d))]))
elif wyjscie[1] == '*':
print("/".join([str((a * c)/euclid(a * c, b * d)),str((b * d)/euclid(a * c, b * d))]))
else:
print("/".join([str((a * d)/euclid(a * d, b * c)),str((b * c)/euclid(a * d, b * c))]))
Alle Ratschläge, wie Sie dies weiter verbessern können, sind willkommen.
Bearbeiten: eine weitere Sache, die ich vergessen zu erwähnen - der Code kann keine Bibliotheken außer sys verwenden.
Ist das Hausaufgaben? –
Ja, ist es. Bitte beachten Sie, dass ich keine vollständige Lösung benötige. Was ich suche, sind allgemeine Tipps, die in diesem Fall angewendet werden können. –
durch den Aufruf 'euclid (a * d, b * c)' mehrere Male haben Sie wahrscheinlich langsamer als die Version, speichert das Ergebnis in einer Variablen –