Hi ich wage mich momentan an meinem ersten eigenen python Projekt. Ich möchte einen Taschenrechner programmieren.
Dieser soll unteranderem durch Aufruf der Funktion die Liste der möglichen operationen erweitern, hierbei habe ich das Problem das die erweiterte Liste beim nächsten Aufruf wieder normal ist, wie kann ich das ändern das die Erweiterung in der Liste dauerhaft bleibt?
Mein zweites Problem ist das ich vom Anwender beliebig viele Summanden übergeben will also bspw :
n=input('Anzahl der Summanden :n= ') und später Dan die Summe daraus also x=n1+n2+n3
jedenfalls kann ich so wie ich das gemacht habe nur das letzte n aufrufen, wie kann ich das ändern?
def Trechner():
liste=['1.addition','2.subtraktion','3.multiplikation','4.division','5.Hinzufügen']
for x in liste:
print(x)
q=len(liste)
b=input('wählen Sie 1 bis {}: '.format(q))
b=int(b)
if b==5:
name=input('name={}. '.format(q+1))
liste.append(name)
print(liste)
n=input('anzahl der Summanden:n= ')
n=int(n)
for i in range(1,n+1):
a=input('a{}= '.format(i))
a=int(a)
print(a)
print(a1+a2)
1.Liste in einer funktion erweitern
- __blackjack__
- User
- Beiträge: 14053
- Registriert: Samstag 2. Juni 2018, 10:21
- Wohnort: 127.0.0.1
- Kontaktdaten:
@Johnny: Eingerückt wird in Python mit vier Leerzeichen pro Ebene.
Was ist denn ein `Trechner`? Falls das `Taschenrechner` heissen sollte, dann schreib das auch. Namen sollen dem Leser verraten was der Wert dahinter bedeutet. Also keine Abkürzungen und keine einbuchstabigen Namen und auch keine so supergenerischen Namen wie `liste`. Grunddatentypen haben in Namen auch sowieso nichts zu suchen.
Namen werden in Python klein_mit_unterstrichen geschrieben. Ausnahmen sind Konstanten (KOMPLETT_GROSS) und Klassen (MixedCase). Also `taschenrechner()`, aber auch das ist kein Name für eine Funktion. Funktionen und Methoden werden üblicherweise nach der Tätigkeit benannt die sie durchführen. Taschenrechner ist keine Tätigkeit.
Man muss auch nicht jedes noch so kleine Zwischenergebnis an einen Namen binden.
Egal was der Benutzer eingibt, er wird immer nach Summanden gefragt‽ Und bei der Eingabe einer 5 vorher noch nach etwas was an das Menü angehängt werden soll‽
Zum Schluss versuchst Du zwei Variablen zu addieren die nirgends definiert werden. Wenn Du die eingegebenen Wert addieren willst, dann musst Du Dir die halt irgendwo merken. Am einfachsten in einer Liste.
Zwischenergebnis (ungetestet):
Und natürlich bleibt das Anhängen von einem Element an die `menue`-Liste nicht über Aufrufe der Funktion hinweg erhalten, denn am Anfang wird ja diese feste Liste zugewiesen, ohne einen Wert der vielleicht in einem vorherigen Aufruf mal an die zu *dem* Zeitpunkt bestehende *andere* Liste mal angehängt wurde.
Falls Du Ergebnisse aus einem Funktionsaufruf in einem erneuten Aufruf verwenden willst, braucht man Argumente und Rückgabewerte.
Was ist denn ein `Trechner`? Falls das `Taschenrechner` heissen sollte, dann schreib das auch. Namen sollen dem Leser verraten was der Wert dahinter bedeutet. Also keine Abkürzungen und keine einbuchstabigen Namen und auch keine so supergenerischen Namen wie `liste`. Grunddatentypen haben in Namen auch sowieso nichts zu suchen.
Namen werden in Python klein_mit_unterstrichen geschrieben. Ausnahmen sind Konstanten (KOMPLETT_GROSS) und Klassen (MixedCase). Also `taschenrechner()`, aber auch das ist kein Name für eine Funktion. Funktionen und Methoden werden üblicherweise nach der Tätigkeit benannt die sie durchführen. Taschenrechner ist keine Tätigkeit.
Man muss auch nicht jedes noch so kleine Zwischenergebnis an einen Namen binden.
Egal was der Benutzer eingibt, er wird immer nach Summanden gefragt‽ Und bei der Eingabe einer 5 vorher noch nach etwas was an das Menü angehängt werden soll‽
Zum Schluss versuchst Du zwei Variablen zu addieren die nirgends definiert werden. Wenn Du die eingegebenen Wert addieren willst, dann musst Du Dir die halt irgendwo merken. Am einfachsten in einer Liste.
Zwischenergebnis (ungetestet):
Code: Alles auswählen
#!/usr/bin/env python3
def main():
menue = [
"1. Addition",
"2. Subtraktion",
"3. Multiplikation",
"4. Division",
"5. Hinzufügen",
]
for item in menue:
print(item)
choice = int(input(f"Wählen Sie 1 bis {len(menue)}: "))
if choice == 5:
menue.append(input(f"name={len(menue) + 1}: "))
print(menue)
values = list()
for i in range(1, int(input("Anzahl der Summanden: n= ")) + 1):
value = int(input("a{}= ".format(i)))
values.append(value)
print(value)
print(sum(values))
if __name__ == "__main__":
main()
Falls Du Ergebnisse aus einem Funktionsaufruf in einem erneuten Aufruf verwenden willst, braucht man Argumente und Rückgabewerte.
“Vir, intelligence has nothing to do with politics!” — Londo Mollari
Danke für die hilfreiche und schnelle Antwort ich werde deine Ratschläge in Zukunft umsetzen .
Was das Anhängen von Elementen an die 'menue'-Liste betrifft kennst du einen Weg wie ich die Elemente über Aufrufe der Funktion hinweg erhalten kann ,denn ich wollte im weiteren den Code von Außen ähnlich wie die 'menue'-Liste mit neuen Formeln erweitern.
Was das Anhängen von Elementen an die 'menue'-Liste betrifft kennst du einen Weg wie ich die Elemente über Aufrufe der Funktion hinweg erhalten kann ,denn ich wollte im weiteren den Code von Außen ähnlich wie die 'menue'-Liste mit neuen Formeln erweitern.
- __blackjack__
- User
- Beiträge: 14053
- Registriert: Samstag 2. Juni 2018, 10:21
- Wohnort: 127.0.0.1
- Kontaktdaten:
@Johnny: Ich schrob ja schon Argumente und Rückgabewerte. Wenn das Menü nicht in der Funktion immer an den gleichen Ausgangswert gebunden werden soll, muss es als Argument übergeben werden. Dann könnte man es auch in der Funktion erweitern und das wäre ausserhalb sichtbar, dann ist das aber keine ”reine” Funktion mehr und man sollte das deutlich Dokumentieren, dass die Liste verändert wird. Sauberer wäre es wenn die Funktion dann auch die Menüliste als Rückgabewert hat, und falls der Benutzer etwas hinzufügen möchte, eine neue, veränderte Liste zurückgibt.
“Vir, intelligence has nothing to do with politics!” — Londo Mollari