Anfänger-Problem...

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.
Voronwe
User
Beiträge: 7
Registriert: Freitag 9. Mai 2008, 14:09
Kontaktdaten:

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 ;)
die ente ist eine scheibe.
www.simon-says.org
Benutzeravatar
numerix
User
Beiträge: 2696
Registriert: Montag 11. Juni 2007, 15:09

grenze enthält eine Zeichenkette, die Funktion prim erwartet aber einen ganzzahligen Wert. Schnelle Lösung:

Code: Alles auswählen

prim(int(grenze))
Benutzeravatar
Masaru
User
Beiträge: 425
Registriert: Mittwoch 4. August 2004, 22:17

Zudem ist "Zeile 10" falsch eingerückt. Das "else" sollte auf Höhe vom "if" liegen.
Benutzeravatar
gerold
Python-Forum Veteran
Beiträge: 5555
Registriert: Samstag 28. Februar 2004, 22:04
Wohnort: Oberhofen im Inntal (Tirol)
Kontaktdaten:

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. ;-)
http://halvar.at | Kleiner Bascom AVR Kurs
Wissen hat eine wunderbare Eigenschaft: Es verdoppelt sich, wenn man es teilt.
Voronwe
User
Beiträge: 7
Registriert: Freitag 9. Mai 2008, 14:09
Kontaktdaten:

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
Zuletzt geändert von Voronwe am Freitag 9. Mai 2008, 14:41, insgesamt 2-mal geändert.
die ente ist eine scheibe.
www.simon-says.org
Benutzeravatar
Masaru
User
Beiträge: 425
Registriert: Mittwoch 4. August 2004, 22:17

*hustet* Python dafür mächtiger ;) *hustet*
Voronwe
User
Beiträge: 7
Registriert: Freitag 9. Mai 2008, 14:09
Kontaktdaten:

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 ;)
die ente ist eine scheibe.
www.simon-says.org
Benutzeravatar
numerix
User
Beiträge: 2696
Registriert: Montag 11. Juni 2007, 15:09

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.
Voronwe
User
Beiträge: 7
Registriert: Freitag 9. Mai 2008, 14:09
Kontaktdaten:

ja ok das erklärt dann auch mein problem oben ^^
die ente ist eine scheibe.
www.simon-says.org
sechsrad
User
Beiträge: 173
Registriert: Montag 31. März 2008, 17:09

hust...pyhton...röchel....röchel....
Benutzeravatar
numerix
User
Beiträge: 2696
Registriert: Montag 11. Juni 2007, 15:09

sechsrad hat geschrieben:hust...pyhton...röchel....röchel....
Ich verstehe deinen Beitrag nicht.
mitsuhiko
User
Beiträge: 1790
Registriert: Donnerstag 28. Oktober 2004, 16:33
Wohnort: Graz, Steiermark - Österreich
Kontaktdaten:

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
TUFKAB – the user formerly known as blackbird
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?
Benutzeravatar
birkenfeld
Python-Forum Veteran
Beiträge: 1603
Registriert: Montag 20. März 2006, 15:29
Wohnort: Die aufstrebende Universitätsstadt bei München

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...
Dann lieber noch Vim 7 als Windows 7.

http://pythonic.pocoo.org/
Benutzeravatar
numerix
User
Beiträge: 2696
Registriert: Montag 11. Juni 2007, 15:09

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:
Benutzeravatar
Masaru
User
Beiträge: 425
Registriert: Mittwoch 4. August 2004, 22:17

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<<
Benutzeravatar
numerix
User
Beiträge: 2696
Registriert: Montag 11. Juni 2007, 15:09

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.
Benutzeravatar
birkenfeld
Python-Forum Veteran
Beiträge: 1603
Registriert: Montag 20. März 2006, 15:29
Wohnort: Die aufstrebende Universitätsstadt bei München

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.
Dann lieber noch Vim 7 als Windows 7.

http://pythonic.pocoo.org/
EyDu
User
Beiträge: 4881
Registriert: Donnerstag 20. Juli 2006, 23:06
Wohnort: Berlin

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: .
addili
User
Beiträge: 7
Registriert: Samstag 10. Mai 2008, 09:43

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
Antworten