Code: Alles auswählen
x = 0
while x <= 10:
print "x = %d." % x
x += 1
print "Schleife beendet."
Code: Alles auswählen
for x in xrange(11):
print "x = %d." % x
print "Schleife beendet."
Code: Alles auswählen
x = 0
while x <= 10:
print "x = %d." % x
x += 1
print "Schleife beendet."
Code: Alles auswählen
for x in xrange(11):
print "x = %d." % x
print "Schleife beendet."
Code: Alles auswählen
for index in count():
# hier Deinen Code
# und Abbruchbedingung prüfen
Code: Alles auswählen
def is_prime(value):
# hier den Code zum Prüfen; Du musst aber
# True und False entsprechend zurückgeben
for index in count():
# hier wird die Funktion aufgerufen und der Rückgabewert
# ausgewertet (`is_prime` gibt ja `True` oder `False` zurück!)
if is_prime(index):
print("{} ist eine Primzahl".format(str(index)))
# Abbruch prüfen
Code: Alles auswählen
In [72]: primes = [2, 3, 5]
In [73]: primes.append(7)
In [74]: primes
Out[74]: [2, 3, 5, 7]
In [75]: len(primes)
Out[75]: 4
Code: Alles auswählen
def is_prime(value):
# hier den Code zum Prüfen; Du musst aber
# True und False entsprechend zurückgeben
primes = []
for index in count():
if is_prime(index):
# Primzahl an Liste anhängen
# Abbruch prüfen
Code: Alles auswählen
L=[]
for n in range(2, 60):
for x in range(2, n):
if n % x == 0:
break
else:
print n, 'ist eine Primzahl'
L.append(n)
print L
Out:
2 ist eine Primzahl
[2]
3 ist eine Primzahl
[2, 3]
5 ist eine Primzahl
[2, 3, 5]
7 ist eine Primzahl
[2, 3, 5, 7]
11 ist eine Primzahl
[2, 3, 5, 7, 11]
13 ist eine Primzahl
[2, 3, 5, 7, 11, 13]
17 ist eine Primzahl
[2, 3, 5, 7, 11, 13, 17]
19 ist eine Primzahl
[2, 3, 5, 7, 11, 13, 17, 19]
23 ist eine Primzahl
[2, 3, 5, 7, 11, 13, 17, 19, 23]
29 ist eine Primzahl
[2, 3, 5, 7, 11, 13, 17, 19, 23, 29]
31 ist eine Primzahl
[2, 3, 5, 7, 11, 13, 17, 19, 23, 29, 31]
37 ist eine Primzahl
[2, 3, 5, 7, 11, 13, 17, 19, 23, 29, 31, 37]
41 ist eine Primzahl
[2, 3, 5, 7, 11, 13, 17, 19, 23, 29, 31, 37, 41]
43 ist eine Primzahl
[2, 3, 5, 7, 11, 13, 17, 19, 23, 29, 31, 37, 41, 43]
47 ist eine Primzahl
[2, 3, 5, 7, 11, 13, 17, 19, 23, 29, 31, 37, 41, 43, 47]
53 ist eine Primzahl
[2, 3, 5, 7, 11, 13, 17, 19, 23, 29, 31, 37, 41, 43, 47, 53]
59 ist eine Primzahl
[2, 3, 5, 7, 11, 13, 17, 19, 23, 29, 31, 37, 41, 43, 47, 53, 59]
Oh Mann, deshalb ja die 'while'-Konstruktion (und keine for-Schleife). In meinem BeispielArtur hat geschrieben:Die Anzahl der Primzahlen ist immer noch von der range abhängig (60). Das sind jetzt genau 17 Primzahlen. die 47 ist die 15. Primzahl. Dh wenn ich es hinbekomme bei einer Listenlänge von 15 ein break einzubauen, müsste die Ausgabe bei der 47 stehenbleiben. Wie mache ich das jetzt.. *grübel*
Code: Alles auswählen
x = 0
while True:
print "x = " + str(x) + "."
x += 1
if x == 10:
break
print "Schleife beendet."
Code: Alles auswählen
L=[]
for n in range(2, 60):
for x in range(2, n):
if n % x == 0:
break
elif len(L)==15:
break
else:
print n, 'ist eine Primzahl'
L.append(n)
Out:
2 ist eine Primzahl
3 ist eine Primzahl
5 ist eine Primzahl
7 ist eine Primzahl
11 ist eine Primzahl
13 ist eine Primzahl
17 ist eine Primzahl
19 ist eine Primzahl
23 ist eine Primzahl
29 ist eine Primzahl
31 ist eine Primzahl
37 ist eine Primzahl
41 ist eine Primzahl
43 ist eine Primzahl
47 ist eine Primzahl
Code: Alles auswählen
MAX_PRIMES = 15
L=[]
for n in itertools.count():
for x in xrange(2, n):
if n % x == 0:
break
else:
print n, 'ist eine Primzahl'
L.append(n)
if len(L) == MAX_PRIMES:
break
Code: Alles auswählen
for p in [2, 3, 5, 7, 11, 13, 17, 19, 23, 29, 31, 37, 41, 43, 47]:
print p, 'ist eine Primzahl'
Oder eben die bessere Lösung mit `itertools.count`. Wobei ich zugeben muss, dass Artur nichts von meinen ganzen Schnipseln verstanden hat. Schade, ich glaube kaum, dass man es jemanden noch deutlicher vorkauen kann - aber vermutlich ist er nicht mehr konzentriert und komplett überlastet. Kenne ich auch noch aus Studententagen.problembär hat geschrieben: Oh Mann, deshalb ja die 'while'-Konstruktion (und keine for-Schleife). In meinem Beispiel
Code: Alles auswählen
from itertools import count
from math import sqrt
def is_prime(value, primes):
return all(value % prime for prime in primes if int(sqrt(prime)) < value)
def calc_prime_values(limit):
# initial knowledge
primes = [2]
for i in count(3, 2):
if is_prime(i, primes):
primes.append(i)
if len(primes) == limit:
break
return primes
Ich behaupte immer noch, dass das Problem rein gar nichts damit zu tun hat, ob man eine while- oder eine for-Schleife benutzt:problembär hat geschrieben:Oh Mann, deshalb ja die 'while'-Konstruktion (und keine for-Schleife).Artur hat geschrieben:Die Anzahl der Primzahlen ist immer noch von der range abhängig (60). Das sind jetzt genau 17 Primzahlen. die 47 ist die 15. Primzahl. Dh wenn ich es hinbekomme bei einer Listenlänge von 15 ein break einzubauen, müsste die Ausgabe bei der 47 stehenbleiben. Wie mache ich das jetzt.. *grübel*
Code: Alles auswählen
n = 0
for x in itertools.count(2):
if is_prime(x):
print str(x) + ' ist eine Primzahl'
n += 1
if n = 15:
break
# --8<--------8<--------8<--------8<--------8<--------8<--------8<--------8<--
n = 0
x = 2
while True:
if is_prime(x):
print str(x) + ' ist eine Primzahl'
n += 1
if n = 15:
break
x += 1
Code: Alles auswählen
from itertools import count, islice
def iter_primes():
primes = [2]
yield 2
for n in count(3, 2):
if all(n % p != 0 for p in primes):
yield n
primes.append(n)
def main():
for prime in islice(iter_primes(), 15):
print prime, 'ist eine Primzahl.'
if __name__ == '__main__':
main()'
Code: Alles auswählen
for i in range(15):
Warum hat Arturs Lehrer wohl diese Aufgabe gestellt, genau 15 Zahlen zu finden? Ich meine, er will "while" sehen. Die Schüler sollen genau in die Problemlage kommen, die Artur hatte "aber ich bin mit 'for' ja davon abhängig, daß ich nur bis 60 (oder bis woauchimmer) zähle. Das muß ich irgendwie anders machen."Ich habe keine Ahnung, wie groß die 15. Primzahl sein wird. Bitte fange einfach bei 2 an zu zählen und prüfe eine Zahl nach der anderen. Wenn Du dabei eine Primzahl findest, merke Dir das bitte. Sobald Du die 15. gefunden hast, höre bitte auf, weiterzuzählen.
Code: Alles auswählen
#!/usr/bin/env python
# coding: iso-8859-1
l = [2]
num = 2
while len(l) < 15:
isprim = True
for i in l:
if not num % i:
isprim = False
break
if isprim:
l.append(num)
num += 1
for i in range(len(l)):
print str(i + 1) + ". " + str(l[i])
Warum fängst du mit l = [2] an und nicht mit l = []? Das würde mir logischer erscheinen.problembär hat geschrieben:Code: Alles auswählen
#!/usr/bin/env python # coding: iso-8859-1 l = [2] num = 2 while len(l) < 15: isprim = True for i in l: if not num % i: isprim = False break if isprim: l.append(num) num += 1 for i in range(len(l)): print str(i + 1) + ". " + str(l[i])
Code: Alles auswählen
l = []
num = 2
while len(l) < 15:
if all(num % p for p in l):
l.append(num)
num += 1
Code: Alles auswählen
In [22]: all([])
Out[22]: True
Code: Alles auswählen
# grausam, wirklich grausam!
for i in range(len(l)):
# naja... eher häßlich
print str(i + 1) + ". " + str(l[i])
# so gehts doch hübscher, leichter und lesbarer
for index, value in enumerate(l, 1):
print("{}. {}".format(index, value))
Ok, ein Blick in die Doku hilft eben doch manchmal:Hyperion hat geschrieben:@bords0: Ist das ein definiertes Verhalten?Ich hätte da jetzt Zweifel...Code: Alles auswählen
In [22]: all([]) Out[22]: True
Return True if all elements of the iterable are true (or if the iterable is empty).
Durchaus nicht. Lauter unnötiges Modul-Gefrickel dort. Als Vorschlag für einen Programmieranfänger total ungeeignet. Arturs Lehrer wird das auch nicht verstehen und sich darüber wundern, weil er stattdessen eine einfache 'while'-Schleife erwartet.Hyperion hat geschrieben:Generell ist Dein Ansatz natürlich auch richtig, aber Du siehst hoffentlich, dass BlackJacks Lösung viel sauberer und lesbarer ist?
Die Strings sind so richtig konkaterniert!Hyperion hat geschrieben:Gewöhne Dir doch aber wenigstens mal an, Strings richtig zu konkatenieren! Dieses " " + " " + " " + ... Gefrickel liest sich ja furchtbar.
Blödsinn. Ich brauche hier die Elemente der Liste selbst und zugleich die Stellen, an denen sich die Elemente befinden.BlackJack hat geschrieben:Deine letzte ``for``-Schleife lässt mich dann noch daran zweifeln ob Du tatsächlich anderen Leuten Ratschläge für Python-Programme geben solltest. *Das* Anti-Pattern überhaupt im Zusammenhang mit ``for``-Schleifen. Wenn Du das Konzept von Iteratoren nicht magst, solltest Du gänzlich auf ``for`` verzichten, denn das ist nun einmal die Grundlage einer *jeden* ``for``-Schleife in Python.
Code: Alles auswählen
for i in range(len(l)):
Sehe ich nicht so. Aber vielleicht täusche ich mich auch - jedenfalls bist Du sicher nicht qualifizierter als wir, das zu beurteilen.problembär hat geschrieben: Durchaus nicht. Lauter unnötiges Modul-Gefrickel dort. Als Vorschlag für einen Programmieranfänger total ungeeignet.
Das ist ja weder Arturs noch unser Problemproblembär hat geschrieben: Arturs Lehrer wird das auch nicht verstehen und sich darüber wundern, weil er stattdessen eine einfache 'while'-Schleife erwartet.
Na, da sei aber Gott vor! Ich habe so viel von ihm gelernt und lerne immer noch gerne etwas dazu. Im Gegensatz zu Dir, wie es scheint. Wieso beharrst Du auf so dämlichen Konstrukten wie Deiner `for i in range(len(iterable))` Schleife?problembär hat geschrieben: BlackJack sollte davon absehen, Anfängern, bzw. überhaupt jemandem Ratschläge zu Python zu geben, weil er zwar möglicherweise irgendwelchen Modul-Hokuspokus betreiben kann, aber dabei in keiner Weise auf die Bedürfnisse der Fragesteller eingeht.
Nur weil es ihn gibt, heißt das nicht, dass das der bevorzugte Weg sein sollte, Strings zu konkatenieren! In C geht das im übrigen auch nicht, sondern ähnelt eher der `format`- oder auch der `%`-Methodik wo Du doch sonst immer so C-esquen Code schreibst...problembär hat geschrieben: Die Strings sind so richtig konkaterniert!
Das ist so auch viel lesbarer als dieser '" ".join()'-Schwachsinn, den jedenfalls kein Anfänger versteht, während bei "+" sofort klar ist, was gemeint ist.
Wenn das nicht so wäre, gäbe es den +-Operator für Strings überhaupt nicht.
Unsinn! `enumerate` ist der offensichtliche Weg! Damit hast Du einen (frei definierbaren) Index und das Element - besser geht es nicht. Zudem brauchst Du beim Zugriff kein hässliches und verworrenes Index-Gefummel.problembär hat geschrieben: Blödsinn. Ich brauche hier die Elemente der Liste selbst und zugleich die Stellen, an denen sich die Elemente befinden.ist dafür der einfachste, schnellste und beste Weg. Der auch weder irgendeinen Fehler, noch eine Warung des Interpreters hervorruft, also in jeder Hinsicht zulässig ist.Code: Alles auswählen
for i in range(len(l)):
Das hier steht auf wiki.python.orgproblembär hat geschrieben:Die Strings sind so richtig konkaterniert!Hyperion hat geschrieben:Gewöhne Dir doch aber wenigstens mal an, Strings richtig zu konkatenieren! Dieses " " + " " + " " + ... Gefrickel liest sich ja furchtbar.
Das ist so auch viel lesbarer als dieser '" ".join()'-Schwachsinn, den jedenfalls kein Anfänger versteht, während bei "+" sofort klar ist, was gemeint ist.
Wenn das nicht so wäre, gäbe es den +-Operator für Strings überhaupt nicht.
Wie wär's mit diesem:problembär hat geschrieben:Blödsinn. Ich brauche hier die Elemente der Liste selbst und zugleich die Stellen, an denen sich die Elemente befinden.BlackJack hat geschrieben:Deine letzte ``for``-Schleife lässt mich dann noch daran zweifeln ob Du tatsächlich anderen Leuten Ratschläge für Python-Programme geben solltest. *Das* Anti-Pattern überhaupt im Zusammenhang mit ``for``-Schleifen. Wenn Du das Konzept von Iteratoren nicht magst, solltest Du gänzlich auf ``for`` verzichten, denn das ist nun einmal die Grundlage einer *jeden* ``for``-Schleife in Python.ist dafür der einfachste, schnellste und beste Weg. Der auch weder irgendeinen Fehler, noch eine Warung des Interpreters hervorruft, also in jeder Hinsicht zulässig ist. Es gibt keinen vernünftigen Grund, darauf zu verzichten.Code: Alles auswählen
for i in range(len(l)):
Code: Alles auswählen
Iterating through an array
Python's for statement is not like C's; it's more like a "foreach" statement in some other languages. If you need to use the loop index explicitly, the standard way is like this:
array = [1, 2, 3, 4, 5] # or whatever
for i in range(len(array)):
# Do something with 'i'.
This is quite clumsy. A somewhat cleaner way to do this is:
array = [1, 2, 3, 4, 5] # or whatever
for i, e in enumerate(array):
# Do something with index 'i' and its corresponding element 'e'.
Das, was wir propagieren ist nicht ideologisch, sondern idiomatisch. In Python programmiert man eben so. Du willst es bloß nicht lernen, weil du meinst, Grundkenntnisse in C, Pascal, oder welch paläolithischer Programmiersprache auch immer, würden schon genügen, um damit durchzukommen. Ebenso ist dein Hinweis auf "Modul-Gefrickel" einfach nur lachhaft. Klar, jeder Landwirt züchtet die Ochsen selber, die seinen Pflug ziehen, und jeder Optiker hat im Keller einen Schmelzofen in dem er aus Quarzsand, Soda und Pottasche Glas für seine Brillen herstellt, und jeder Programmierer ingoriert die Standard-Bibliothek seiner Programmiersprache und wurstelt auf der niedrigsten Abstraktionsebene alles selber zusammen. Letztes Jahr hab ich mit solchen Leuten zusammenarbeiten müssen. Einer hat allen Ernstes in geschachtelten Schleifen mittels "+" XML-Dateien erzeugt. Nachdem ich das gesehen hatte, hätte ich mir wieder mal am liebsten die Augen mit Kernseife ausgewaschen.problembär hat geschrieben:Ihr verbietet euch selbst und anderen immer wieder brauchbare und sinnvolle Konzepte, allein aufgrund einer völlig verqueren Ideologie.
Die es noch nicht einmal gibt, sondern die ihr euch nur einbildet. Sehr armselig.
Na dann: Servus. Einer weniger, der die n00bs verdirbt.problembär hat geschrieben:Auf so einen Unsinn wie dieses Forum kann ich gut verzichten.