Python Ödevi

Kaynayankazan

Hectopat
Katılım
28 Ocak 2020
Mesajlar
190
Hocamızın verdiği Python ödevini yapmaya çalışıyorum. İlk soruyu yaptım ancak ikinci soruda takıldım. Yardımcı olabilirseniz sevinirim. Bu arada ilk soru ile ikinci soru bağlantılı.

Not: İlk sorudaki koordinatları ve diğer şeyler temsilidir. Yani hocamız bize örnek olsun diye koymuş. Siz kendiniz kafanızdan koordinat, renk ve puan ile bir sözlük oluşturabilirsiniz. Yardımcı olması için kendi oluşturduğum koordinatları ve soruyu alta paylaşacağım.
 

Dosya Ekleri

  • Screenshot_2022-01-18_160507.jpg
    83,6 KB · Görüntüleme: 126
  • 20220118_161847.jpg
    322,3 KB · Görüntüleme: 126
Son düzenleyen: Moderatör:
Ben şu tip bir şey anladım açıkçası. İlk defa python'da class yazdım. Yaptıklarımın daha mantıklı, pratik halleri vardır.

Değerlerine erişme açısından daha pratik olacağını düşünüyorum.

Kod:
import random

colors = ["siyah", "mavi", "yeşil", "kırmızı"]
points = {"siyah": 500, "mavi": 1000, "yeşil": 5000, "kırmızı": 0}

class Duck:
    def __init__(self, color, x, y):
        self.color = color
        self.point = points[color]
        self.x = x
        self.y = y
        self.isShot = False
   
    def __str__(self) -> str:
        return "renk: " + self.color + ", puan: " + str(self.point) + ", vuruldu: " + str(self.isShot) + ", x: " + str(self.x) + ", y: " + str(self.y)

d = {}

for i in range(10):
    d[i + 1] = Duck(random.choice(colors), random.randint(1, 10), random.randint(1, 10))

for key, value in d.items():
    print(key, ":", value)
 
`ordekler` kismini bir Dictionary yapmak yerine Array yapabilirsiniz.
Boylece direkt olarak liste icinde gezerek o listedeki Dictionary'leri tarayabilirsiniz. Orada da tab koymaniz gerekiyor dongu icin. Kodu yazi olarak atsaydiniz hazir bir kod yazardim ama maalesef atmamissiniz. Bir dahakine artik
 

Ne yazık ki Array olarak yazamam. Hocamız orayı derste işlemedi. Zaten soruda Dictionary olarak istediğini belirtmiş.

Ordekler = {
1: {'renk': 'kırmızı', 'puan': 500, 'vuruldu': False, 'X':3,'y':5},
2: {'renk':'siyah', 'puan':1000, 'vuruldu':False, 'X':8,'y':7},
3: {'renk':'sarı', 'puan':1500, 'vuruldu':False, 'X':1,'y':9},
4: {'renk':'yeşil', 'puan':2000, 'vuruldu':False, 'X':4,'y':1},
5: {'renk':'gri', 'puan':2500, 'vuruldu':False, 'X':2,'y':6},
6: {'renk':'turkuaz', 'puan':3000, 'vuruldu':False, 'X':6,'y':4},
7: {'renk':'mor', 'puan':3500, 'vuruldu':False, 'X':7,'y':6},
8: {'renk':'pembe', 'puan':4000, 'vuruldu':False, 'X':8,'y':2},
9: {'renk':'kahverengi', 'puan':4500, 'vuruldu':False, 'X':7,'y':4},
10: {'renk':'turuncu', 'puan':5000, 'vuruldu':False, 'X':5,'y':7},
}
For ordek in ordekler:
Print('ordekler')

İlk soruyu bu şekilde yaptım. Doğru mu bilmiyorum. Ben asıl ikinci soruda takıldım. X ve Y koordinatlarını döngü içinde nasıl 10 kere girdi olarak isteyeceğimi bir türlü aklımda canlandıramıyorum.
 
Sizin düşündüğünüz şekilde böyle oluyor anladığım kadarıyla. Dictionaryception'ınınız ile kolay gelsin.

Kod:
d = {
     1: {"renk": "mavi", "puan": 1000, "vuruldu": False, "x": 4, "y": 9},
     2: {"renk": "yeşil", "puan": 5000, "vuruldu": False, "x": 5, "y": 10},
     3: {"renk": "yeşil", "puan": 5000, "vuruldu": False, "x": 1, "y": 1},
     4: {"renk": "mavi", "puan": 1000, "vuruldu": False, "x": 2, "y": 5},
     5: {"renk": "yeşil", "puan": 5000, "vuruldu": False, "x": 1, "y": 7},
     6: {"renk": "siyah", "puan": 500, "vuruldu": False, "x": 4, "y": 3},
     7: {"renk": "kırmızı", "puan": 0, "vuruldu": False, "x": 1, "y": 9},
     8: {"renk": "siyah", "puan": 500, "vuruldu": False, "x": 5, "y": 4},
     9: {"renk": "kırmızı", "puan": 0, "vuruldu": False, "x": 7, "y": 9},
     10: {"renk": "yeşil", "puan": 5000, "vuruldu": False, "x": 5, "y": 10}}

ducks = []
hitDucks = []

for i in range(10):
    x = int(input(str(i + 1) + ". x gir: "))
    y = int(input(str(i + 1) + ". y gir: "))
    ducks.append([x, y])

for i in ducks:
    for key, value in d.items():
        if i[0] == value["x"] and i[1] == value["y"] and value["vuruldu"] == False:
            value["vuruldu"] = True
            hitDucks.append(i)

print("Girilen koordinatlar: ", *ducks)
print(*hitDucks)
 
Ne yazık ki Array olarak yazamam. Hocamız orayı derste işlemedi. Zaten soruda Dictionary olarak istediğini belirtmiş.
Anladim ama sorunun sorulma seklinden dolayi cok kolay bir yontemi kaciriyorsunuz, her neyse.
Oyleyse Dictionary uzunlugunu alaraktan gezebiliriz icinde.
Python:
ordekler = {
1: {'renk': 'kırmızı', 'puan': 500, 'vuruldu': False, 'X':3,'y':5},
2: {'renk':'siyah', 'puan':1000, 'vuruldu':False, 'X':8,'y':7},
3: {'renk':'sarı', 'puan':1500, 'vuruldu':False, 'X':1,'y':9},
4: {'renk':'yeşil', 'puan':2000, 'vuruldu':False, 'X':4,'y':1},
5: {'renk':'gri', 'puan':2500, 'vuruldu':False, 'X':2,'y':6},
6: {'renk':'turkuaz', 'puan':3000, 'vuruldu':False, 'X':6,'y':4},
7: {'renk':'mor', 'puan':3500, 'vuruldu':False, 'X':7,'y':6},
8: {'renk':'pembe', 'puan':4000, 'vuruldu':False, 'X':8,'y':2},
9: {'renk':'kahverengi', 'puan':4500, 'vuruldu':False, 'X':7,'y':4},
10: {'renk':'turuncu', 'puan':5000, 'vuruldu':False, 'X':5,'y':7},
}

for ordek in range(len(ordekler) - 1):
    ordekler[ordek + 1]['vuruldu'] = True
    print(ordekler[ordek + 1])

Mesela boyle hepsini vuruldu olarak gosterebilirsiniz, koordinatlari da input ile alirsiniz. +1 ve -1 sebebi Dictionary'de 1 ile baslamaniz, dolayisiyla 0'i bir arttiriyoruz 1'den baslamasi icin for dongusunde ve len(ordekler) kismini 1 azaltiyoruz ki en son 1 arttirinca 11 olmadigi icin hata almayalim.
 
Bu siteyi kullanmak için çerezler gereklidir. Siteyi kullanmaya devam etmek için çerezleri kabul etmelisiniz. Daha Fazlasını Öğren.…