Seite 1 von 2

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

Verfasst: Samstag 10. Mai 2008, 10:29
von EyDu
Hallo Addili!

Mach für deine Frage doch mal einen neuen Thread mit einem entsprechenden Betreff auf und im entsprechenden Unterforum auf. Dann erhöhen sich die Chancen, dass dir jemand helfen kann.

Verfasst: Samstag 10. Mai 2008, 10:43
von numerix
birkenfeld hat geschrieben:Non sequitur... wenn man ein Konstrukt nicht kennt, ist es nicht verwunderlich, dass man es nicht verwendet.
Einverstanden.
birkenfeld hat geschrieben:
pütone hat geschrieben: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.
Hier mag ich dir nun nicht folgen. Während die Verwechslungsgefahr mit verwandten Konstruktionen bei z.B. Lambdas oder Dekoratoren äußerst gering ist, gilt dies für ein "else" sicher nicht.
Und: Lambdas und Dekoratoren sind mächtige Elemente, ohne die sich manches nur wesentlich umständlicher (vielleicht auch gar nicht - aber das kannst du besser beurteilen als ich) realisieren lässt. Vom "Schleifen-else" würde ich das nicht behaupten.

Verfasst: Samstag 10. Mai 2008, 11:04
von BlackJack
Mit dem Schleifen-``else`` spart man sich eine Variable, und damit eine Namensgebung, für den Zustand wie die Schleife verlassen wurde.

Code: Alles auswählen

    flag = True
    for item in obj:
        if predicate(item):
            flag = False
            break
    if flag:
        print 'spam'

    # versus:
    
    for item in obj:
        if predicate(item):
            break
    else:
        print 'spam'

Re: Anfänger-Problem...

Verfasst: Samstag 10. Mai 2008, 20:37
von Mycron
Voronwe hat geschrieben:

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)
Nabend!

Bin noch ein sehr sehr unerfahrener Neuling in Python und in Programmieren überhaupt (außer HTML) und will das eben mit Pyhon ändern. Auf de Thread bin ich gekommen als ich ne Lösung für mein Problem gesucht habe. Gut der Thread löst zwar mein Problem nicht, aber wenn ich scho dabin will ich noch eben ne Wissenslücke schließen ;)

Und zwar versteh ich in diesem Skript die Zeile 5 nicht. Kann mir jemand erklären was genau sie bewirkt? Also, an "p" wird was übergeben, des ist mir schon klar, aber was?

Schönen Dank schonmal ;)

Mycron

Verfasst: Samstag 10. Mai 2008, 20:52
von ck
meinst du das?

Code: Alles auswählen

p = []
Hier wird der Variable p eine leere Liste zugewiesen.

Verfasst: Sonntag 11. Mai 2008, 11:01
von Mycron
Ah, dann lag ich mit meiner Vermutung schonmal richtig ;) Ok, wenn mir jetzt noch wer die Funktion von Zeile 18 und 19 erklärt hab ich das Skript auch kapiert :D

Mycron

Verfasst: Sonntag 11. Mai 2008, 11:17
von EyDu
Mycron hat geschrieben:Ok, wenn mir jetzt noch wer die Funktion von Zeile 18 und 19 erklärt hab ich das Skript auch kapiert :D
Schau doch einfach in der Doku nach: Library Reference -> cgi. Da ist es erklärt.

Verfasst: Sonntag 11. Mai 2008, 11:19
von Masaru
EyDu hat geschrieben:... Dann muss ich dir leider vorwerfen, dass du wohl nie das Tutorial gelesen hast, da steht es nämlich drin :lol: ...
Korrekt ^^, ich schau es mir nun auf jeden Fall nochmal an.