Seite 1 von 2

Anfänger-Problem...

Verfasst: Freitag 9. Mai 2008, 14:17
von Voronwe
Hallo,

zunächst: Bin neu hier, seid ein paar Stunden probiere ich mit python herum. Habe schon einiges mit PHP gemacht, also grundsätzlich kein "Programmier-Neuling" aber mit Python halt schon ;)

habe mal folgende Sache gebastelt (z.T. aus Tutorials übernommen, ich weiß aber was geschieht ;))

Code: Alles auswählen

import cgi

def prim(n):
	p = []
	for x in range(2,n):
		for y in range(2,x):
			if x % y == 0:
				break
		else:
			p.append(x)
	
	for z in p:
		print z, "<br />"
		
	print "Dies sind insgesamt", len(p)

fs = cgi.FieldStorage()
grenze = fs.getvalue("zahl", "10")

print "Alle Primzahlen bis", grenze, ":<br />"

prim(grenze)
Das ist halt eine Auflistung der Primzahlen von 2 bis einer angegebenen Grenze.

Problem:
Wenn ich das Skript mit test.py?zahl=10 aufrufe, wird zwar bei print "Alle Primzahlen bis", grenze, ":<br />" grenze durch 10 ersetzt, allerdings wird nichts weiter angezeigt, die Funktion prim() also nicht ausgeführt(?)...
wenn ich im Skript prim(grenze) durch prim(10) ersetze, wird alles korrekt ausgeführt.
Ich verstehe nicht, wo das Problem liegt!?
Da ja an sich die Variable richtig übertragen wird...

Freue mich über Hilfe ;)

Verfasst: Freitag 9. Mai 2008, 14:26
von numerix
grenze enthält eine Zeichenkette, die Funktion prim erwartet aber einen ganzzahligen Wert. Schnelle Lösung:

Code: Alles auswählen

prim(int(grenze))

Verfasst: Freitag 9. Mai 2008, 14:28
von Masaru
Zudem ist "Zeile 10" falsch eingerückt. Das "else" sollte auf Höhe vom "if" liegen.

Re: Anfänger-Problem...

Verfasst: Freitag 9. Mai 2008, 14:29
von gerold
Voronwe hat geschrieben:Wenn ich das Skript mit test.py?zahl=10 aufrufe
Hallo Voronwe!

Willkommen im Python-Forum!

Code: Alles auswählen

test.py?zahl=10
Damit übergibst du "10" als Text und nicht als Zahl. Damit du damit rechnen kannst, musst du den Text zuerst in eine Zahl umwandeln. Zum Beispiel in eine Ganzzahl:

Code: Alles auswählen

ganzzahl = int("10")
Wenn du zusätzlich zum cgi-Modul auch cgitb importierst und aktivierst, dann bekommst du bessere Fehlermeldungen.
Siehe: http://docs.python.org/lib/module-cgitb.html

mfg
Gerold
:-)

PS: Na super. Was bin ich heute wieder langsam. ;-)

Verfasst: Freitag 9. Mai 2008, 14:32
von Voronwe
Ok Herzlichen Dank! :)

(PHP ist da toleranter :-P )


//edit:
@Masaru:
ja ich habe mich auch schon über diese Einrückung gewundert. Stammt aus dem Python-Tutorial: http://docs.python.org/tut/node6.html
die haben das da auch so.

Wenn ich es einrücke wie du gesagt hast (und es eigentlich logisch wäre) dann funktioniert es nicht richtig http://www.comunect.de/cgi-bin/python-t ... y?zahl=427

Was ist das Problem?

Danke für eure Hilfen :D

Verfasst: Freitag 9. Mai 2008, 14:35
von Masaru
*hustet* Python dafür mächtiger ;) *hustet*

Verfasst: Freitag 9. Mai 2008, 14:37
von Voronwe
Masaru hat geschrieben:*hustet* Python dafür mächtiger ;) *hustet*
was auch der Grund ist warum ich micht jetz DAMIT befasse und nicht mehr php ;)

Verfasst: Freitag 9. Mai 2008, 14:48
von numerix
Masaru hat geschrieben:Zudem ist "Zeile 10" falsch eingerückt. Das "else" sollte auf Höhe vom "if" liegen.
Nein, Zeile 10 ist richtig eingerückt. Das "else" bezieht sich nicht auf das if, sondern auf die for-Schleife, und ergänzt die Liste um eine weitere Primzahl für den Fall, dass die Schleife NICHT mit break verlassen wird.

Verfasst: Freitag 9. Mai 2008, 15:11
von Voronwe
ja ok das erklärt dann auch mein problem oben ^^

Verfasst: Freitag 9. Mai 2008, 16:02
von sechsrad
hust...pyhton...röchel....röchel....

Verfasst: Freitag 9. Mai 2008, 16:19
von numerix
sechsrad hat geschrieben:hust...pyhton...röchel....röchel....
Ich verstehe deinen Beitrag nicht.

Verfasst: Freitag 9. Mai 2008, 17:12
von mitsuhiko
Als PHP Ersatz sollte man sich aber über kurz oder lang mit WSGI beschäftigen, sonst hat man von Python's Vorteilen nicht viel.

PS: ich mag ein Killfile für phpBB

Verfasst: Freitag 9. Mai 2008, 18:28
von lunar
mitsuhiko hat geschrieben:PS: ich mag ein Killfile für phpBB
Würde das nicht mit einem Greasemonkey (oder wie das Ding heißt) Skript gehen?

Verfasst: Freitag 9. Mai 2008, 20:11
von birkenfeld
pütone hat geschrieben:
sechsrad hat geschrieben:hust...pyhton...röchel....röchel....
Ich verstehe deinen Beitrag nicht.
Da bist du nicht allein. Ich frage mich gerade ernsthaft, ob sechsrads Name nicht prophetisch gewählt ist...

Verfasst: Freitag 9. Mai 2008, 20:44
von numerix
birkenfeld hat geschrieben:
pütone hat geschrieben:
sechsrad hat geschrieben:hust...pyhton...röchel....röchel....
Ich verstehe deinen Beitrag nicht.
Da bist du nicht allein. Ich frage mich gerade ernsthaft, ob sechsrads Name nicht prophetisch gewählt ist...
Den Beitrag verstehe ich :lol:

Verfasst: Freitag 9. Mai 2008, 21:56
von Masaru
pütone hat geschrieben:... Nein, Zeile 10 ist richtig eingerückt. Das "else" bezieht sich nicht auf das if, sondern auf die for-Schleife, und ergänzt die Liste um eine weitere Primzahl für den Fall, dass die Schleife NICHT mit break verlassen wird. ...
Vielen Dank für die Aufklärung :). Da programmiere ich nun fast schon 4 Jahre mit Python, und habe ein solches Konstrukt nie verwendet, bzw. war mir nie bewusst, dass sowas funktioniert.

Man lernt nie aus :D
>>Masa<<

Verfasst: Samstag 10. Mai 2008, 06:40
von numerix
Masaru hat geschrieben:Da programmiere ich nun fast schon 4 Jahre mit Python, und habe ein solches Konstrukt nie verwendet, bzw. war mir nie bewusst, dass sowas funktioniert.
Was deutlich macht, dass man dieses Konstrukt eigentlich auch nicht braucht (natürlich auch nicht bei diesem ohnehin sehr ineffizienten Primzahlprogramm des OP) und vielleicht sogar eher darauf verzichten sollte, damit entsprechende Missverständnisse gar nicht erst aufkommen können.

Aus meiner Sicht machen die else-Konstruktionen für Schleifen einen Quelltext schlechter lesbar.

Verfasst: Samstag 10. Mai 2008, 07:27
von birkenfeld
pütone hat geschrieben:
Masaru hat geschrieben:Da programmiere ich nun fast schon 4 Jahre mit Python, und habe ein solches Konstrukt nie verwendet, bzw. war mir nie bewusst, dass sowas funktioniert.
Was deutlich macht, dass man dieses Konstrukt eigentlich auch nicht braucht (natürlich auch nicht bei diesem ohnehin sehr ineffizienten Primzahlprogramm des OP) und vielleicht sogar eher darauf verzichten sollte, damit entsprechende Missverständnisse gar nicht erst aufkommen können.
Non sequitur... wenn man ein Konstrukt nicht kennt, ist es nicht verwunderlich, dass man es nicht verwendet.
Aus meiner Sicht machen die else-Konstruktionen für Schleifen einen Quelltext schlechter lesbar.
Hier gilt das gleiche wie für Dekoratoren oder Lambdas: Man muss das Element kennen, um den Quelltext zu können. Bei anderen Elementen, wie if-else, erschließt sich der Sinn dem Betrachter von selbst -- aber hätte man nur solche Elemente zur Verfügung, würde Python zu einer Art "kleinstem gemeinsamen Nenner" aller Sprachen und damit ziemlich uninteressant.

Verfasst: Samstag 10. Mai 2008, 09:15
von EyDu
Masaru hat geschrieben:Vielen Dank für die Aufklärung :). Da programmiere ich nun fast schon 4 Jahre mit Python, und habe ein solches Konstrukt nie verwendet, bzw. war mir nie bewusst, dass sowas funktioniert.
Dann muss ich dir leider vorwerfen, dass du wohl nie das Tutorial gelesen hast, da steht es nämlich drin :lol: .

bitte um Hilfe!

Verfasst: Samstag 10. Mai 2008, 09:55
von addili
Hallo!
Ich habe als Infoprojekt aufbekommen ein Sonnensystem zu programieren.
Das war soweit auch kein Problem aber, wie Informatiklehrer so sind, hatte auch meiner etwas zu mekern...
Und zwar soll sich die Sonne in die Mitte bewegen und die Distanzen zur Sonne sollen sich ändern wenn der Canvas größer gezogen oder verkleinert wird.
Soweit ist das ja auch kein Problem aber dafür brauch ich den Befehl der mir sagt wie groß der Canvas nach dem auseinendrziehen ist.
Mein Lehrer meinte es geht mit cget aber das funktioniert irgendwie nicht.

Nochmal kurz: Wer kennt den Befehl, wie man herausfindet wie groß der Canvas nach dem auseinanderziehen ist?

Danke schon mal:)

liebe Grüße
Adrianna