Yardima ihtiyacim var

Merhaba.Soyle bir program yapmak istiyorum ama yapamiyorum.Araba sinifi olusturulacak ve sinifin icinde arabanin markasi arabanin rengi ve diyelimki fiyati olucak.ve kullanicidan input alicaz:hangi katagoriye gore filtrelemek istersiniz:marka,fiyat,renk
Diyelim kullanici rengi secdi inputla kullanicidan renk alicaz mesela kullanici sari renk dedi.sari renkde olan arabalari gostersin yada atiyorum mersedes dedi marka olarak yalnizca mersedesleri gostersin.yada soyle dedi kullanici hem marka hem de renge gore filtrelemek istiyor mesela
renk:sari
Marka:mersedes
Bu durumda sadece sari renkli mersedesleri gostersin kullaniciya.bunu nasil yapa bilirim lutfen biri yardim etsin.

Kodu benim yazmam sizi geliştirmiyecektir. O yüzden “Algoritmasından” bahsedelim.

Şimdi her araba için farklı bir “Class” oluşturursan çok saçma olacaktır o yüzden Araba

classı içerisine .name adında bir değer ekleyip her araba için farklı bir isim verdirebilirsin.

Kullanıcıdan üç farklı girdi alabilirsin ne demek istiyorum :

1- Arabaları renklerine göre listele.

2- Arabaları markalarına göre listele.

3- Arabanın hem markasını hem de rengini listele.

Bu şekilde eğer kullanıcı “1” opsiyonunu seçerse tüm sınıfların sınıf.renk özelliğini bastırabilirsin.

Üstüne ugraşıp kendin yapabilirsen kendini geliştirmiş olursun .:slight_smile:

Tesekkurler cevabiniz icin ama sorun su ki OOPye yeni basladim.algoritmayi kafamda olusturmusdum ama OOPye yeni basladigim icin kod bilgim yeterli degil.Ama yinede daha fazla arastirarak OOPyi tamamen ogrenmeye calisicam.birde bir soru soruyum OOPyi tamamen ogrenmek kac gunumu/ayimi alir?
Bir daha tesekkurler:)

Ben kod verebilirim, fonksiyonel programlama örneklerini incelemek de insanı geliştiriyor bence.

from functools import reduce

class Araba():
    arabalar = []

    def __init__(self, *, renk, marka, fiyat):
        self.renk = renk
        self.marka = marka
        self.fiyat = fiyat
        self.arabalar.append(self)

    @classmethod
    def filter(cls, by, filters):
        return reduce(set.intersection, ({*filter(lambda araba: filter_(getattr(araba, attr)), cls.arabalar)} for filter_, attr in zip(filters, by)))

    def __repr__(self):
        return "Araba(renk={}, marka={}, fiyat={})".format(self.renk, self.marka, self.fiyat)


Araba(renk = "mavi", marka = "A", fiyat = 100)
Araba(renk = "mavi", marka = "B", fiyat = 200)
Araba(renk = "sarı", marka = "C", fiyat = 300)
Araba(renk = "sarı", marka = "C", fiyat = 400)
Araba(renk = "beyaz", marka = "B", fiyat = 500)

print("Mavi arabalar:", *Araba.filter(("renk",), (lambda i: i=="mavi",)), sep = "\n")
print()
print("Sarı arabalar:", *Araba.filter(("renk",), (lambda i: i=="sarı",)), sep = "\n")
print()
print("100 lira olan arabalar:", *Araba.filter(("fiyat",), (lambda i: i==100,)), sep = "\n")
print()
print("Mavi ve A marka olan arabalar:", *Araba.filter(("renk", "marka"), (lambda i: i=="mavi", lambda i: i=="A")), sep = "\n")
print()
print("Fiyatı 100 ile 500 arasında olan arabalar:", *Araba.filter(("fiyat",), (lambda i: 100<i<500,)), sep = "\n")

Tabii bu kod kullanıcı girişini kapsamıyor.

Tesekkur ederim.Tabi bazi seyleri bilmedigim icin tam olarak anlamadim.Ama onlarida arastirarak ogrenmeye calisicam.

1 Beğeni

Hatta özellikler için sadece eşitlik kontrol edilecekse bu da iş görür, hem daha okunaklı:

class Araba():
    arabalar = []

    def __init__(self, *, renk, marka, fiyat):
        self.renk = renk
        self.marka = marka
        self.fiyat = fiyat
        self.arabalar.append(self)

    @classmethod
    def filter(cls, **kwargs):
        return filter(lambda i: all(getattr(i, name) == value for name, value in kwargs.items()), cls.arabalar)

    def __repr__(self):
        return "Araba(renk={}, marka={}, fiyat={})".format(self.renk, self.marka, self.fiyat)


Araba(renk = "mavi", marka = "A", fiyat = 100)
Araba(renk = "mavi", marka = "B", fiyat = 200)
Araba(renk = "sarı", marka = "C", fiyat = 300)
Araba(renk = "sarı", marka = "C", fiyat = 400)
Araba(renk = "beyaz", marka = "B", fiyat = 500)

print("Mavi arabalar:", *Araba.filter(renk = "mavi"), sep = "\n")
print()
print("Sarı arabalar:", *Araba.filter(renk = "sarı"), sep = "\n")
print()
print("100 lira olan arabalar:", *Araba.filter(fiyat = 100), sep = "\n")
print()
print("Mavi ve A marka olan arabalar:", *Araba.filter(renk = "mavi", marka = "A"), sep = "\n")