@MaximalMax: Die Eingabedaten werden sicher von aussen vorgegeben sein, zum Beispiel weil die so aus einer Textdatei kommen, oder weil der Aufgabensteller das so vorgibt. Denn wenn man sich das so aussuchen könnte, dann geht Dein Vorschlag nicht weit genug, denn dann könnte man auch einfach das hier als Lösung vorschlagen:
Code: Alles auswählen
konzert_ausgaben = 20
kino_ausgaben = 20.5
sportschuhe_ausgaben = 60
@Spedex: Die zwei Zeilen lassen sich trivial durch Einsetzen des ersten Teilergebnisses in den zweiten Ausdruck zu einer Zeile zusammen fassen. Bei dem `split()` würde man auch nur das Gleichheitszeichen angeben, ohne Leerzeichen:
Code: Alles auswählen
ausgaben = [" Konzert = 20", "Kino = 20.5", " Sportschuhe = 60"]
konzert_ausgaben = float(ausgaben[0].split("=")[1])
kino_ausgaben = float(ausgaben[1].split("=")[1])
sportschuse_ausgaben = float(ausgaben[2].split("=")[1])
Allerdings wiederholt man als Programmierer keinen Code. Das ist unnötig Arbeit und auch unnötig fehleranfällig. Wenn man jetzt beispielsweise das `split()` auf eine Trennstelle begrenzen oder gar durch `partition()` ersetzen möchte, muss man das drei mal machen und aufpassen, dass man das an jeder Stelle gleichwertig ändert. Darum würde man das in eine Funktion herausziehen:
Code: Alles auswählen
def get_price(text):
return float(text.split("=")[1])
def main():
ausgaben = [" Konzert = 20", "Kino = 20.5", " Sportschuhe = 60"]
konzert_ausgaben = get_price(ausgaben[0])
kino_ausgaben = get_price(ausgaben[1])
sportschuhe_ausgaben = get_price(ausgaben[2])
Nun kann man leicht an *einer* Stelle von `split()` auf `partition()` umstellen und beispielsweise auch prüfen ob der Name des Postens zu dem passt, was man am jeweiligen Index von `ausgaben` erwartet. Und man muss sich auch keine Gedanken mehr darüber machen ob das nun besonders kurz formuliert ist. Mit sinnvoller Fehlerprüfung werden das auch ein paar Zeilen:
Code: Alles auswählen
def get_price(expected_item_name, text):
item_name, equal, price_text = text.partition("=")
if equal != "=":
raise ValueError("expected '=' in `text`")
item_name = item_name.strip()
if item_name != expected_item_name:
raise ValueError(
f"expected item namen {expected_item_name}, got {item_name}"
)
return float(price_text)
def main():
ausgaben = [" Konzert = 20", "Kino = 20.5", " Sportschuhe = 60"]
konzert_ausgaben = get_price("Konzert", ausgaben[0])
kino_ausgaben = get_price("Kino", ausgaben[1])
sportschuhe_ausgaben = get_price("Sportschuhe", ausgaben[2])
Unschön ist jetzt noch das man hier manuell aufsteigende Indexwerte für die Zugriffe auf `ausgaben` schreiben muss, das schreit nach einer Art von direkter oder indirekter Schleife über die Ausgabenliste. Hier über einen Generatorausdruck:
Code: Alles auswählen
konzert_ausgaben, kino_ausgaben, sportschuhe_ausgaben = (
get_price(item_name, text)
for item_name, text in zip(
["Konzert", "Kino", "Sportschuhe"], ausgaben
)
)
Oder mit `itertools.starmap()`:
Code: Alles auswählen
konzert_ausgaben, kino_ausgaben, sportschuhe_ausgaben = starmap(
get_price, zip(["Konzert", "Kino", "Sportschuhe"], ausgaben)
)