Einfache Sache...oder nicht!?

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.
murph
User
Beiträge: 622
Registriert: Freitag 14. April 2006, 19:23
Kontaktdaten:

habe einen kleinen skript, mein erster.
der will aber nicht! konnte keinen vergleichbaren finden.

Code: Alles auswählen

#!/usr/bin/env python
import sys
print("Bitte gebe den Namen mit dateiendung an: (funktioniert nur im gleichen Ordner)")
input=sys.stdin.readline()
input=input.strip()
print("Du hast die Datei %s aufgewaehlt") % (input)
fd=open('%s', 'w') %input
inhalt=fd.read()
fd.close
print inhalt
sys.stdin.readline()
fehlermeldung:
Bitte gebe den Namen mit dateiendung an: (funktioniert nur im gleichen Ordner)
hier.txt
Du hast die Datei hier.txt aufgewaehlt
Traceback (most recent call last):
File "./ausgabekonsole.pyw", line 7, in ?
fd=open('%s', 'w') %input
TypeError: unsupported operand type(s) for %: 'file' and 'str'
icepacker
User
Beiträge: 49
Registriert: Dienstag 15. November 2005, 18:48

Hi

Code: Alles auswählen

#!/usr/bin/env python
import sys
print("Bitte gebe den Namen mit dateiendung an: (funktioniert nur im gleichen Ordner)")
input=sys.stdin.readline()
input=input.strip()
print("Du hast die Datei %s aufgewaehlt") % (input)
fd=open(input, 'w+')  # einfach die variable einsetzen
# und w+ benutzen um schreiben und lesen zu können
inhalt=fd.read()
fd.close
print inhalt
sys.stdin.readline() # was soll das hier?
lg icepacker
ubuntu linux !!
Benutzeravatar
Kolazomai
User
Beiträge: 33
Registriert: Donnerstag 16. Februar 2006, 15:05
Kontaktdaten:

Hi,

warum so umständlich ? Es soll ja auch raw_input geben :P

Code: Alles auswählen

datei = raw_input("Bitte geb die Datei an oder den Pfad zur Datei: ")
print "Du hast die Datei",datei,"ausgewählt!"
f = open(datei,"r")
inhalt = f.read()
f.close()
print inhalt
raw_input("Press any key to exit ...")
Mfg,

Kolazomai
murph
User
Beiträge: 622
Registriert: Freitag 14. April 2006, 19:23
Kontaktdaten:

warum so umständlich? weils im tuto*ichweissnichwiedaswortweitergeht*
so stand. was ist denn der unterschied zwischen raw_input un meiner variante?
@ersteantwort:
um das fenster geöffnet zu lassen, ist der letzte, laut tutowasweißich zumindest
@zweiteantwort: die verson klappt, bei der anderen schreibe ich das textdokument namens "inhalt"...
Benutzeravatar
Kolazomai
User
Beiträge: 33
Registriert: Donnerstag 16. Februar 2006, 15:05
Kontaktdaten:

murph hat geschrieben:warum so umständlich? weils im tuto*ichweissnichwiedaswortweitergeht*
so stand. was ist denn der unterschied zwischen raw_input un meiner variante?
@ersteantwort:
um das fenster geöffnet zu lassen, ist der letzte, laut tutowasweißich zumindest
Hi,

es gibt praktisch gar keinen Unterschied. Normal nimmt man das sys.stdin.readline() um z.B. System-Cmds auszuführen, soweit ich das weiss :) raw_input ist auf jeden Fall der einfachere und sichere Weg. Für was gibts sonst die Funkion. Ausserdem musst du dafür nicht mal sys importieren.

Kommst du zufällig aus C und hast dich an Python "gewagt" ? Weil normal braucht man die % - Sachen nicht, sondern kann einfach nur die Variable hinschreiben.

Mit diesem Tutorial hab ichs gelernt. Das ist am Anfang zwar etwas langweilig, aber sonst alles gut und einfach erklärt.

Mfg,

Kolazomai
murph
User
Beiträge: 622
Registriert: Freitag 14. April 2006, 19:23
Kontaktdaten:

ich komme von php und war türlich variablenverwöhnt^^
bei der umstellung hab ich ganz auf tutorial vertraut...
Joghurt
User
Beiträge: 877
Registriert: Dienstag 15. Februar 2005, 15:07

Der Vollständigkeit halber:
murph hat geschrieben:

Code: Alles auswählen

fd=open('%s', 'w') %input
Was du meintest, war

Code: Alles auswählen

fd = open('%s' % input, 'w')
Das % folgt direkt nach dem String.
Wie schon erwähnt, ist das aber sinnlos.

Gedacht ist es für Dinge wie

Code: Alles auswählen

print "Die Zahl foo ist %i. Der String bar ist %s" % (foo,bar)
murph
User
Beiträge: 622
Registriert: Freitag 14. April 2006, 19:23
Kontaktdaten:

könnt ihr mir sagen, wann das sinnvoll ist? die ausführliche schreibweise mein ich.
auf mich wirkt sie sehr unübersichtlich.
BlackJack

murph hat geschrieben:könnt ihr mir sagen, wann das sinnvoll ist? die ausführliche schreibweise mein ich.
auf mich wirkt sie sehr unübersichtlich.
Was meinst Du jetzt mit ausführlicher Schreibweise? Das hier:

Code: Alles auswählen

print "Die Zahl foo ist %i. Der String bar ist %s." % (foo,bar)
Das ist doch weniger ausführlich als das äquivalente:

Code: Alles auswählen

print "Die Zahl foo ist " + str(int(foo)) + ". Der String bar ist " + str(bar) + "."
Ein weiterer Vorteil ist, dass man in der ersten Variante eine Zeichenkette hat, die man zum Beispiel auch aus einer Datei einlesen kann. Zum Beispiel um die Anwendung flexibel auf mehrere Sprachen einzustellen.

Und man kann bei den Format-Platzhaltern auch noch diverse Formatierungen angeben. Führende Nullen bei Zahlen, maximallänge, rechtsbündig und so weiter.
Benutzeravatar
gerold
Python-Forum Veteran
Beiträge: 5555
Registriert: Samstag 28. Februar 2004, 22:04
Wohnort: Oberhofen im Inntal (Tirol)
Kontaktdaten:

murph hat geschrieben:die ausführliche schreibweise mein ich. auf mich wirkt sie sehr unübersichtlich.
Hi murph!

Falls du so etwas meinst:

Code: Alles auswählen

print "Name: %s -> %i" % (person_name, person_alter)
Das wurde von C geerbt. Wahrscheinlich hat es dem Entwickler von Python so gut gefallen, dass er es übernommen hat. Außerdem passt es in das Grundprinzip von Python "Explizit ist besser als inplizit". In die Zeichenkette wird nur dann ein Wert eingefügt, wenn dieser nach dem % angehängt wird. So werden unabsichtliche Ersetzungen vermieden.

Wenn es dir egal ist und du das Risiko trotzdem eingehen möchtest, was nicht immer schlecht ist, dann kannst du es auch so schreiben:

Code: Alles auswählen

person_name = "Gerold"
person_alter = 31
print "Name: %(person_name)s -> %(person_alter)i" % locals()
mfg
Gerold
:-)
http://halvar.at | Kleiner Bascom AVR Kurs
Wissen hat eine wunderbare Eigenschaft: Es verdoppelt sich, wenn man es teilt.
murph
User
Beiträge: 622
Registriert: Freitag 14. April 2006, 19:23
Kontaktdaten:

da scheint python sehr viele freiheiten zu lassen.
es sollte aber auch das hier gehen, oder nicht?

Code: Alles auswählen

>>>person_name="gerold"
>>>person_alter="31"
>>>print "Name: "person_name"->"person_alter
                                                            ^
nein, es geht nicht, ein sytaxfehler! hat das einen einfachen hintergrund
oder wäre die erklärung bei den pythonentwicklern zu erfragen?
Benutzeravatar
jens
Python-Forum Veteran
Beiträge: 8502
Registriert: Dienstag 10. August 2004, 09:40
Wohnort: duisburg
Kontaktdaten:

murph hat geschrieben:

Code: Alles auswählen

>>>print "Name: "person_name"->"person_alter
Mit Komma geht's:

Code: Alles auswählen

person_name = "Gerold"
person_alter = 31
print "Name:", person_name, "->", person_alter
Aber die Sting-Operator Geschichte ist auf dauer viel übersichtlicher...

In dem Zusammenhang interessiert dich vielleicht auch das:
[wiki]Multiline Strings[/wiki]

GitHub | Open HUB | Xing | Linked in
Bitcoins to: 1JEgSQepxGjdprNedC9tXQWLpS424AL8cd
Benutzeravatar
gerold
Python-Forum Veteran
Beiträge: 5555
Registriert: Samstag 28. Februar 2004, 22:04
Wohnort: Oberhofen im Inntal (Tirol)
Kontaktdaten:

murph hat geschrieben:nein, es geht nicht, ein sytaxfehler! hat das einen einfachen hintergrund oder wäre die erklärung bei den pythonentwicklern zu erfragen?
Hi murph!

???

Einfach irgendetwas hinschreiben wird nicht funktionieren. Man muss sich schon an die Vorgabe der Programmiersprache halten. Das hier funktioniert:

Code: Alles auswählen

>>> person_name = "gerold"
>>> person_alter = "31"
>>> print "Name:", person_name, "->", person_alter
Name: gerold -> 31
>>> 
mfg
Gerold
:-)
http://halvar.at | Kleiner Bascom AVR Kurs
Wissen hat eine wunderbare Eigenschaft: Es verdoppelt sich, wenn man es teilt.
Benutzeravatar
jens
Python-Forum Veteran
Beiträge: 8502
Registriert: Dienstag 10. August 2004, 09:40
Wohnort: duisburg
Kontaktdaten:

Ich war schneller :lol:

GitHub | Open HUB | Xing | Linked in
Bitcoins to: 1JEgSQepxGjdprNedC9tXQWLpS424AL8cd
Benutzeravatar
Hannes-Spz
User
Beiträge: 123
Registriert: Sonntag 7. August 2005, 22:42

es gibt aber noch sone lustig-niedliche sache:

wenn man

Code: Alles auswählen

print ("Hallo " "Welt" "!")
zb. schreibt, erkennt er es immernoch als ein-einzigen
string an...
geht aber nur dann, wenn gerade eben KEINE kommata gesetzt sind...
[size=85]"Unsere Situation ist immer die eines schwarzen Mannes der in einem schwarzen Keller einen schwarzen Hut sucht, den es vielleicht gar nicht gibt." Sir Karl R. Popper[/size]
modelnine
User
Beiträge: 670
Registriert: Sonntag 15. Januar 2006, 18:42
Wohnort: Celle
Kontaktdaten:

nein, es geht nicht, ein sytaxfehler! hat das einen einfachen hintergrund
oder wäre die erklärung bei den pythonentwicklern zu erfragen?
Weder, noch. Genauso wie die Deutsche Sprache eine Grammatik hat (die eindeutig festlegt wo zum Beispiel groß-/kleingeschrieben wird und wo Kommas hinkommen, etwas was Du anscheinend zumindest beim Schreiben Deiner Beiträge nicht befolgst...!) damit wir uns gegenseitig verstehen (was eben dadurch dass Du die grammatikalischen Regeln nicht befolgst teilweise arg schwer ist), hat eine Programmiersprache eine Grammatik, damit der Computer Dich versteht; jegliche Form der Kommunikation, egal ob zwischen Computern, zwischen Menschen, oder eben zwischen Computer und Mensch, muß sich auf eine Struktur (eben die Grammatik) einigen, sonst kann kein Inhalt übertragen werden.

Im Allgemeinen ist die Grammatik einer Programmiersprache strikter als die einer natürlichen Sprache, da es jeglichen vertretbaren Aufwand sprengen würde dem Computer "beizubringen" zu raten (zum Beispiel aus dem Kontext) was Du mit einem Konstrukt machen wolltest, was nicht zur Grammatik gehört. Unser Gehirn kann das schon, weil es eben zu interpolieren gelernt hat, und entsprechende "fehlerunanfällige" Algorithmen zum Parsen (so nennt man das zerlegen einer Eingabe in syntaktische Bestandteile) der Eingabe verwendet.

Genauso wie Du englische Grammatik lernen mußt um mit einem Engländer zu kommunizieren, mußt Du Python-Grammatik lernen um mit Python zu kommunizieren. Und Dich dann eben auch an diese grammatikalischen Regeln halten. Da gibts nichts dran zu deuteln (oder zu fragen).

Wenn Dir die grammatikalischen Regeln nicht gefallen, dann ist Python nichts für Dich; dann schau Dich nach einer anderen Sprache um deren Syntax Dir besser gefällt (gerade wenn Du Kommas, etc. weglassen willst, dann guck Dich nach Perl um). Wenn Du mit den syntaktischen Regeln von Python leben kannst oder willst, weil sie für Dich einleuchtend sind, dann mach weiter, und lern es eben einmal!

PS: Bevor irgendjemand was zu meiner Grammatik sagt, will ich anmerken, dass mein hauptsächliches Problem ein semantisches ist: ich probiere zu viel Inhalt in Sätze zu packen, und schreibe deswegen Bandwurmsätze, die teilweise nicht mehr zu verstehen sind... Ja, ich weiß. Und, ja, ich pack mir deswegen auch oft genug selbst an die eigene Nase. ;-)
--- Heiko.
Benutzeravatar
Hannes-Spz
User
Beiträge: 123
Registriert: Sonntag 7. August 2005, 22:42

magst recht haben und ohne deine authorität zu untergraben wollen:

ich bin grade dabei perl zu lernen und ich muss sagen:
ich liebe meinen info-lehrer dafür, dass er uns PYTHON beigebracht hat...
schöne art und weisen einen slice einzubringen,
schöne art und weisen dictionarys, listen und tupel zu erstellen und zu unterscheiden,
nahezu wunderbare selbstdocumentation,
keine geschwungenen klammern um eine funktion zu begrenzen,
keine gedanken über falsche interpolation,
keine semikolons am ende und vor allem:

keine vorzeichen vor den variablennamen...
// edit: natürlich ist von den aussagekräftigen fehlermeldungen ganz zu schweigen!

die positiven seiten von python wurden schon oft aufgezählt, aber wenn man
im zusammenhang mit einer einfachen syntax auf PERL verweisen möchte,
weiß ich wirklich nicht, was ich falsch gemacht habe...
vl. ein anderes tutorial nehmen??

ich hoffe, du weißt, wie ich es meine :wink:
[size=85]"Unsere Situation ist immer die eines schwarzen Mannes der in einem schwarzen Keller einen schwarzen Hut sucht, den es vielleicht gar nicht gibt." Sir Karl R. Popper[/size]
ryu
User
Beiträge: 41
Registriert: Dienstag 7. Februar 2006, 19:34

Ich glaube ModelNine meinte nicht, das Perl eine einfache Syntax hat, sondern vielmehr, das Perl eine flexiblere Syntax hat. Ob das nun gut oder schlecht ist. Wenn einem die eine Art es zu schreiben nicht gefällt nimmt man halt eine Andere, das geht bei Python schwerer.
modelnine
User
Beiträge: 670
Registriert: Sonntag 15. Januar 2006, 18:42
Wohnort: Celle
Kontaktdaten:

magst recht haben und ohne deine authorität zu untergraben wollen...
Huh? Ich finds immer wieder toll, wieviel Autorität andere Leute mir zuschreiben. Ich bin auch einfach nur ein Foren-Benutzer, kein Übermensch, wie aus solchen Statements manchmal rausklingt (zumindest für mich...! Ist das jetzt Hybris? ;-)). Auch ich mache Fehler, auch ich habe meine schlechten Seiten... Und, wie ich schon gerold gesagt hab, wenn man mir sagt, dass man etwas anders sieht als ich, dann umso besser, dann kann man darüber diskutieren!

Aber, egal. Wozu ich eigentlich noch Stellung beziehen wollte:
die positiven seiten von python wurden schon oft aufgezählt, aber wenn man
im zusammenhang mit einer einfachen syntax auf PERL verweisen möchte,
weiß ich wirklich nicht, was ich falsch gemacht habe...
Perl hat, aus meiner Erfahrung mit einigen anderen Leuten, eine "einfachere" Syntax, schlicht aus dem Grund, dass sie relativ nah an natürliche Sprachen angelehnt ist. Zum Beispiel TIMTOWTDI ist ein Auswuchs genau dieser Herangehensweise (der Macher von Perl, Larry Wall, ist Computerlinguist!), dass eben die Sprache genau wie eine natürliche Sprache die "Ungenauigkeit" wiederspiegeln soll, die Menschen auch in Sprache benutzen (kein Mensch spricht "gleich," in dem Sinn dass er die selben Konstrukte verwendet; es ist relativ einfach aufgrund der syntaktischen Beschaffenheit der Sprache einen Menschen zu erkennen, oder ihn in eine Gruppe einzuordnen).

Inwiefern man das jetzt persönlich schlecht oder gut findet ist ein ganz anderes Blatt, und darauf wollte ich allgemein nicht hinaus. Ich kenne einige Leute die eben genau aufgrund der Tatsache dass Python ein relativ striktes syntaktisches und semantisches Korsett hat (TIOOWTDI), Python nicht mögen, und Perl präferieren. Wenn es murph ähnlich geht, soll er sich mal Perl angucken, nichts anderes wollte ich andeuten.

ryu: Danke für die Interpretation, Du hast den Nagel genau auf den Kopf getroffen. ;-)
--- Heiko.
murph
User
Beiträge: 622
Registriert: Freitag 14. April 2006, 19:23
Kontaktdaten:

Wenn euch meine Schreibweise sehr unorthodox wrikt, kein Problem.
Ich habe mir nur im Internet eine etwas andere Srache angeeignet, um besser in den foren (die meisten sind leider niveaulos, ohne das die Leute persönlich umbedingt das selbe sind. Da ich aber hier auf eine Hochburg gebildeter Deutschsprecher bin, kann ich natürlich auch mit etwas mehr Stil meine Beiträge gestallten. Übrigens habe ich kein Problem mit der Syntax (beziehungsweise, natürlich habe ich eins, sonst würde ich solche Themen nicht erstellen), sie ist nur etwas anders strukturiert als bei PHP, wo ich nur zwei Möglichkeiten kenne, Variablen auszugeben: echo $variable oder echo "$variable". Deshalb hat ich Python zuerst etwas überfordert mit der Vielzahl an Möglichkeiten, ohne dass immer alle Möglichkeiten zur Verfügung stehen.
Nur deshalb bin ich etwas im Anfängerschwindel, sehe keinen Sinn darin, außer dass manchmal nur manche funktionieren (erstes Problem, das och hier gepostet habe)
Antworten