"cannot concatenate 'str' and 'int' objects"

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
akske
User
Beiträge: 3
Registriert: Donnerstag 25. Juni 2009, 01:31

hallo,

Ich raufe mir noch die Haare aus:

Code: Alles auswählen

#!/usr/bin/python
#Programm zum errechnen der Zeit bis zum Alter 100
print "Hallo"
a=raw_input("Wie alt bist du in Jahren? ")
a=int(a)
b=100
print "Es dauert noch" + b-a +"Jahre bis du 100 bist"
Führt unweigerlich zu:

Code: Alles auswählen

Traceback (most recent call last):
  File "alter.py", line 7, in <module>
    print "Es dauert noch" + b-a +"Jahre bis du 100 bist"
TypeError: cannot concatenate 'str' and 'int' objects
Also hatte ich vor b und a in Strings umzuwandeln, was aber unsinnig ist da in diesem Moment der Operator - sinnfrei wird.

Was also tun?

edit:

Ich könnte mich in den Hintern treten...

Fixed:

Code: Alles auswählen

#!/usr/bin/python
#Programm zum errechnen der Zeit bis zum Alter 100
print "Hallo"
a=raw_input("Wie alt bist du in Jahren? ")
a=int(a)
b=100
c= b-a
c=str(c)
print "Es dauert noch "+c+" Jahre bis du 100 bist"
Benutzeravatar
BlackVivi
User
Beiträge: 762
Registriert: Samstag 9. Dezember 2006, 14:29
Kontaktdaten:

Du _musst_ aber nicht casten in dem Fall.

Code: Alles auswählen

#!/usr/bin/env python
# -*- coding: utf-8 -*-

def main():
    print "Hallo"
    age = int(raw_input("Wie alt bist du in Jahren? "))
    endage = 100
    print "Es dauert noch", endage - age, "Jahre bis du 100 bist!"
    
if __name__ == "__main__":
    main()
oder, was auch geht...

Code: Alles auswählen

#!/usr/bin/env python
# -*- coding: utf-8 -*-

def main():
    print "Hallo"
    age = int(raw_input("Wie alt bist du in Jahren? "))
    endage = 100
    print "Es dauert noch %d Jahre bis du 100 bist!" % (endage - age)
    
if __name__ == "__main__":
    main()
Benutzeravatar
snafu
User
Beiträge: 6731
Registriert: Donnerstag 21. Februar 2008, 17:31
Wohnort: Gelsenkirchen

Du hast übrigens das falsche Forum gewählt. Sowas gehört eigentlich in "Allgemeine Fragen". ;)

EDIT: Wurde inzwischen verschoben.
Zuletzt geändert von snafu am Donnerstag 25. Juni 2009, 08:27, insgesamt 1-mal geändert.
BlackJack

@akske: Und es gibt noch eine, eigentlich recht naheliegende Lösung, wenn man die Reihenfolge der Ausführung von Oeratoren beeinflussen möchte: Klammern. Also statt ``x + a - b + y`` dann ``x + (a - b) + y``.
Benutzeravatar
Defnull
User
Beiträge: 778
Registriert: Donnerstag 18. Juni 2009, 22:09
Wohnort: Göttingen
Kontaktdaten:

BlackJack hat geschrieben:Klammern. Also statt ``x + a - b + y`` dann ``x + (a - b) + y``.
Du hast zwar prinzipiell recht, aber dein Beispiel macht mit assoziativen Additionen bzw. Subtraktionen ja so mal gar keinen Sinn ;)

Du meintest sicher sowas wie:

Code: Alles auswählen

print "Es dauert noch" + str(b-a) + "Jahre bis du 100 bist"
Wobei das von BlackVivi genannte beispiel eigentlich das beste ist.

Code: Alles auswählen

print "Es dauert noch %d Jahre bis du 100 bist" % (a-b)
BlackJack

@Defnull: Grmpf, mein Beitrag war noch vor dem ersten Kaffee. :-)
Antworten