Bu makalemizde, çocukluğumuzda hemen hemen herkesin oynadığı veya bir şekilde bildiği Python’da taş-kağıt-makas oyununu anlatacağım.
Uygulama senaryosu
Kullanıcıya bilgi vermesi açısından kaç hakkının olduğunu ve seçeneklerinin neler olduğunu gösterelim sonra bu sahip olduğu hak sayısınca kullanıcıdan taş, kağıt veya makas seçeneklerden birini seçmesi ve karşı taraftan da bilgisayardan bir rastgele bir seçim yapmasını sağlayalım ve sonra kullanıcı seçimini ve bilgisayar seçimini karşılaştırıp kimin kimi yendiğini belirleyelim. kazananmaları halinde +3 puan, beraberlikleri halinde de taraflara 1’er puanı verelim.
Şimdi buraya kadar okuduysan devamına bakmadan sen yapmaya çalış sonradan da yapılışına bakarsın, eminim ki bunu yaparsın.😉
Öyleyse haydi kodlamaya başlayalım:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 |
import random print(""" ========Taş-Kağıt-Makas Oyunumuza Hoş Geldiniz======== Unutma 3 hakkın var ve kazanan taraf +3 puan alır, beraberlik durumunda ise 1 puan alır lütfen seçimizi yapınız taş- makas- kağıt """) hak=4 kullaniciPuan=0 PcPuan=0; def tas_kagit_makas(): global kullaniciPuan,PcPuan; secenekler = ["taş", "kağıt", "makas"] bilgisayar_secimi = random.choice(secenekler) kullanici_secimi = input("Seçiminizi yapın: ").lower() print("Bilgisayarın seçimi:", bilgisayar_secimi) if kullanici_secimi not in secenekler: print("Geçersiz bir seçim yaptınız. Lütfen taş, kağıt veya makas seçin.") elif kullanici_secimi == bilgisayar_secimi: print("Berabere! Her iki taraf da", kullanici_secimi, "seçti.") kullaniciPuan+=1 PcPuan+=1 elif (kullanici_secimi == "taş" and bilgisayar_secimi == "makas") or \ (kullanici_secimi == "kağıt" and bilgisayar_secimi == "taş") or \ (kullanici_secimi == "makas" and bilgisayar_secimi == "kağıt"): kullaniciPuan+=3 print("Tebrikler! Kazandınız. Siz", kullanici_secimi, "seçtiniz, bilgisayar", bilgisayar_secimi, "seçti.") else: print("Üzgünüm, kaybettiniz. Siz", kullanici_secimi, "seçtiniz, bilgisayar", bilgisayar_secimi, "seçti.") PcPuan+=3 while True: tas_kagit_makas() hak-=1 if hak==1: break print(f"""\n===========oyun bitti Toplam skor================ sen {kullaniciPuan} puan, bilgisayar ise {PcPuan} puan aldı""") |
Yukarıda uygulama senaryosunda anlattığım gibi, burada kullanıcı rastgele bir seçim yapabilmesi için ilgili random kütüphanesini import random ile dahil ettim. kullanıcın kaç kez tahmin edeceğini hak değişkeninde belirledim. hak=4 belirleyip her tahmininde bunu bir adet azalttım ve sıfır olunca da break ile döngüden çıkıp programın bitmesini sağladım.
(global kullaniciPuan,PcPuan;) şimdi şu ifadeyi anlatalım, fonksiyon içinde global tanımlamamın nedeni:
global kullaniciPuan, PcPuan
ifadesi, kullaniciPuan
ve PcPuan
değişkenlerini fonksiyon içerisindeki yerel değişkenler yerine global değişkenler olarak tanımlamak için kullanılır.
Python’da, bir fonksiyon içerisinde bir değişken tanımlarsanız, varsayılan olarak bu değişken yerel bir değişken olarak kabul edilir. Bu durumda, fonksiyon içindeki değişiklikler yalnızca yerel değişkeni etkiler ve global değişkeni değiştirmez. Eğer kullaniciPuan
ve PcPuan
değişkenlerini global olarak kullanmak ve fonksiyon içindeki değişikliklerin bu global değişkenleri etkilemesini isterseniz, global
anahtar kelimesini kullanarak bu değişkenlerin global değişkenler olduğunu belirtmeniz gerekir.
Bu örnekte, tas_kagit_makas()
fonksiyonu içinde kullaniciPuan
ve PcPuan
değişkenlerini global olarak kullanmak için global kullaniciPuan, PcPuan
ifadesi kullanılmıştır. Bu sayede, fonksiyon içinde yapılan değişiklikler, bu global değişkenleri etkileyecek ve değerlerini güncelleyecektir.
Kısacası fonksiyon içinde bulunan değişkenler yerel fonksiyon, dışındakiler ise globaldir, biz fonksiyon içindekilerinin başına global yazınca aslında siz de fonksiyon dışındakilerle aynısınız, yani siz de global değerlisiniz demiş oluruz.
1 2 3 |
elif (kullanici_secimi == "taş" and bilgisayar_secimi == "makas") or \ (kullanici_secimi == "kağıt" and bilgisayar_secimi == "taş") or \ (kullanici_secimi == "makas" and bilgisayar_secimi == "kağıt"): |
bu kod parçasını anlatacak olursam:
Bu ifade, üç ayrı koşulun birleşimini kontrol eder:
- Kullanıcı “taş” seçtiğinde ve bilgisayar “makas” seçtiğinde.
- Kullanıcı “kağıt” seçtiğinde ve bilgisayar “taş” seçtiğinde.
- Kullanıcı “makas” seçtiğinde ve bilgisayar “kağıt” seçtiğinde.
Bu koşullardan herhangi biri doğru olduğunda, kullanıcı kazanır çünkü taş makası kırar, kağıt taşı sarar ve makas kağıdı keser.
Eğer bu koşullardan hiçbiri doğru değilse, kullanıcının kaybettiği ve bilgisayarın kazandığı sonucu elde edilir.
Burada or \ şeklinde yazılan \ işareti, çok satırlı bir ifadeyi birden fazla satıra yaymak için kullanılan bir kaçış karakteridir. Python’da \ işareti, ifadeleri birden fazla satıra bölebilmenizi sağlar, böylece kodunuz daha okunabilir hale gelir.
\ işaretini kullanmasaydık aşağıdaki gibi elif komutunu tek satırda yazmak zorundaydık bu da kodun devamının diğer kısma taşıdığı, okunabilirlik açısından güzel olmadığını bize açıkça gösterir.
1 |
elif (kullanici_secimi == "taş" and bilgisayar_secimi == "makas") or (kullanici_secimi == "kağıt" and bilgisayar_secimi == "taş") or (kullanici_secimi == "makas" and bilgisayar_secimi == "kağıt"): |
Özetle bu kod, kullanıcının “Taş”, “Kağıt” veya “Makas” seçeneklerinden birini seçerek bilgisayar ile karşılaştırdığı basit bir Taş-Kağıt-Makas oyunudur. Kullanıcı seçimini yapar ve bilgisayar rastgele bir seçim yapar. Ardından, kullanıcının seçimi ve bilgisayarın seçimi karşılaştırılır ve sonuç ekrana yazdırılır.