SharedSage genom exempel / Iteration.sagewsOpen in CoCalc

Iteration

Ibland behöver man upprepa exekveringen av t.ex. en beräkning. Med while upprepas koden som hör till while-satsen så länge ett logiskt uttryck är sant. Den kod som ingår i while-satsen ska skrivas med indrag.
k = 1
while k < 5 :
    print 'k =', k
    k = k + 1
print u'Ingår inte i while-satsen'
k = 1 k = 2 k = 3 k = 4 Ingår inte i while-satsen
Om det logiska uttrycket är falskt redan från början kommer inte koden i while-satsen att exekveras.
k = 10
while k < 5 :
    print 'k =', k
    k = k + 1
print u'Ingår inte i while-satsen'
Ingår inte i while-satsen
Nästlade iterationer är möjligt. Tänk på att man i koden markerar med olika storlek på indragen till vilken iteration koden ingår. I koden nedan utnyttjar vi att om man multiplicerar en textsträng med ett positivt heltal nn så konkatenerar Sage nn kopior av textsträngen.
a = 1
while a <= 5 :
    b = a
    while b <= 5 :
        b = b + 1
        print 'a' * a, 'b' * b
    a = a + 1
a bb a bbb a bbbb a bbbbb a bbbbbb aa bbb aa bbbb aa bbbbb aa bbbbbb aaa bbbb aaa bbbbb aaa bbbbbb aaaa bbbbb aaaa bbbbbb aaaaa bbbbbb
Med break kan vi avbryta en iteration.
a = 1
while a <= 5 :
    b = a - 1
    while b <= 5 :
        b = b + 1
        if is_prime(b) :
           break  # avrbyt iterationen (gå ut till den yttre iterationen)
        print 'a' * a, 'b' * b
    a = a + 1
a b aaaa bbbb
Med continue hoppar man över resten av aktuellt iterationssteg.
a = 1
while a <= 5 :
    b = a - 1
    while b <= 5 :
        b = b + 1
        if is_prime(b) :
           continue
        print 'a' * a, 'b' * b
    a = a + 1
a b a bbbb a bbbbbb aa bbbb aa bbbbbb aaa bbbb aaa bbbbbb aaaa bbbb aaaa bbbbbb aaaaa bbbbbb
Då det i förväg är givet hur många iterationer man vill utföra kan man använda kommandot for istället.
for k in [1, 4, 0, -10, 'Sage'] :
    print 'k =', k
k = 1 k = 4 k = 0 k = -10 k = Sage
for k in [-2..2] :
    print 'k =', k
k = -2 k = -1 k = 0 k = 1 k = 2
for k in range(10) :
    print 'k =', k
k = 0 k = 1 k = 2 k = 3 k = 4 k = 5 k = 6 k = 7 k = 8 k = 9
for t in 'CoCalc' :
    print t.upper()
C O C A L C
För större listor bör man använda xrange, som är lik range men som är anpassad att vara snabbare och mer minneseffektiv vid iterationer.
S = 0
for k in xrange(100000) :
    S = S + k
S
4999950000
Det går bra att itererar över en ordlista.
udda = {1:'ett', 3:'tre', 5:'fem', 7:'sju', 9:'nio'}
for k in udda.keys() :
    print k
1 3 9 5 7
for v in udda.values() :
    print v
ett tre nio fem sju
for k, v in udda.iteritems() :
    print 'k =', k, ', v =', v
k = 1 , v = ett k = 3 , v = tre k = 9 , v = nio k = 5 , v = fem k = 7 , v = sju
Även for-satser går att nästla och avbryta med break eller continue.