Seite 1 von 1

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

Verfasst: Donnerstag 25. Juni 2009, 01:53
von akske
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"

Verfasst: Donnerstag 25. Juni 2009, 06:23
von BlackVivi
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()

Verfasst: Donnerstag 25. Juni 2009, 06:44
von snafu
Du hast übrigens das falsche Forum gewählt. Sowas gehört eigentlich in "Allgemeine Fragen". ;)

EDIT: Wurde inzwischen verschoben.

Verfasst: Donnerstag 25. Juni 2009, 07:06
von 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``.

Verfasst: Donnerstag 25. Juni 2009, 08:39
von Defnull
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)

Verfasst: Donnerstag 25. Juni 2009, 09:11
von BlackJack
@Defnull: Grmpf, mein Beitrag war noch vor dem ersten Kaffee. :-)