Seite 1 von 1

webapplikationen, for-schleife in html

Verfasst: Montag 27. April 2009, 13:24
von vallas
hallo, ich habe folgendes problem:
die print anweisung in der for-schleife gibt nix aus. wenn ich das i durch eine 0 ersetzt zeigt er mir immer das 1. element an. die schleife läuft also korrekt. gehe eher davon aus, dass es irgendein formatproblem ist.

Code: Alles auswählen

for i in name:
    print "<p>%s</p>" %(name[i])
@sma: danke für die tipps. das einlesen funktioniert nun einwandfrei
mfg
valentin

Verfasst: Montag 27. April 2009, 13:35
von Leonidas
Warum machst du es dir so schwer statt ein Framework zu nehmen?

Verfasst: Montag 27. April 2009, 14:13
von vallas
würde ich ja gerne, leider ist dass die aufgabenstellung des profs. :(
viele grüße

Verfasst: Montag 27. April 2009, 20:16
von sma
Ein CGI-Script würde ich nicht als Webanwendung bezeichnen. Aber da es nur eine Übungsaufgabe ist... Du solltest dich schlau machen, wie ein CGI-Script aufgebaut sein muss. Es hat einen Header und einen Body. Bei dir fehlt der Header. Du kannst dir das Ausgeben von " übrigens viel einfacher machen, wenn du als äußere Anführungszeichen entweder ein ' oder bei mehrzeiligen "Templates" auch """ benutzt.

Zum Lesen der Daten würde ich eine Schleife bemühen. Ist es IMHO schlechter Stil, eine potentiell in der Größe unbeschränkte Datei im Ganzen in den Hauptspeicher zu lutschen. Zum Splitten eines Strings... na, wie heißt Split wohl auf Englisch...

Stefan

Verfasst: Donnerstag 30. April 2009, 09:19
von vallas
@sma: danke für die tipps, das einlesen funktioniert nun einwandfrei.
edit: hab rausgefunden. muss natürlich so aussehen

Code: Alles auswählen

for i in range(0,len(name)):
    print "<option>%s</option>" %name[i]
viele grüße
valentin

Verfasst: Donnerstag 30. April 2009, 15:05
von DasIch

Code: Alles auswählen

print u'\n'.join(imap(u'<option>{0}</option>'.format, name))

Verfasst: Donnerstag 30. April 2009, 15:22
von Rebecca
vallas hat geschrieben:

Code: Alles auswählen

for i in range(0,len(name)):
    print "<option>%s</option>" %name[i]
:o
Na, da war deine erste Idee aber besser:

Code: Alles auswählen

for i in name:
    print "<option>%s</option>" % i
Wobei i nicht so ganz der passende Name ist...

Verfasst: Donnerstag 30. April 2009, 17:44
von vallas
hi rebecca,
so ging es aber nicht :(

Code: Alles auswählen

for i in name:
    print "<p>%s</p>" %(name[i])
@ DasIch: könntest du den code mal kurz erläutern?

Code: Alles auswählen

print u'\n'.join(imap(u'<option>{0}</option>'.format, name))

Verfasst: Donnerstag 30. April 2009, 18:27
von nemomuk

Code: Alles auswählen

for i in name: 
    print "<p>%s</p>" %(name[i])
da "i" in deinem Code bereits das enstprechende Element aus "name" ist.
von daher:

Code: Alles auswählen

for i in name: 
    print "<p>%s</p>" % i

Verfasst: Donnerstag 30. April 2009, 19:00
von DasIch
vallas hat geschrieben:@ DasIch: könntest du den code mal kurz erläutern?

Code: Alles auswählen

print u'\n'.join(imap(u'<option>{0}</option>'.format, name))
str.format ist eine Methode zum formatieren von Strings die es seit 2.6/3 gibt, wie dass genau funktioniert steht in der Doku.

imap funktioniert wie map gibt aber einen Generator zurück. map nimmt im Allgemeinen ein callable entgegen und eine Sequenz und ruft das callable für jedes Element in der Sequenz auf und gibt dann die Ergebnisse als Liste zurück. Pythons map kann noch mehr dass lässt sich aber auch in der Doku nachlesen.

''.join ist eine Methode auf Strings. Es nutzt den String als Seperator für die Strings in der übergebenen Sequenz.

Verfasst: Donnerstag 14. Mai 2009, 10:42
von Y0Gi
Ich sehe da immer noch keine Header, mit CGI hat das also in dieser Form gar nichts zu tun.