Bu alıştırma, öğrenciye if-elif-else, karşılaştırma operatörleri, fonksiyonlar ve karar verme mekanizmalarını öğretmek için tasarlanmıştır. Blackjack oyunu üzerinden ilerlediği için oldukça eğlencelidir.
Bu alıştırmada bir Blackjack oyuncusuna tavsiye veren küçük bir program geliştireceğiz.
Blackjack’te amaç 21 sayısına mümkün olduğunca yaklaşmak ancak 21’i geçmemektir.
Kart değerleri:
| Kart | Değer |
|---|---|
| A | 1 |
| J | 10 |
| Q | 10 |
| K | 10 |
| 2-10 | Sayısal değeri |
Bu alıştırmada fonksiyonları tamamlayarak oyuncunun hangi hamleyi yapması gerektiğini belirleyeceğiz.
Çözümlere bakmadan önce boşlukları kendiniz doldurmaya çalışın.
Soru 1: Kartın Değerini Bulma
Aşağıdaki kartların değerleri verilmiştir:
- A → 1
- J, Q, K → 10
- Diğer kartlar → kendi sayısal değeri
Fonksiyondaki boşlukları doldurun:
def value_of_card(card): if card == "A": return _____ elif card in ("J", "Q", "K"): return _____ else: return _____
Örnek:
value_of_card("K")
Beklenen sonuç:
10
Soru 2: Hangi Kart Daha Büyük?
İki kart veriliyor.
Daha yüksek değere sahip kartı döndürmek istiyoruz.
Fonksiyonu tamamlayın:
def higher_card(card_one, card_two): value_one = value_of_card(card_one) value_two = value_of_card(card_two) if value_one > value_two: return ________ else: return ________
Örnek:
higher_card("K", "8")
Beklenen sonuç:
"K"
Soru 3: As (Ace) Kaç Puan Olmalı?
Blackjack’te bazı durumlarda As kartı 1 yerine 11 olarak değerlendirilebilir.
Yeni gelecek bir As kartının değerini belirlemek istiyoruz.
Kurallar:
- Eğer eldeki toplam + 11 değeri 21’i geçiyorsa As = 1
- Geçmiyorsa As = 11
Fonksiyonu tamamlayın:
def value_of_ace(card_one, card_two): total = ( value_of_card(card_one) + value_of_card(card_two) ) if total + 11 > 21: return _____ else: return _____
Örnek:
value_of_ace("9", "K")
Beklenen sonuç:
1
Soru 4: Oyuncunun İlk Hamlesi Ne Olmalı?
Oyuncunun elindeki iki kart ve krupiyenin açık kartı veriliyor.
Kurallar:
Eğer toplam 21 ise
- Krupiyenin kartı A veya 10 ise:
- “S” (Stand)
- Değilse:
- “W” (Win)
Eğer toplam 17-20 arasındaysa
- “S”
Eğer toplam 12-16 arasındaysa
- Krupiye 7 veya üzerindeyse:
- “H” (Hit)
- Değilse:
- “S”
Eğer toplam 11 veya altındaysa
- “H”
Fonksiyondaki boşlukları doldurun:
def first_turn( card_one, card_two, dealer_card): player_total = ( value_of_card(card_one) + value_of_card(card_two) ) dealer_value = value_of_card(dealer_card) if player_total == 21: if dealer_value >= _____: return "S" return "W" elif player_total >= _____: return "S" elif player_total >= _____: if dealer_value >= _____: return "H" return "S" else: return "H"
Çözümler
Çözüm 1
def value_of_card(card): if card == "A": return 1 elif card in ("J", "Q", "K"): return 10 else: return int(card)
Çözüm 2
def higher_card(card_one, card_two): value_one = value_of_card(card_one) value_two = value_of_card(card_two) if value_one > value_two: return card_one return card_two
Çözüm 3
def value_of_ace(card_one, card_two): total = ( value_of_card(card_one) + value_of_card(card_two) ) if total + 11 > 21: return 1 return 11
Çözüm 4
def first_turn( card_one, card_two, dealer_card): player_total = ( value_of_card(card_one) + value_of_card(card_two) ) dealer_value = value_of_card(dealer_card) if player_total == 21: if dealer_value >= 10: return "S" return "W" elif player_total >= 17: return "S" elif player_total >= 12: if dealer_value >= 7: return "H" return "S" else: return "H"
Bu Alıştırmada Öğrenilenler
Bu çalışma sayesinde aşağıdaki Python konularını uygulamış oldunuz:
- Fonksiyonlar
- Karşılaştırma operatörleri (
>,<,>=) - Mantıksal karar verme
if,elif,else- String işlemleri
- Fonksiyon çağırma
- İç içe koşullar
- Oyun mantığı geliştirme
Kaynak: https://exercism.org/tracks/python/exercises/black-jack
İndirimli Udemy Eğitimim: https://www.udemy.com/course/proje-yoneticileri-icin-python/?couponCode=HAZIRAN2026
