Vorstellung + Frage zum Verständniss

Wenn du dir nicht sicher bist, in welchem der anderen Foren du die Frage stellen sollst, dann bist du hier im Forum für allgemeine Fragen sicher richtig.
Antworten
Dadeldi
User
Beiträge: 8
Registriert: Samstag 22. Januar 2022, 14:50

Hallo

Ich bin der Dadeldi, 50 Jahre jung und würde mir gerne Python beibringen. Ich habe 0 Erfahrung und fange ganz von null an.
Ich habe die ersten Kapitel von meinem Kurs durchgearbeitet und wollte nun einfach mal so zum üben, ein einfaches Programm schreiben welches vor, Nachname und Jahrgang abfragt und danach ausgibt wie alt ich bin.
Ich hab es zwar nach ein paar Fehlermeldungen hinbekommen, aber ich verstehe nicht warum es so ist. Kann mir vielleicht jemand helfen meinen Knopf zu lösen?

Mein Programm sieht folgendermassen aus: (gerne dürft Ihr mich belehren wenn ich etwas falsches oder unnötiges gemacht habe)

Code: Alles auswählen

vorname =input("Wie lautet Dein Vorname? ")
nachname = input("Wie lautet Dein Nachname? ")
jahrgang = input("Gib bitte Deinen Jahrgang ein: ")

jahr = 2022

ergebnis = int(jahr) - int(jahrgang)


print("Hallo " + vorname,nachname, "Dein Alter ist: " + (str(ergebnis)))
Meine Frage dazu: Warum muss ich um das Alter anzuzeigen das ganze so verpacken?

Code: Alles auswählen

+ (str(ergebnis))
warum funktioniert es nicht einfach wenn ich nur + ergebnis schreibe?

Code: Alles auswählen

+ ergebnis
weshalb benötige ich noch das str ?

Wäre echt nett wenn sich jemand die Zeit nehmen könnte um mir das zu erklären.
Benutzeravatar
sparrow
User
Beiträge: 4195
Registriert: Freitag 17. April 2009, 10:28

Weil Ergebnis vom Typ "int" ist. Also eine Ganzzahl. Und eine Ganzzahl kann man nicht zu einer Zeichenkette addieren. Deshalb wird hier mit str() eine Ganzzahl zur Zeichenkette gemacht. Das Ergebnis dieser Funktion ist also von einem anderen Typ.

Allerdings baut man in Python keine Zeichenketten mit + zusammen. Man benutzt f-Strings:

Code: Alles auswählen

print(f"Hallo {vorname} {nachname}. Dein Alter ist: {ergebnis}.")
Benutzeravatar
__blackjack__
User
Beiträge: 13111
Registriert: Samstag 2. Juni 2018, 10:21
Wohnort: 127.0.0.1
Kontaktdaten:

Um das noch mal mit Beispielen zu unterfüttern, was sollte ``"hallo" + 42`` sinnvolles ergeben? Was ist mit ``"47" + 11``? Man könnte da ja jetzt sagen, dass man automagisch den ersten Operanden so umwandelt, dass man ihn sinnvoll ”addieren” kann. Dann wäre im ersten Fall die Frage ob "hallo" dann zu 0 werden soll, oder zu einem speziellen Wert wie `math.nan`, oder da dann doch eine Ausnahme ausgelöst werden soll. Oder sollte der zweite Operand automagisch in eine Zeichenkette umgewandelt werden? Was würde man bei ``"47" + 11`` als Leser erwarten? Dass da 58 raus kommt, oder die bekannte Kölner Hausnummer "4711"?

Die Python-Entwickler haben sich jedenfalls dazu entschieden in diesem Fall zu sagen „geht nicht“, und dem Programmierer damit den Auftrag zu geben deutlicher zu sagen welche Variante er tatsächlich haben möchte: ``int(a) + b`` oder ``a + str(b)``. Beziehungsweise wenn es um Zeichenkettenformatierung und da mehrere Werte und Leerzeichen zwischen Werten und ähnliches im Spiel ist, dann ein f-Zeichenkettenliteral wie von sparrow gezeigt, weil das kompakter und einfacher lesbar ist.

Anmerkungen zu Deinem Quelltext: Das Jahr ist schon eine ganze Zahl, da noch mal `int()` mit aufzurufen macht keinen Sinn. Und normalerweise passiert die Umwandlung in den richtigen Datentyp nicht *in* der Rechnung. Das `int()` um die Eingabe für den Jahrgang in eine ganze Zahl umzuwandeln, würde man eher zur Eingabe hin verschieben. Und `ergebnis` ist recht generisch für etwas das man `alter` nennen könnte.

Code: Alles auswählen

aktuelles_jahr = 2022

vorname = input("Wie lautet Dein Vorname? ")
nachname = input("Wie lautet Dein Nachname? ")
jahrgang = int(input("Gib bitte Deinen Jahrgang ein: "))

alter = aktuelles_jahr - jahrgang

print(f"Hallo {vorname} {nachname}. Dein Alter ist: {alter} Jahre.")
„All religions are the same: religion is basically guilt, with different holidays.” — Cathy Ladman
Dadeldi
User
Beiträge: 8
Registriert: Samstag 22. Januar 2022, 14:50

Danke für die raschen Antworten. Das mit dem f-String hatte ich noch nicht, denke das wird noch kommen. Auf jeden Fall ist mir nun einiges klar geworden. Und danke auch für das ausführliche Beispiel:

Code: Alles auswählen

aktuelles_jahr = 2022

vorname = input("Wie lautet Dein Vorname? ")
nachname = input("Wie lautet Dein Nachname? ")
jahrgang = int(input("Gib bitte Deinen Jahrgang ein: "))

alter = aktuelles_jahr - jahrgang

print(f"Hallo {vorname} {nachname}. Dein Alter ist: {alter} Jahre.")
Das hat mir wirklich sehr geholfen. Auch das ich die Umwandlung direkt in der Variable machen kann/sollte ist sehr hilfreich. (Wobei ich im nachhinein zugeben muss das mir das in meinem Kurs auch gezeigt wurde, ich habe es schlicht und einfach nicht mehr gewusst.)
Ich hab noch einiges zu lernen :)
Antworten