BlackJack hat geschrieben:`Formula.counter` ist keine gute Idee.
Jetzt wollte ich gleich mal anwenden, worüber ich in meinem 'Methoden-Attribut'-Thread bereits so einiges, auch von Dir, gelernt habe. Nun ja, und dann gleich ein Griff ins Klo...

Aber mir ist klar, warum das in diesem Fall nicht so geschickt ist.
BlackJack hat geschrieben:Zu `eval()` sag ich jetzt mal nichts.

Doch, bitte! Ich hab' bereits eine Idee für ein Feature in meinem Kalenderprogramm, das in eine ähnliche Richtung gehen soll, wie die Formelgeschichte hier...
BlackJack hat geschrieben:Was die Kodierungen angeht, wären Unicode-Literale schon der richtige Weg, allerdings muss man dann Zeichenketten sowohl bei der Aus- als auch bei der Eingabe entsprechend umkodieren.
Du meinst also, bevor Literale abgelegt werden (wo auch immer), erstmal mit decode in Unicode-Literale umwandeln und bei Verwendung dann wieder encoden?
BlackJack hat geschrieben:Die Berechnung von `r_margin` erscheint mir ein wenig kompliziert.
Das liegt daran, dass die Berechnung von 'r_margin' ein wenig kompliziert ist.
BlackJack hat geschrieben:Schau Dir mal die `max()`-Funktion an.
O Mann, genau sowas hab' ich gesucht...
BlackJack hat geschrieben:...bei Zeichenkettenformatierung mittels ``%`` den '*' benutzen kann.
Is cool man... Ich muss mal dringend die built-in Funktionen anschauen. Man überfliegt sowas ja meist nur, aber da sind richtige Schätze drin....
Noch 'ne ganz andere Frage:
Was hat es eigentlich mit ``xxx``, `xxx` oder 'xxx' auf sich?
Ich stell' jetzt das Programm nochmal komplett rein, auch wenn's den Thread langsam groß macht...
Code: Alles auswählen
# -*- coding: utf-8 -*-
import os
formulas = []
class Formula(object):
def __init__(self, title, values, formula):
self.title = title
self.values = values
self.formula = formula
def calc(self, value):
return eval(self.formula)
def menue(status):
if os.name == 'nt':
command = 'cls'
else:
command = 'clear'
os.system(command)
status_txt = ('Ihre Auswahl: ',
'OOPS! Falsche Eingabe! Bitte wählen Sie zwischen 1 und %i: ' %
(len(formulas)))
print("Wilkommen zum Programm fuer die Flaechen/Volumenberechnung")
print("von Formen und Koerpern.\n")
print("Bitte waehlen sie aus der folgenden Liste welche Berechnung")
print("sie durchfuehren moechten\n")
print("Benutzerhinweis : Anstatt die ueblichen Kommata (,) benutzen")
print("sie bitte Punkte (.) !\n")
for i in xrange(len(formulas)):
print('%i = %s' % (i+1, formulas[i].title))
print('\n-1 = Formel hinzufügen')
print(' 0 = Ende\n')
return int(raw_input(status_txt[status]))
def bestaetigung(choice):
title_length = len(formulas[choice].title.decode('utf-8'))
print('\n%s\n%s\n' %
(formulas[choice].title,
title_length * '-'))
def berechnung(choice):
value = []
r_margin = len(max(formulas[choice].values)) + 1
for eingabe in formulas[choice].values:
gap = r_margin - len(eingabe.decode('utf-8'))
eingabe = '%s%*s' % (eingabe, gap, ' ')
value.append(float(raw_input(eingabe)))
print('\nErgebnis: %f' %
(formulas[choice].calc(value)))
def add_formula(title=None, values=None, formula=None):
if title == values == formula == None:
counter = 0
values = []
title = raw_input('Formeltitel: ')
while True:
value = raw_input('Name für value[%i]: '% (counter))
counter += 1
if value == '':
break
values.append(value)
formula = raw_input('Formel: ')
formulas.append(Formula(title, values, formula))
def choice(status=0):
while True:
choice = menue(status)
if choice == 0:
print('\nOver and out.')
break
elif choice == -1:
add_formula()
elif 0 < choice <= len(formulas):
bestaetigung(choice - 1)
berechnung(choice - 1)
raw_input()
status = 0
else:
status = 1
def main():
DUMMY = (('Flächenberechnung eines Vierecks',
['Erste Seite:', 'Zweite Seite:'],
'value[0] * value[1]'),
('Volumenberechnung eines Quaders',
['Länge:', 'Breite:', 'Höhe:'],
'value[0] * value[1] * value[2]'),
('Flächenberechnung eines Kreises',
['Radius:'],
'(value[0] * value[0]) * 3.1415926535897931'),
('Flächenberechnung eines Dreiecks',
['Länge:', 'Höhe:'],
'0.5 * value[0] * value[1]'))
for title, values, formula in DUMMY:
add_formula(title, values, formula)
choice()
if __name__ == '__main__':
main()
Gruß
mutetella