Programlamanın temel yapı taşlarından biri de bir komutlar grubunun tekrar tekrar işletilmesidir. Bu döngüler her zaman bir şart ile beraber kullanılır. Şart doğru olduğu sürece döngü tekrarlanır, yanlış hale geldiğinde durur.
Aşağıdaki döngü 1-9 arası rakamları ekrana basar.
In [2]:
a = 1
b = 10
while a<b:
print a,
a = a+1 # her adımda a'yı 1 arttır.
while
kelimesinin ardından bir şart belirtilmelidir. Şart doğruysa while
blokundaki komutlar işletilir.while
bloku içinde komutlar kaydırılmalıdır.while
şartı tekrar değerlendirilir, doğruysa blok bir daha işletilir.a
10 değerine geldiğinde a<b
şartı yanlış olur ve döngü biter. Bu sağlanmazsa program sonsuz döngüye girer.Ctrl-m
ve ardından i
tuşlarına basarak hesaplamayı durdurabilirsiniz.Bu sefer 1-10 arası sayıların toplamını veren bir döngü yazalım:
In [3]:
a = 1
b = 10
toplam = 0
while a <= b: # b'yi dahil etmek istediğimiz için küçükeşit kullandık
toplam += a # toplam = toplam + a
a += 1
print toplam
Alıştırmalar: Yukarıdaki programı değiştirerek şu işlemleri yapın.
Sık sık döngü içinde döngüler kullanmak gerekecektir. Bunun için bir while
bloku içinde başka while
blokları yaratabiliriz.
Örnek olarak, $p=1,2,3,4,5,6$ olmak üzere, $1^p + 2^p + \cdots + 10^p$ toplamını hesaplayan bir program yazalım. Önce, verilen bir $p$ için bu toplamı hazırlayan yalınkat bir döngü yazmakla başlayalım.
In [4]:
p = 2
n = 1
toplam = 0
while n<=10:
toplam += n**p
n += 1
print toplam
Şimdi, bu n
döngüsünün etrafına p
döngüsünü "saralım".
In [6]:
p = 1
while p<=6:
n = 1
toplam = 0
while n<=10:
toplam += n**p
n += 1
print p, toplam
p += 1
İçiçe döngüleri en içten başlayarak aşama aşama oluşturmak daha kolaydır ve hataları engellemeye yardımcı olur.
Başka bir örnek: Kullanıcıdan bir sayı alarak, birden o sayıya kadar olan sayıların toplamını veren bir program yazalım. Kullanıcı -1 değeri girdiğinde program bitsin.
In [9]:
n = input("Üst sınır (-1 bitirir): ")
while n != -1:
i = 1
toplam = 0
while i<=n:
toplam += i
i += 1
print "1 + ... +",n,"=",toplam
n = input("Üst sınır (-1 bitirir): ")
break
komutu, bir çevrimin bitmesini beklemeden hemen döngünün sonlandırılmasını sağlar. Örnek olarak, yukarıdaki örneği farklı şekilde yazalım. Bir sonsuz döngü içinde kullanıcıdan girdi alalım, kullanıcı -1 girdiğinde döngüyü kıralım.
In [10]:
while True: # sonsuz döngü
n = input("Üst sınır (-1 bitirir): ")
if n==-1:
break
i = 1
toplam = 0
while i<=n:
toplam += i
i += 1
print "1 + + ... +",n,"=",toplam
Başka bir örnek olarak, verilen bir sayının asal olup olmadığını veren bir program yazalım. Verilen sayının kareköküne kadar bütün tamsayıları tek tek deneyip, verilen sayıyı bölen bir tane bulursak asal olmadığını, bulamazsak asal olduğunu anlarız.
In [12]:
n = input("Sayı: ")
asal = True # Asal olduğunu varsayarak başlarız
i = 2
while i*i <= n:
if n%i == 0:
asal = False
break # döngüden çık
i += 1
if asal:
print n,"asal."
else:
print n,"asal değil."
continue
komutu, döngü blokunun geri kalanını işletmeden, blokun başına dönmeyi sağlar. Tekrarlama şartı yeniden değerlendirilir ve döngü buna göre yeniden başlatılır.
Örnek olarak, bir önceki programı negatif sayılar verildiğinde, işlem yapmadan, tekrar soracak şekilde değiştirelim.
In [ ]:
while True: # sonsuz döngü
n = input("Üst sınır (-1 bitirir): ")
if n==-1:
break
if n<0:
print "Pozitif sayı girin."
continue # döngünün kalanını atla, başa dön
i = 1
toplam = 0
while i<=n:
toplam += i
i += 1
print "1 + + ... +",n,"=",toplam
for
ifadesi dizili nesneler (çokuz, dize, liste, vs.) üzerinden sırayla geçmeyi sağlar. Sözgelişi, bir listede bulunan sayıların toplamını bulabiliriz. Önce, bunu while
ile nasıl yapacağımızı görelim.
In [24]:
L = [1, 4, 7, 2, 9, 45]
toplam = 0
i = 0
while i<len(L):
toplam += L[i]
i += 1
print toplam
Aynısını for
ile yapmak daha sade ve daha "Pythonca" olur.
In [25]:
L = [1, 4, 7, 2, 9, 45]
toplam = 0
for x in L:
toplam += x
print toplam
Yukarıda geliştirdiğimiz 1-N arası sayıların toplamı programını for
ile şöyle yazarız.
In [16]:
N = input("Üst sınır: ")
toplam = 0
for x in range(N+1):
toplam += x
print toplam
Başka örnekler
In [20]:
s = "Merhaba"
for c in s:
print c,"-",
In [21]:
T = ((1,2), (5,3), (-5, 9))
for a,b in T:
print a, "+", b, "=", a+b
break
ve continue
komutları for
döngülerinde de aynen işler.