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()
--------------------------------------------
Ergebnisausgabe in Datei
Suchst du sowas?
Du kannst übrigens auch mit print in eine Datei schreiben, siehe letzen Absatz der Doku zu print.
Code: Alles auswählen
print "3+4=%i" % (3+4)
Hoi,
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
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()
edit: Außerdem input zu raw_input (einfach mal das Forum durchsuchen zur Frage warum - es gibt recht viele Einträge ...)
Gruß,
Christian
@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
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.
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?
Hilft das?
Nein, natürlich nicht. Aber input() hat so seine Haken:
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
Code: Alles auswählen
input(...)
input([prompt]) -> value
Equivalent to eval(raw_input(prompt)).
Gruß,
Christian
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.
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.
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()
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()
kleiner Nachbrenner:
--------------------------------
-------------------------------------
warum funktioniert das runden nicht?
ich weiß, dass :
print ("text = %0.3f kn\n" % c)
möglich ist, mir gehts darum - es zu verstehen.
--------------------------------
Code: Alles auswählen
from __future__ import division
#p=eval(raw_input("Eingabewert= "))
p=1
c=p/3
print ("text=", round(c,3), "kn")
warum funktioniert das runden nicht?
ich weiß, dass :
print ("text = %0.3f kn\n" % c)
möglich ist, mir gehts darum - es zu verstehen.
Was is'n das Traceback oO' Bei mir geht's.
Ü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:
Print wandelt es automatisch in'n Tuple um, round wird dann nicht korrekt angewendet:
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
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'>
Code: Alles auswählen
>>> foo = ("text =", round(c, 3), "kn")
>>> foo
('text =', 0.33300000000000002, 'kn')
>>>
Testforum geht grad net, muß ich`s so versuchen:
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.
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()
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.
Kopieren ist immer doof ;P Nur Spaß... Naja, Print is'n Statement, write'ne Funktion. In Python 3000 wird's sich ändern :3mathi hat geschrieben:Am Ende möchte ich für print und write die gleiche Art verwenden, um besser kopieren zu können.
in python 3000 wird doch print auch zur ner funktion... also
Code: Alles auswählen
print ("so geht das dann")
#statt
print "so geht das jetz"
Jabber: tayce@jaim.at
@mathi: OMG wie bist Du denn auf die Backticks gekommen? Die sollte man nicht verwenden. Sie sind leicht zu übersehen, in manchen Schriftarten sehen sie aus wie normale, einfache Anführungsstriche ('), und sie sind schon seit Ewigkeiten "deprecated". Sie bewirken das gleiche wie die `repr()`-Funktion. Allerdings kann man das auch mit Zeichenkettenformatierung hinbekommen:
Letztendlich kann man das Runden aber auch mit '%.3f' als Platzhalter für die Formatierung machen. Die `round()`-Funktion bietet sich eher an, wenn man mit dem gerundeten Wert weiter rechnen möchte.
Code: Alles auswählen
f.write("text=%r kn\n" % round(c, 3))
die Backticks habe ich aus einem Tutorial
also würde ich folgendermaßen schreiben:
richtig?
also würde ich folgendermaßen schreiben:
Code: Alles auswählen
print('fcd= %0.2f N/mm^2' % fcd)
sichern.write('fcd=%0.2f N/mm^2\n' % fcd)
# bzw.
sichern.write('fcd='+repr(fcd)+' N/mm^2\n') # ohne Rundung