g.write

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
coma85
User
Beiträge: 28
Registriert: Mittwoch 10. Februar 2010, 10:04

hallöchen...

also ich schreibe gerade an einem programm, wobei ich die eingaben durch g.write
in einer output-datei speichere...

hier mal ein beispiel:

Code: Alles auswählen

schongespielt = raw_input("Hast du bereits zuvor schon einmal Roulette gespielt?: ")
g.write('Roulette gespielt?: ' + schongespielt + '\n')
print ''

besitz = 100
print "Dein Besitz zu Beginn: ", besitz

ende = "n"

while ende !="j":

    einsatz = input("Dein Einsatz bitte: ")
    besitz = besitz - einsatz
    
    print ('\n'+'Wie willst du spielen?')
    print "A - für schwarz oder rot"
    print "B - für gerade oder ungerade"
    print "C - für niedrig oder hoch"
    print "D - für eine Zahl"+'\n'
    spielart = raw_input("Auswahl: ")
    g.write('Spielart: ' + spielart + '\n')
jetzt wollte ich auch ein g.write bei der Eingabe vom 'Einsatz' haben,
aber da zeigt er mir immer eine fehlermeldung...

woran liegt das??

ich tippe ja, dass es an der fehlenden raw_input angabe liegt, aber wie kann ich das ändern??

LG
Benutzeravatar
Rebecca
User
Beiträge: 1662
Registriert: Freitag 3. Februar 2006, 12:28
Wohnort: DN, Heimat: HB
Kontaktdaten:

Was fuer eine Fehlermeldung? Was ist g? (Der gepostete Code kann auch ohne Zeile zwei nicht funktionieren.)
Offizielles Python-Tutorial (Deutsche Version)

Urheberrecht, Datenschutz, Informationsfreiheit: Piratenpartei
coma85
User
Beiträge: 28
Registriert: Mittwoch 10. Februar 2010, 10:04

also g definiere ich am anfang des programms mit: g = open("output.txt","w")
und am ende des programms schließt es mit: g.close()

es zeigt mir folgendes als fehler, wenn ich schreibe:

Code: Alles auswählen

 einsatz = input("Dein Einsatz bitte: ")
 g.write('Einsatz: ' + einsatz + '\n')
 besitz = besitz - einsatz   
fehlermeldung:

Traceback (most recent call last):
File "C:\Dokumente und Einstellungen\...pyw", line 27, in <module>
g.write('Einsatz: ' + einsatz + '\n')
TypeError: cannot concatenate 'str' and 'int' objects
EyDu
User
Beiträge: 4881
Registriert: Donnerstag 20. Juli 2006, 23:06
Wohnort: Berlin

Dann lass dir mal die Typen von "Einsatz: " und einsatz ausgeben.
Das Leben ist wie ein Tennisball.
coma85
User
Beiträge: 28
Registriert: Mittwoch 10. Februar 2010, 10:04

was meinst du damit?
Benutzeravatar
/me
User
Beiträge: 3561
Registriert: Donnerstag 25. Juni 2009, 14:40
Wohnort: Bonn

coma85 hat geschrieben:was meinst du damit?
type()
derdon
User
Beiträge: 1316
Registriert: Freitag 24. Oktober 2008, 14:32

Hier ein etwas anderer Code, der die gleiche Fehlermeldung hervorruft:

Code: Alles auswählen

>>> 'hallo welt' + 42
Traceback (most recent call last):
  File "<input>", line 1, in <module>
TypeError: cannot concatenate 'str' and 'int' objects
coma85
User
Beiträge: 28
Registriert: Mittwoch 10. Februar 2010, 10:04

also ich habe jetzt mal

Code: Alles auswählen

    type('Einsatz')
    type(einsatz)

    print type
da gibt er mir aus: <type 'type'>

hm... hilft mir nicht so sehr... weiß immernoch nicht, was ich da ändern muss,
damit er mir den "Einsatz" in der output-datei speichert...
derdon
User
Beiträge: 1316
Registriert: Freitag 24. Oktober 2008, 14:32

Die Zeilen sollten so lauten:

Code: Alles auswählen

print type('Einsatz')
print type(einsatz)
coma85
User
Beiträge: 28
Registriert: Mittwoch 10. Februar 2010, 10:04

achso alles klar... str und int

also müsste ich meine eingangsdefintion

Code: Alles auswählen

def zufall():
    return int(anzahl*random.random())
ändern?

oder ist da eine doppelbelegung mit int und str nicht möglich?
Benutzeravatar
Rebecca
User
Beiträge: 1662
Registriert: Freitag 3. Februar 2006, 12:28
Wohnort: DN, Heimat: HB
Kontaktdaten:

coma85 hat geschrieben:also müsste ich meine eingangsdefintion

Code: Alles auswählen

def zufall():
    return int(anzahl*random.random())
ändern?
Wo auch immer der Code jetzt herkommt, der hat doch mit deiner Fehlermeldung, die du oben gepostet hast, ueberhaupt nichts zu tun! Schau dir doch mal die Zeile an, auf die die Fehlermeldung verweist (und auch den Post von derdon).
Offizielles Python-Tutorial (Deutsche Version)

Urheberrecht, Datenschutz, Informationsfreiheit: Piratenpartei
coma85
User
Beiträge: 28
Registriert: Mittwoch 10. Februar 2010, 10:04

ich weiß ja wo der fehler liegt... bei g.write('Einsatz: ' + einsatz + '\n')

ist mir ja klar... und ich weiß auch, dass es scheinbar daran liegt, dass
ich 2 operatoren verwende (int, str)

aber warum hat es dann bei den raw_input anweisungen funktioniert?

und was kann ich machen, dass es funktioniert :K
derdon
User
Beiträge: 1316
Registriert: Freitag 24. Oktober 2008, 14:32

Wandle einsatz in einen String um, bevor du ihn mit den anderen Strings verbindest. Oder besser: benutze string-formatting (google -> "python string-formatting").
coma85
User
Beiträge: 28
Registriert: Mittwoch 10. Februar 2010, 10:04

hab mir dazu jetzt mal nen paar foren angesehen und hilfsdateien...
nur bei der umsetzung haperts...

hab es jetzt so geschrieben

Code: Alles auswählen

    einsatz = input("Dein Einsatz bitte: {einsatz}".format(einsatz))
    g.write('Einsatz: ' + einsatz + '\n')
    besitz = besitz - einsatz
er zeigt mir den fehler:

Traceback (most recent call last):
File "C:\Dokumente und Einstellungen\....pyw", line 27, in <module>
einsatz = input("Dein Einsatz bitte: {einsatz}".format(einsatz))
KeyError: 'einsatz'


ich krieg ne meise... es will nicht funktionieren...
ich hab das mit dem string formatting noch nie gemacht und hab
sicher nen simplen denkfehler... kann mir jemand sagen, welchen?
Benutzeravatar
DaMutz
User
Beiträge: 202
Registriert: Freitag 31. Oktober 2008, 17:25

entweder du machste es so:

Code: Alles auswählen

"Dein Einsatz bitte: {einsatz}".format(**locals())
oder so (das Keyword musst du zuordnen):

Code: Alles auswählen

"Dein Einsatz bitte: {einsatz}".format(einsatz=einsatz)
oder ohne Keyword:

Code: Alles auswählen

"Dein Einsatz bitte: {0}".format(einsatz)
EyDu
User
Beiträge: 4881
Registriert: Donnerstag 20. Juli 2006, 23:06
Wohnort: Berlin

Das bringt aber auch nichts, da "einsatz" noch gar nicht existiert.

@coma85: Du möchtest die Formatierung in der write-Zeile benutzen, nicht beim input.
Das Leben ist wie ein Tennisball.
coma85
User
Beiträge: 28
Registriert: Mittwoch 10. Februar 2010, 10:04

jawoll...es funktioniert... dankeschön für die hilfe :-)

ps: habs in die write-anweisung gepackt
Antworten