Arcade Türü Oyun Programlamayı ve Bilgisayar Bilimleri Öğrenin

Arcade Türü Oyun Programlamayı
ve Bilgisayar Bilimleri Öğrenin

Chapter 3: Quiz Oyunları ve İf Yapıları

Bir oyuncunun yüksek bir skor yaptığını nasıl söyleriz? Oyuncunun hiç canı kalmadıysa bunu nasıl söyleriz? Kilitli bir kapıyı açması için anahtarın gerekli olduğunu, oyuncuya nasıl söyleyebiliriz?

Video: if yapısına giriş

Bahsettiğimiz if yapısı ayrıca koşullu ifade olarak da bilinir. (Ne kadar zeki olduğunuzu herkese göstermek istediğinizde "koşullu ifade" yapısını kullanabilirsiniz.) if yapısı bilgisayarın bir karar vermesini sağlar. Dışarısı sıcak mı? Uzay gemisi ekranın kenarına ulaştı mı? Hesaptan çekilen para çok mu fazla? Bir program bu koşulları if yapısını kullanarak test eder.

3.1 Basit Karşılaştırmalar

Burada birkaç if yapısı örneği var. İlk bölümde üç adet değişken (a,b ve c) if yapısında kullanılmak için tanımlanıyor. Daha sonra, iki if yapısı bize biri diğerinden daha büyük olan değişkenleri nasıl karşılaştıracağımızı gösteriyor.

# if yapısı örneğinde kullanılan değişkenler
a=4
b=5

# Basit karşılaştırmalar
if a<b:
    print("a'nın değeri b'den daha küçüktür")

if a>b:
    print("a'nın değeri b'den daha büyüktür)
	
print("Bitti")
Değişkenler:
a=4
b=5
Çıktı:
a'nın değeri b'den daha küçüktür.
Bitti

a'nın değeri b'den daha küçük olduğu için, ilk yapı bu kodu çalıştıracaktır. Eğer a ve b değerlerinin ikisi de 4'e eşitse yukarıdaki iki if yapısı da bir şey yazdırmayacaktır. 4 sayısı 4'ten büyük değildir, yani if'li ifade başarısız olacaktır.

Alttaki örnek sayıların büyük veya eşit olduğunu nasıl kontrol edeceğimizi gösteriyor: (Ç.N matematikteki 'küçük eşittir' ve 'büyük eşittir'in Python karşılıkları.)

if a<=b:
    print("a küçük eşittir b")

if a>=b:
    print("a büyük eşittir b")

<= ve >= sembolleri bu sırayla yazılmalı ve aralarında boşluk olmamalıdır. Örneğin, =< ve aynı şekilde < = ifadelerinin ikisi de çalışmayacaktır.

Bazı öğrenciler sınavda bu sembolleri yazarken ≤ sembolünü kullanmayı seviyor. Örneğin:

# Bu kod çalışmayacaktır
if a ≤ b:
    print("a küçük eşittir b")

Yorumda da yazılı olduğu üzere, bu sembol bir programda çalışmayacaktır. Ayrıca birçok insan bunu klavyede nasıl yazacağını da bilmez. ('alt' tuşuna basılı klavyenin numerik kısmında 243'e basın.) Sonuç olarak, kodu yazarken kullanılması gerekenin <= olduğunu ve ≤ olmadığını aklınızda tutun.

# Eşittir
if a==b:
    print("a ve b eşittir")
   
# Eşit değildir 
if a != b:
    print("a ve b eşit değildir")
Dikkat! Yaygın yapılan bir hatadır.

NOT: == ve = sembollerini kullanırken birbirlerine karışmaları çok kolaydır. İki şeyin eşit olup olmadığını öğrenmek için ==, bir değişkene değer atamak için = kullanın.

= ve == ifadelerinin karıştırılmasıyla ilgili en çok yapılan iki hata aşağıda örneklenmiştir:

# Bu yanlıştır
a==1
	
# Bu da yanlıştır
if a=1:
    print("A'nın değeri 1'e eşittir")

Durun! Lütfen bir dakikalığına geri gidin ve son iki kod örneğini dikkatlice çalışın. Daha sonra = ve == kullanacağınız zaman bunları anladığınızdan emin olmak için zaman ayırın. Tahmin etmeyin.

3.2 Girintileme

Girintileme önemlidir. if yapısı sağlandığında altında yer alan sadece girintili olan satırlar çalıştırılacaktır:

if a==1:
    print("a bir ise, bu yazdırılacak.")
    print("Ayrıca bu da.")
    print("Ve bu da.")

print("Bu metin girintili olmadığı için her zaman yazdırılacak.")

Girintileme her yerde aynı olmak zorundadır. Bu kod çalışmaz.

if a==1:
  print("İki boşluk kadar girintilendi.")
    print("Dört boşluk girintilendi. Bu bir hataya sebep olacak.")
   print("Bilgisayar karar vermenizi isteyecek.")

Once an if statement has been finished, it is not possible to reindent to go back to it. The test has to be performed again. Bir if ifadesi bittiğinde, tekrar girdileyerek ona geri dönmek mümkün değildir. Testi tekrar gerçekleştirelim.

if a==1:
    print("a bir ise, bu yazdırılacak.")
    print("Ayrıca bu da.")

print("Bu metin girintili olmadığı için her zaman yazdırılacak.")
    print("Bu bir hataya sebep olacak. Neden girintilendi?")

3.3 And/Or Kullanımı

Bir if ifadesi birden çok koşulu karşılaştırmaları birbirine and ve or ile ekleyerek denetleyebilir.

# And
if a < b and a < c:
    print("a, b ve c'den küçüktür.")
 
# Özel Olmayan or   
if a < b or a < c:
    print("a, b veya c den küçüktür (veya ikisinden de).")
Lütfen kendinizi tekrar edin.

Çoklu koşullarda kontrol sırasında karşıdaki değişkeni kaldırmak yaygın yapılan bir hatadır. Alttaki kod çalışmaz çünkü bilgisayar c değişkeni karşısında hangi değişkeni kontrol edeceğini bilmeyecektir. a'nın karşısında kontrol edeceğini farzetmeyecektir.

# Bu doğru değildir
if a < b or < c:
    print("a, b ve c'den daha küçüktür")

3.4 Mantıksal Değişkenler

Python mantıksal değişkenleri(boolean variables) destekler. Mantıksal değişken nedir? Mantıksal değişkenler bir True veya False (Ç.N doğru ya da yanlış) değerlerini tutan değişkenlerdir. Boolean cebri denilen matematik 1854 yılında George Boole tarafından geliştirilmiştir. Keşke o zamanlar bu çalışmasının modern bilgisayar mantığının temeli olacak kadar önemli olduğunu bilseydi!

Bir if yapısı True veya False sonucuna varabilmek için bir deyime ihtiyaç duyar. Garip görünebilecek şey ise, if yapısı eğer bir değişken halihazırda True veya False olarak hesaplama yapıyorsa herhangi bir karşılaştırmaya ihtiyaç duymaz.

# Boolean veri türü. Bu geçerlidir!
a=True
if a:
    print("a'nın değeri True'dur.")

Back when I was in school it was popular to say some false statement. Wait three seconds, then shout “NOT!” Well, even your computer thinks that is lame. If you are going to do that, you have to start with the function not(). The following code uses the not() function to flip the value of a between true and false. Okulda olduğum yıllara dönersek yanlış demek o günlerde popülerdi. Üç saniye bekler, ardından "YANLIŞ!" diye bağırırdık. Aslında, bilgisayar bile bu aksaklığı düşünür. Bunu yapacaksanız, not() fonksiyonuyla başlamalısınız. Alttaki kod not() fonksiyonunu kullanarak a'nın değerini doğru ve yanlış (true ve false) arasında değiştiriyor.

# not fonksiyonu nasıl kullanılır
if not(a):
    print("a yanlıştır")

Ayrıca, mantıksal değişkenleri and ve or operatörleri ile kullanmak da mümkündür.

a=True
b=False

if a and b:
    print("a ve b'nin ikisinin de değeri true")
True/False'un zor olabileceğini kim bilebilirdi?

It is also possible to assign a variable to the result of a comparison. In the code below, the variables a and b are compared. If they are equal, c will be True, otherwise c will be False.

a=3
b=3
# Sonraki satır tuhaf görünebilir, fakat geçerlidir.
# c true veya false olabilir, a ve b'nin eşit
# olmasına bağlıdır.
c = a == b
# c'nin değerini yazdırır, bu durumda True
print(c)
Sıfır False demektir. Onun dışındaki her şey True'dur.

True veya False hesabı yapmayan bir koşulla if yapısı oluşturmak mümkündür. Bu genelde istenmez, fakat bilgisayarın sorunları ararken bu değişkenlerle nasıl başa çıktığını anlamak için önemlidir. Alttaki ifade geçerlidir ve if yapısının içerisi sıfır olmadığı için yazıların yazdırılmasını sağlayacaktır:

if 1:
	print("1")
if "A":
	print("A")

Alttaki kod hiçbir şey yazdırmayacaktır. Çünkü if yapısının içerisindeki değer sıfırdır ve False olarak muamele görecektir. Sıfır dışındaki diğer tüm değerler True olarak işleme alınır.

if 0:
	print("Sıfır")

Alttaki kodta, ilk if yapısı çalışacak gibi görünüyor. Sorun ise a değişkeninin değeri b olmasa bile True olarak işlem görmesi. Sebebi ise b'nin kendisinin True olarak görülmesi.

a="c"
if a=="B" or "b":
	print("a eşittir b. Belki.")
	
# Bu if yapısını kurmak için daha iyi bir yol.
if a=="B" or a=="b":
	print("a eşittir b.")

3.5 Else ve Else If

Alttaki kod kullanıcıdan sıcaklığı alacak ve eğer sıcaksa ekrana sıcak olduğunu yazacak. (Ç.N kodlardaki temperature=sıcaklık.)

temperature=int(input("Sıcaklık Fahrenheit cinsinden nedir? "))
if temperature > 90:
    print("Dışarısı sıcak")
print("Bitti")

Programcı kodunun hava sıcak olmadığında da çalışmasını istiyorsa, else ifadesini kullanabilir. else'in if'teki i ile nasıl hizalandığına ve if yapısındaki gibi iki nokta ile devam ettiğine dikkat edin.

Bir if...else ifadesinde bir kod bloğu her zaman işlenir. Eğer ifade True olarak hesaplanırsa ilk blok, False olarak hesaplanırsa ikinci blok çalıştırılacaktır.

temperature=int(input("Sıcaklık Fahrenheit cinsinden nedir? "))
if temperature > 90:
    print("Dışarısı sıcak")
else:
    print("Dışarısı sıcak değil")
print("Bitti")

Birkaç if ifadesini zincir şeklinde birlikte kullanmak else...if'i kullanarak mümkündür. Python bunu elif olarak kısaltır.

temperature=int(input("Sıcaklık Fahrenheit cinsinden nedir? "))
if temperature > 90:
    print("Dışarısı sıcak")
elif temperature < 30:
    print("Dışarısı soğuk")
else:
    print("Dışarısı sıcak değil")
print("Bitti")
Video: if ifadelerinin bağlanma sırası

Alttaki kodta, program kullanıcı 120 derece dahi girse "Dışarısı sıcak" yazacaktır. Neden? Kod nasıl düzeltilebilir?

Bulamıyorsanız, videoyu izleyin.

temperature = int(input("Sıcaklık Fahrenheit cinsinden nedir? "))
if temperature > 90:
    print("Dışarısı sıcak")
elif temperature > 110:
    print("Kaldırıma tava koyup yumurta kızartabilirsin!")
elif temperature < 30:
    print("Dışarısı soğuk")
else:
    print("Dışarısı normal")
print("Bitti")

3.6 Metin Karşılaştırma

if yapısını kullanarak yazıyı kontrol etmek mümkündür. (Not, önerilen IDLE programı yerine Eclipse kullanılıyorsa, örnek çalışmayacaktır. Çünkü girişte alınanlar fazladan sonuç içerecektir.)

userName = input("Adın ne? ")
if userName == "Paul":
    print("Güzel bir ismin var.")
else:
    print("İsmin fena değil.") 

Önceki örnek kullanıcı sadece "Paul" yazarsa eşleşmeyi sağlayacaktır. Kullanıcı "paul" ya da "PAUL" girerse çalışmaz.

Karşılaştırılacak metnin etrafındaki tırnakların unutulması çok yapılan bir hatadır. Alttaki örnekte, bilgisayar Paul'u değer tutan bir değişken olarak düşünür. Paul değişkeninde ne tutulduğuna dair bilgisayarın hiçbir fikri olmayacağı için de bize bir hata verecektir.

userName = input("Adın ne? ")
if userName == Paul: # Tırnaklar olmadığı için bu çalışmayacaktır
    print("Güzel bir ismin var.")
else:
    print("İsmin fena değil.") 

3.6.1 Çoklu metin olasılıkları

Bir değişkeni birden çok olası metinle karşılaştırırken, karşılaştırmanın değişkeni içermesinin zorunlu olduğunu hatırlamak önemlidir. Örneğin:

# Bu çalışmaz! Koşul her zaman doğrudur
if userName == "Paul" or "Mary":

Onun yerine, bu kod düzgün çalışır:

# Bu çalışır
if userName == "Paul" or userName == "Mary":

Bunun sebebi, bilgisayarın sıfırdan farklı olan bütün değerleri True kabul etmesidir. "Mary" ile True aynı şeydir ve sonuçta, if ifadesinin içerisindeki kod çalışır.

3.6.2 Büyük/küçük harf duyarsız karşılaştırmalar

Program büyük/küçük harfe bakmaksızın bir eşleşmeyi kontrol etmek isterse, yapılacak en basit iş her şeyi küçük harfe çevirmektir. Bu işlem lower komutu ile yapılabilir.

Alttaki örnek kullanıcı ne girdiyse alır, onu küçük harflere çevirir ve daha sonra karşılaştırmayı yapar. Önemli: Girilen ifadeyi büyük harf içeren bir metin ile karşılaştırmayın. Kullanıcının girdikleri küçük harfe çevrildiyse ve daha sonra da büyük harflerle karşılaştırıldıysa, bir eşleşmenin gerçekleşmesi imkansızdır.

userName = input("Adın ne? ")
if userName.lower() == "paul":
    print("Güzel bir ismin var.")
else:
    print("İsmin fena değil.") 

3.7 if Yapısı Örnekleri

Sıradaki kod örnekleri önceden konuşulan bütün fikirler hakkında tekrar içerir. Video her kodun her satırını izler ve onları açıklar.

Video: if Yapısı Örnekleri
# Sample Python/Pygame Programs
# Simpson College Computer Science
# http://programarcadegames.com/
# http://simpson.edu/computer-science/

# Explanation video: http://youtu.be/pDpNSck2aXQ

# Variables used in the example if statements
a = 4
b = 5
c = 6

# Basic comparisons
if a < b:
    print("a is less than b")

if a > b:
    print("a is greater than than b")

if a <= b:
    print("a is less than or equal to b")

if a >= b:
    print("a is greater than or equal to b")

# NOTE: It is very easy to mix when to use == and =.
# Use == if you are asking if they are equal, use =
# if you are assigning a value.
if a == b:
    print("a is equal to b")

# Not equal
if a != b:
    print("a and b are not equal")

# And
if a < b and a < c:
    print("a is less than b and c")

# Non-exclusive or
if a < b or a < c:
    print("a is less than either b or c (or both)")


# Boolean data type. This is legal!
a = True
if a:
    print("a is true")

if not a:
    print("a is false")

a = True
b = False

if a and b:
    print("a and b are both true")

a = 3
b = 3
c = a == b
print(c)

# These are also legal and will trigger as being true because
# the values are not zero:
if 1:
    print("1")
if "A":
    print("A")

# This will not trigger as true because it is zero.
if 0:
    print("Zero")

# Comparing variables to multiple values.
# The first if statement appears to work, but it will always
# trigger as true even if the variable a is not equal to b.
# This is because "b" by itself is considered true.
a = "c"
if a == "B" or "b":
    print("a is equal to b. Maybe.")

# This is the proper way to do the if statement.
if a == "B" or a == "b":
    print("a is equal to b.")

# Example 1: If statement
temperature = int(input("What is the temperature in Fahrenheit? "))
if temperature > 90:
    print("It is hot outside")
print("Done")

# Example 2: Else statement
temperature = int(input("What is the temperature in Fahrenheit? "))
if temperature > 90:
    print("It is hot outside")
else:
    print("It is not hot outside")
print("Done")

# Example 3: Else if statement
temperature = int(input("What is the temperature in Fahrenheit? "))
if temperature > 90:
    print("It is hot outside")
elif temperature < 30:
    print("It is cold outside")
else:
    print("It is not hot outside")
print("Done")

# Example 4: Ordering of statements
# Something with this is wrong. What?
temperature = int(input("What is the temperature in Fahrenheit? "))
if temperature > 90:
    print("It is hot outside")
elif temperature > 110:
    print("Oh man, you could fry eggs on the pavement!")
elif temperature < 30:
    print("It is cold outside")
else:
    print("It is ok outside")
print("Done")

# Comparisons using string/text
# Note, this example does not work when running under Eclipse
# because the input will contain an extra carriage return at the
# end. It works fine under IDLE.
userName = input("What is your name? ")
if userName == "Paul":
    print("You have a nice name.")
else:
    print("Your name is ok.")

3.8 Tekrar

Çoktan seçmeli bir test için buraya tıklayın.

  1. Alttaki kodu düzeltin:
    temperature = float (input("Sıcaklık")
    if temperature > 90:
        print("Dışarısı Soğuk.")
    
  2. Bu kodta 2 yanlışlık var. Biri onun çalışmasını engelliyor, diğeri ise gizlenmiş haldedir.
    x == 4
    if x >= 0:
        print("x pozitiftir.")
    else:
        print("x pozitif değildir.")
    
  3. Alttaki kodta dört şey yanlış. Kodu bir IDLE dosyasına kopyalayın ve hataları bulun.
    answer = input("Dr. Bunsen Honeydew'un asistanının adı nedir?")
    if a = "Beaker":
        print("Doğru!")
        else
        print("Yanlış! Doğrusu Beaker.")
    
  4. Alttaki kodu düzeltin:
    userInput = input("A cherry is a:")
    print("A. Dessert topping")
    print("B. Desert topping")
    if userInput=="A":
        print("Correct!")
    
  5. Alttaki kodta yanlış olan üç şey nedir?
    x=input("Enter a number:")
    if x=3
        print("You entered 3")
    
  6. Bu program düzgün çalışmıyor. Sorun ne?
    x=input("How are you today?")
    if x=="Happy" or "Glad":
        print("That is good to hear!")
    
  7. Alttaki koda bakın. Onun ne yazdıracağıyla ilgili en iyi tahmininizi yazın. Ardından, kodu çalıştırın ve doğru tahmin edip etmediğinizi görün:
    x = 5
    y = x == 6
    z = x == 5
    print("x=",x)
    print("y=",y)
    print("z=",z)
    if y:
        print("Fizz")
    if z:
        print("Buzz")
    
  8. Alttaki kodu düzeltin:
    answer = input("True or False, is 3+4 equal to 7?")
    a=True
    b=False
    if a:
        print("Correct")
    else:
        print("Incorrect")
    
  9. Kullanıcıdan bir sayı alıp bu sayının pozitif, negatif veya sıfır olduğunu yazdıran bir Python programı yazın.
  10. Kullanıcıdan bir sayı alıp girilen sayı -10'dan büyük ve 10'dan küçükse "Başarılı" yazdıdan bir Python programı yazın. (-10 ve 10 aralığa dahildir.)

3.9 Lab 2

Kendi quiz programınızı yapabilmek için Lab 2 “Create-a-Quiz”i tamamlayın ve if ifadesini tam anlamıyla nasıl kullanacağınızı öğrendiğinizden emin olun.


You are not logged in. Log in here and track your progress.