• Keine Ergebnisse gefunden

1 range range For-Schleife

N/A
N/A
Protected

Academic year: 2021

Aktie "1 range range For-Schleife"

Copied!
7
0
0

Wird geladen.... (Jetzt Volltext ansehen)

Volltext

(1)

G. Zachmann Informatik 1 - WS 05/06 Einführung in Python 1 65

For-Schleife

 Anders als in C++

 Definition:

for x in list : statements

 Oft wird list durch die range -Funktion generiert (s. später)

 Statt range kann jede andere Art von Listen stehen

 Erstes Beispiel eines Iterators!

Folge noch nicht

erschöpft

statement(s) false

true erzeuge Zahlenfolge

x = nächstes Element aus Folge

Beispiel C++ vs. Python

 Beispiele:

 in C++:

"Schleifenvariable"

(loop variable)

# float q, int n s = 0.0

# s = geom. Reihe 1 + q + q^2 + q^3 + … + q^n qq = 1.0

for i in range(n):

s += qq qq *= q print s

Loop body (Schleifenrumpf)

// float q; unsigned int n;

float s = 0;

// s = geom. Reihe 1 + q + q^2 + q^3 + … + q^n float qq = 1;

for ( unsigned int i = 0; i < n; i ++ ) {

s += qq;

qq *= q;

}

(2)

G. Zachmann Informatik 1 - WS 05/06 Einführung in Python 1 67

Beispiel: "Chaos Game"

 Spiel in einem gleichseitigem Dreieck, dessen Ecken rot, gelb und blau eingefärbt sind.

 Starte bei Punkt R

 Wiederhole:

 Wähle zufällig einen Eckpunkt

 Gehe die Hälfte der Strecke zwischen momentanen Standpunkt und dem ausgewählten Eckpunkt

 Male dort einen Punkt

R: (0, 0) G: (512, 0)

B: (256, 256 . √3)

0

1 2

3 4

5

6

import Image import random import sys

im = Image.new("RGB", (512, 512), (256, 256, 256) ) N = int( sys.argv[1] )

x = 0.0 y = 0.0

for i in range( 0, N ):

r = random.random() if r < 0.333:

x0 = 0.0 y0 = 0.0 elif r < 0.6667:

x0 = 512.0 y0 = 0.0 else:

x0 = 256.0 y0 = 443.4 x = ( x0 + x ) / 2.0 y = ( y0 + y ) / 2.0

im.putpixel ( (int(x), int(y)), (int(x), int(y), 0) ) im.show()

Hier fehlt eigtl ein Test, ob

überhaupt ein Command-Line-Argument

angegeben wurde!

(3)

G. Zachmann Informatik 1 - WS 05/06 Einführung in Python 1 69

 Frage: was passiert, wenn man einen zufäligen Punkt im Inneren des ursprünglichen RGB-Dreiecks als "Seed" nimmt?

% ./ChaosGame.py 100000

R G

Sierpinski-Dreieck B

Geschachtelte Schleifen (nested loops)

 Analog wie in anderen Sprachen

 Schleifenrumpf kann wieder Schleife enthalten:

 in C++:

for i in range(…):

for j in range(…):

... Andere

Schleifenvariable nehmen!

for ( uint i = 0; ... ) {

for ( uint j = 0; ... ) {

...

}

}

(4)

G. Zachmann Informatik 1 - WS 05/06 Einführung in Python 1 74

Break und continue

 Wie in C++: zusätzliche Sprünge innerhalb der Schleife

break: springt aus Schleife heraus (nur 1 Level!)

continue: startet sofort den nächsten Schleifendurchlauf

Bedingung Schleifen- rumpf

while ...:

if ...:

break if ...:

continue ...

# continue jumps here

# break jumps here

while (...) {

if ( ... ) break;

if ( ... ) continue;

...

// continue jumps here }

// break jumps here

Längeres Beispiel: Longest Run

list_size = 3 n_values = 0 longest_run = 0 length = 0 last_value = 0

while n_values < list_size:

value = input()

if value == last_value:

length += 1 else

length = 1

if longest_run < length:

longest_run = length last_value = value

n_values += 1

Angenommen, wir

wüssten das

(5)

G. Zachmann Informatik 1 - WS 05/06 Einführung in Python 1 77

list_size = 3 n_values = 0 longest_run = 0 length = 0 last_value = 0

while n_values < list_size:

value = input()

if value == last_value:

length += 1 else

length = 1

if longest_run < length:

longest_run = length last_value = value

n_values += 1

print "Longest Run = %d\n" %(longest_run) list_size Eingabe: 1.0 5.0 5.0

3 n_values 0 longest_run 0 length 0 last_value 0 value 1.0

1 1 1.0

1

5.0 5.0 2 2 2 3

Korrekte Programme durch vollständige Fallunterscheidung list_size = 3

n_values = 0 longest_run = 0 length = 0 last_value = 0

while n_values < list_size:

value = input()

if value == last_value:

length += 1 else

length = 1

if longest_run < length:

longest_run = length last_value = value

n_values += 1

print "Longest Plateau = %d\n" % (longest_run)

Kennt man

i.A. nicht!

(6)

G. Zachmann Informatik 1 - WS 05/06 Einführung in Python 1 79

import sys

lines = sys.stdin.readlines() longest_run = 0

length = 0 last_value = 0 for line in lines:

value = float(line) if value == last_value:

length += 1 else

length = 1

if longest_run < length:

longest_run = length last_value = value

print "Longest Plateau = %d\n" % (longest_run) Diese Funktion liest alle Zeilen auf einmal in eine Liste

Problem: was, wenn float(lines[0]) == 0?!

NB: Eingabe auf stdin mit CTRL-D abschließen.

(CTRL-D = EOF [end-of-file] unter unix)

import sys

lines = sys.stdin.readlines() length = 0

longest_run = 0 first = True for line in lines:

value = float(line) if first:

last_value = value – 1 first = False

if value == last_value:

length += 1

if longest_run < length:

longest_run = length else

length = 1 last_value = value

print "Longest Plateau = %d\n" % (longest_run)

Noch ein Problem:

was, wenn der input stream

gar nicht mehr aufhört?!

(7)

G. Zachmann Informatik 1 - WS 05/06 Einführung in Python 1 81

Interaktives Programm

 Lissajous-Figuren

 Idee: zwei orthogonale Schlitten, die hin- und herfahren und gemeinsam einen Stift führen

 Schlitten werden durch periodische Funktionen gesteuert, z.B. sin/cos

Referenzen

ÄHNLICHE DOKUMENTE

In the Maero- granometer, the depositing sampie is weighed at sedimentation time instants whieh eorrespond to a series of 0.02-intervals of settling rate

In Verbindung mit unseren Zentrierringen 20240 können weitere Verbindungselemente passgenau auf dem Schlitten montiert werden.. Schnelle und nachträgliche Kombinierbarkeit in

Ob für den Messgerätebau, die optische Industrie, Wartung, Bearbeitung oder auch Fertigung von Sondermaschinen – die norelem Schlittenführungen bieten vielseitige, hochwertige

[r]

Wenn er dann auch noch so stabil ist, daß er Mittelformat- und Videoka- meras zu tragen vermag— auch mit diesen kann man schließ- lich Nah- und sogar Makroauf- nahmen machen —,

Mit der Forderung für einen ei- genen Facharzt für Notfallmedizin (Deutsches Ärzteblatt, Heft 30/2010) habe sich die DGINA gegen ein wichtiges satzungsgemäßes Ziel der

In Awatok‘s Hütte aber herrschte eine solche Unreinlichkeit, dass ich mich schleunigst wieder entfernte, um mich nach einer besseren Herberge umzusehen und meine Kleider zu

Gerade bei Befestigung des Kreuzkopfes auf der Kolbenstange sollte neben der absoluten Betriebssicherheit aber auch auf leichtes Lösen der Teile Rücksicht genommen werden, da es ja