Ergebnisausgabe in Datei

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.
mathi
User
Beiträge: 314
Registriert: Dienstag 27. November 2007, 14:30

Ergebnisausgabe in Datei

Beitragvon mathi » Montag 3. Dezember 2007, 14:39

Hallo,
ich möchte Variablen in der unteren Form in eine Datei ausgeben.
natürlich geht`s so nicht weil die Ausgabe aus einem String bestehen muß, ich habe aber nach langem Suchen keine Möglichkeit gefunden, wäre aber über Hilfe sehr dankbar.


-----------------------------------
print "Hello World"
p=input("Eingabewert= ")
a=3
c=a+p
print c
f=open("foo.txt","w+") # öffne im upatemodus
f.write ("Eingabewert=",p,"mm")
f.write ("Ergebnis=",c,"mm")
f.close()
--------------------------------------------
sma
User
Beiträge: 3018
Registriert: Montag 19. November 2007, 19:57
Wohnort: Kiel

Beitragvon sma » Montag 3. Dezember 2007, 15:09

Suchst du sowas?

Code: Alles auswählen

print "3+4=%i" % (3+4)

Du kannst übrigens auch mit print in eine Datei schreiben, siehe letzen Absatz der Doku zu print.
CM
User
Beiträge: 2464
Registriert: Sonntag 29. August 2004, 19:47
Kontaktdaten:

Beitragvon CM » Montag 3. Dezember 2007, 15:12

Hoi,

Code: Alles auswählen

p=raw_input("Eingabewert= ")
c=int(p) + 3
f=open("foo.txt","w+") # öffne im upatemodus
f.write ("Eingabewert = %d mm\n" % p)
f.write ("Ergebnis = %d mm" % c)
f.close()

Dazu schau Dir mal an was im Tutorial und Ausgabeformatierung steht. Hier habe ich einfach mal p in eine ganze Zahl umgewandelt und drei addiert. Das '%d' fügt nun eine solche Zahl in einen String ein.

edit: Außerdem input zu raw_input (einfach mal das Forum durchsuchen zur Frage warum - es gibt recht viele Einträge ...)

Gruß,
Christian
mathi
User
Beiträge: 314
Registriert: Dienstag 27. November 2007, 14:30

Beitragvon mathi » Montag 3. Dezember 2007, 15:21

@CM

Dein Code liefert bei mir:
>>>
Eingabewert= 1
Traceback (most recent call last):
File "e:/Eigene Dateien/Bauwesen/Python/speichern1.py", line 7, in <module>
f.write("Eingabewert = %d mm\n" % p)
TypeError: int argument required

Edit:
Dummes Mißverständnis oder? Ich wollte ja eine Zahl als Eingabewert, deshalb auch input und nicht raw_input
Zuletzt geändert von mathi am Montag 3. Dezember 2007, 15:28, insgesamt 2-mal geändert.
CM
User
Beiträge: 2464
Registriert: Sonntag 29. August 2004, 19:47
Kontaktdaten:

Beitragvon CM » Montag 3. Dezember 2007, 15:24

Ja, sorry. War nicht getestet. Weißt Du warum da ein Fehler kommt? Zwar wird geschieht eine Umwandlung von p bevor die 3 addiert wird, aber p selber verändert sich nicht.
Hilft das?
mathi
User
Beiträge: 314
Registriert: Dienstag 27. November 2007, 14:30

Beitragvon mathi » Montag 3. Dezember 2007, 15:29

Deine Antwort begreife ich nicht, ist input wirklich falsch, wenn ich eine Zahleneingabe erwarte? (siehe Edit)
CM
User
Beiträge: 2464
Registriert: Sonntag 29. August 2004, 19:47
Kontaktdaten:

Beitragvon CM » Montag 3. Dezember 2007, 15:39

Nein, natürlich nicht. Aber input() hat so seine Haken:

Code: Alles auswählen

input(...)
    input([prompt]) -> value
   
    Equivalent to eval(raw_input(prompt)).

D. h. für Dich, wenn Du wirklich nichts Anderes machen willst, ist das ok. Aber sonst kannst Du Dir Sicherheitslücken einbauen.

Gruß,
Christian
mathi
User
Beiträge: 314
Registriert: Dienstag 27. November 2007, 14:30

Beitragvon mathi » Montag 3. Dezember 2007, 15:42

Danke für die Erklärung, Sicherheit ist bei dem Programm kein problem :-)
BlackJack

Beitragvon BlackJack » Montag 3. Dezember 2007, 16:04

Sicherheit ist immer ein Problem wenn man sich erst einmal an `input()` gewöhnt weil's so schön einfach ist, hat man das früher oder später auch in wichtigem Quelltext oder es gelangt per copy'n'paste aus "unwichtigem" Quelltext in ein wichtiges Programm.

Ab Python 3.0 verhält sich `input()` dann auch wie `raw_input()`, da kann man also jetzt schon den sauberen Weg lernen und verwenden.
mathi
User
Beiträge: 314
Registriert: Dienstag 27. November 2007, 14:30

Beitragvon mathi » Montag 3. Dezember 2007, 16:20

ok verstanden, wie krieg ich es hin, dass ich float zahlen in die Datei schreiben kann?

bei mir siehts jetzt so aus:


p=eval(raw_input("Eingabewert= "))
c=p+3.21
print c
f=file("foo.txt","w") # öffne im upatemodus
f.write("Eingabewert = %d mm\n" % p)
f.write("Ergebnis = %d mm" % c)
f.close()
Benutzeravatar
Leonidas
Administrator
Beiträge: 16023
Registriert: Freitag 20. Juni 2003, 16:30
Kontaktdaten:

Beitragvon Leonidas » Montag 3. Dezember 2007, 16:23

`%f` verwenden. Dabei kannst du auf angeben wie viele Zahlen vor und nach dem Komma angezeigt werden, etwa `%0.5f`.
My god, it's full of CARs! | Leonidasvoice vs Modvoice
mathi
User
Beiträge: 314
Registriert: Dienstag 27. November 2007, 14:30

Beitragvon mathi » Montag 3. Dezember 2007, 16:29

super,

vielen Dank an alle für die freundliche Hilfe :-)
mathi
User
Beiträge: 314
Registriert: Dienstag 27. November 2007, 14:30

Beitragvon mathi » Dienstag 4. Dezember 2007, 09:39

kleiner Nachbrenner:
--------------------------------
[code=]from __future__ import division

#p=eval(raw_input("Eingabewert= "))
p=1
c=p/3
print ("text=", round(c,3), "kn")[/code]
-------------------------------------
warum funktioniert das runden nicht?


ich weiß, dass :
print ("text = %0.3f kn\n" % c)

möglich ist, mir gehts darum - es zu verstehen.
Benutzeravatar
BlackVivi
User
Beiträge: 762
Registriert: Samstag 9. Dezember 2006, 14:29
Kontaktdaten:

Beitragvon BlackVivi » Dienstag 4. Dezember 2007, 09:49

Was is'n das Traceback oO' Bei mir geht's.

Code: Alles auswählen

>>> from __future__ import division
>>> p = 1
>>> c = p / 3
>>> c
0.33333333333333331
>>> round(c,3)
0.33300000000000002
>>> print "text =", round(c, 3), "kn"
text = 0.333 kn


Übrigens:

1. Python-Code richtig im Forum anzeigen lassen.
2. PEP8 (Styleguide für Python, ganz wichtig oO! Wirklich!!! WIRKLICH!!!)
3. Print benötigt keine Klammern.

Edit: Achso, weil du geklammert hast. Print denkt dann es is'n Tuple, schau:

Code: Alles auswählen

>>> type (("text =", round(c, 3), "kn"))
<type 'tuple'>


Print wandelt es automatisch in'n Tuple um, round wird dann nicht korrekt angewendet:

Code: Alles auswählen

>>> foo = ("text =", round(c, 3), "kn")
>>> foo
('text =', 0.33300000000000002, 'kn')
>>>
mathi
User
Beiträge: 314
Registriert: Dienstag 27. November 2007, 14:30

Beitragvon mathi » Dienstag 4. Dezember 2007, 10:17

Testforum geht grad net, muß ich`s so versuchen:

Code: Alles auswählen

#p=eval(raw_input("Eingabewert= "))
p=1
c=p/3 
print "text=", round(c,3), "kn"

print c
print ("Eingabewert = %0.2f mm\n" % c)

f=file("foo.txt","w") # öffne im upatemodus
f.write("text="+`round(c,3)`+"kn")
f.write("Ergebnis = %0.3f mm" % c)
f.close()


Danke erstmal, hattest Recht -aber:
warum funktioniert das in der write() Anweisung dann nicht?
Am Ende möchte ich für print und write die gleiche Art verwenden, um besser kopieren zu können.

Wer ist online?

Mitglieder in diesem Forum: 0 Mitglieder