Class içerisinde Dictionary

Öncelikle herkese hayırlı akşamlar ;

Yazmakta olduğum bir projede ; tanıttığım class içerisinde bir data structure da tanıtmam gerek bu data structure içerisinde birkaç kullanıcını Kullanıcı Adı , Şifresi , Ve Parasını tanıtmam gerekiyor. Sonrasında oluşturduğum giriş kısmında kullanıcıda raw_input ile Kullanıcı adı ve Şifresi istemem gerekiyor Eğer kullanıcı doğru giriş gerçekleştirirse doğru kullanıcının nesnesini oluşturmak istiyorum. Bunu nasıl yapabilirim yardımcı olursanız çok sevinirim

Dictionary icinde dictionary tutman lazim. Kullanici adini kullanici dictionary’siyle iliskilendiren 1. dictionary, ad sifre ve para key’lerini kullanici adi, sifresi ve parasiyla iliskilendiren 2. dictionary. 1’den 1 tane olacak, 2’den kullanici sayisi kadar.

Ikinci dictionary yerine bir class da kullanabilirsin, key’ler (sifre, para, ad) sabit olacagi icin. (adi tutmak zorunda da degilsin, ilk dictionary’den gelirken kullanilmasi yetebilir.)

Daha açıklayıcı olmak gerekirse şöyle yazayım ; bu yazdığım kodun devamında eğer kullanıcı doğru isim ve sifreyi girerse oluşturulan objenin kullanıcı adı ve şifresi oluşturduğum dictionarydekiyle aynı ve parasının 0 olarak başlaması gerekmekte , bunu nasıl yapabilirim ?

class kullanici():
def init(self,kullaniiadi,kullanicisifresi,kullaniciborcu):
self.kullaniciadi=kullaniiadi
self.kullanicisifresi=kullanicisifresi
self.kullaniciborcu=kullaniciborcu

    borclular={"Tom":{"Sifresi":"tom123","Borcu":kullaniciborcu}}

Bu yazdigin kodun devaminda kullanici dogru isim ve sifreyi girerse herhangi bir sey yapmak istiyorsan, oncelikle bu yazdigin kodun devaminda kullanicinin isim ve sifresini alman gerek. Kullanici isminin olup olmadigina bakip, varsa sifresini alip, alirsan girilen sifreyle karsilastirman lazim. Her sey yerinde ise yeni bir kullanici objesi yaratabilirsin. kullanici sinifina para attribute’u ekleyip __init__'te 0’a esitleyebilirsin.

Kullanıcının isim ve şifre sorduğu kısımları da yazdım fakat sizin için daha da karışık olmaması adına buraya eklememiştim ; daha detaylı halini ekliyorum , düzeltmemde yardımcı olursanız sevinirim

class kullanici():
def init(self,kullaniiadi,kullanicisifresi,kullaniciborcu):
self.kullaniciadi=kullaniiadi
self.kullanicisifresi=kullanicisifresi
self.kullaniciborcu=kullaniciborcu

    borclular={"Tom":{"Sifresi":"tom123","Borcu":kullaniciborcu}}

class paraEkleme(kullanici):
def init(self,kullaniiadi,kullanicisifresi,kullaniciborcu):
self.kullaniciadi=kullaniiadi
self.kullanicisifresi=kullanicisifresi
self.kullaniciborcu=kullaniciborcu

def borcekleme(self):
    a=input("Ne kadar borc eklenecek ? ")
    self.kullaniciborcu=self.kullaniciborcu+a 

while True:
kullanici_adi=raw_input(“Kullanici adinizi giriniz”)
kullanici_sifresi=raw_input(“Kullanici Sifresi Giriniz”)
if kullanici_adi in list and kullanici_sifresi==borclular[kullanici_adi][“Sifresi”]:
yenikullanıcı=kullanici_adi(kullanici_adi,kullanici_sifresi,kullanıcıborcu)

  1. Gönderilerdeki kod görünümü hakkında
  2. Kod calismiyor

self.para = 0 gibi

self.para yerin self.kullaniciborcu ibaresini kullanmayı tercih ettim, ayrıca kod’un çalışmadığının farkındayım nasıl çalıştırabilirim diye sormuştum. Teşekkürler…

class kullanici():
    def __init__(self,kullaniiadi,kullanicisifresi,kullaniciborcu):
        self.kullaniciadi=kullaniiadi
        self.kullanicisifresi=kullanicisifresi
        self.kullaniciborcu=kullaniciborcu
        kullaniciborcu=0

        borclular={"Tom":{"Sifresi":"tom123","Borcu":kullaniciborcu}}

class paraEkleme(kullanici):
    def __init__(self,kullaniiadi,kullanicisifresi,kullaniciborcu):
        self.kullaniciadi=kullaniiadi
        self.kullanicisifresi=kullanicisifresi
        self.kullaniciborcu=kullaniciborcu

    def borcekleme(self):
        a=input("Ne kadar borc eklenecek ? ")
        self.kullaniciborcu=self.kullaniciborcu+a

while True:
    kullanici_adi=raw_input("Kullanici adinizi giriniz")
    kullanici_sifresi=raw_input("Kullanici Sifresi Giriniz")
    if kullanici_adi in list and kullanici_sifresi==borclular[kullanici_adi]["Sifresi"]:
        yenikullanıcı=kullanici_adi(kullanici_adi,kullanici_sifresi,kullanıcıborcu)

Aşağıdaki kodları bir inceleyin isterseniz:

#!/usr/bin/env python3
# -*- coding: utf-8 -*-


class Kullanici:
    borclular = dict()
    def __init__(self, ad, sifre):
        self.ad = ad
        self.sifre = sifre
        self.borc = 0
        
    def borc_ekle(self):
        self.borc += float(input("Ne kadar borc eklenecek? "))
        self.borclular[self.ad] = {
            "Sifresi": self.sifre,
            "Borcu": self.borc
        }


while True:
    kullanici_adi = input("Kullanici adinizi giriniz: ")
    kullanici_sifresi = input("Kullanici Sifresi Giriniz: ")
    kullanici = Kullanici(kullanici_adi, kullanici_sifresi)
    kullanici.borc_ekle()
    print(kullanici.borclular)

Buradan farklı olarak benim 3,4 tane ilk kullanıcı tanımlamam gerekiyor programa. Kullanıcıya sorulan kullanici_adi ve kullanici_sifresi ’ ni Bu listedeki kullanıcı ismi ve şifresiyle denetleyip yeni oluşturduğu Kullanici’nin Bu isim ve Şifreye sahip ve borcu sıfır olan biri olmasını istiyorum , bir türlü matematiğini oluşturamadım bunun :frowning:
Örneğin;

borclular={"Tom":{"Sifresi":"tom1234","Borcu":self.borc},"Mehmet":{"Sifresi":"mehmet123","Borcu":self.corc}}

Yanlış anlamıyorsam şöyle bir şey yapmaya çalışıyorsunuz:

#!/usr/bin/env python3
# -*- coding: utf-8 -*-


class Kullanici:
    borclular = {
        "Tom": {"Sifresi": "tom1234", "Borcu": 0},
        "Mehmet": {"Sifresi": "mehmet123", "Borcu": 0}
    }
    def __init__(self, ad, sifre):
        self.ad = ad
        self.sifre = sifre
        self.borc = 0
        
    def borc_ekle(self):
        if self.ad in self.borclular.keys() and \
                self.sifre == self.borclular[self.ad]["Sifresi"]:                
            self.borc += float(input("Ne kadar borc eklenecek ? "))
            self.borclular[self.ad] = {
                "Sifresi": self.sifre,
                "Borcu": self.borc
            }
        else:
            print("Bu kullanıcı kayıtlı değil.")
            # Bu kullanıcıyı kaydetmek istiyor musunuz?

while True:
    kullanici_adi = input("Kullanici adinizi giriniz: ")
    kullanici_sifresi = input("Kullanici Sifresi Giriniz: ")
    kullanici = Kullanici(kullanici_adi, kullanici_sifresi)
    kullanici.borc_ekle()
    print(kullanici.borclular)

Kodu şu şekilde düzenledim ; fakat burada da şöyle bir sorunla karşılaştım , kullanıcıdan çıkıp tekrar giriş yaptığımda self.borc kısmı tekrardan sıfırlanıyor, bu sorunu nasıl aşabilirim ?

class Kullanici:
    borclular = {
        "Tom": {"Sifresi": "tom1234", "Borcu": 0},
        "Mehmet": {"Sifresi": "mehmet123", "Borcu": 0}
    }

    def __init__(self, ad, sifre):
        self.ad = ad
        self.sifre = sifre
        self.borc = 0

    def kullanici_sorgu(self):
        if self.ad in self.borclular.keys() and \
                self.sifre == self.borclular[self.ad]["Sifresi"]:
                print "Hosgeldin " + self.ad
        else:
            print("Bu kullanici kayitli degil.")
            # Bu kullanicigi kayit etmek istiyor musunuz ?


class borcekleme(Kullanici):
    def __init__(self,ad,sifre):
        self.ad = ad
        self.sifre = sifre
        self.borc = 0

    def borcekleme(self):
        self.borc += float(input("Ne kadar borc eklenecek ? "))
        self.borclular[self.ad]["Borcu"]=self.borc

    def borcsilme(self):
        self.borc-=float(input("Ne kadar borc silinecek"))
        self.borclular[self.ad]["Borcu"]=self.borc

while True:
    kullanici_adi = raw_input("Kullanici adinizi giriniz: ")
    kullanici_sifresi = raw_input("Kullanici Sifresi Giriniz: ")
    kullanici = borcekleme(kullanici_adi, kullanici_sifresi)
    kullanici.kullanici_sorgu()
    kullanici.borcekleme()
    kullanici.borcsilme()
    print(kullanici.borclular)

borcekleme diye bir sınıf oluşturmuşsunuz, bence gereksiz bir sınıf bu ama yine de siz bilirsiniz.

Kodları aşağıdaki gibi değiştirdim, artık borçlar sıfırlanmıyor, bir deneme yapın isterseniz.

#!/usr/bin/env python3
# -*- coding: utf-8 -*-


class Kullanici:
    borclular = {
        "Tom": {"Sifresi": "tom1234", "Borcu": 0},
        "Mehmet": {"Sifresi": "mehmet123", "Borcu": 0}
    }

    def __init__(self, ad, sifre):
        if ad in self.borclular.keys() and \
                sifre == self.borclular[ad]["Sifresi"]:
            print("Hosgeldin", ad)
            self.ad = ad
            self.sifre = sifre
            self.borc = self.borclular[ad]["Borcu"]
        else:
            print("Bu kullanici kayitli degil.")
            # Bu kullaniciyi kayit etmek istiyor musunuz ?
            
    def borc_ekleme(self):
        if hasattr(self, "borc"):
            self.borc += float(input("Ne kadar borc eklenecek ? "))
            self.borclular[self.ad]["Borcu"] = self.borc
        
    def borc_silme(self):
        if hasattr(self, "borc"):
            self.borc -= float(input("Ne kadar borc silinecek? "))
            self.borclular[self.ad]["Borcu"] = self.borc



while True:
    kullanici_adi = input("Kullanici adinizi giriniz: ")
    kullanici_sifresi = input("Kullanici Sifresi Giriniz: ")
    kullanici = Kullanici(kullanici_adi, kullanici_sifresi)
    kullanici.borc_ekleme()
    kullanici.borc_silme()
    print(kullanici.borclular)
1 Beğeni

Yardımcı olduğunuz için çok teşekkür ederim , baya işime yaradı …

Fakat bu kod üzerinde yanlış kullanıcı adı girildiğinde sorumu tekrardan nasıl sorabilirim , yani while döngüsü içerisine nasıl alabilirim ?

Kullanıcı adı veya şifresini yanlış girdiğinizde program Bu kullanıcı kayitli degil. stringini ekrana yazdırıyor. Sonra yine kullanıcıdan kullanıcı adı ve şifre girmesini istiyor. Yani zaten sorunuz tekrar soruluyor, siz başka bir sorudan mı bahsediyorsunuz yoksa? Ya da kullanıcının girdiği kullanıcı ismi listede yoksa, şifreyi girmeden bir uyarı yükseltilmesini ve döngünün başa alınmasını mı istiyorsunuz?

Şöyle benim benim projeyi ayrı ayrı classlar içinde yapmam gerektiği için her bir classtan bir öncekini inheritance alıyorum ve kullanici = Kullanici(kullanici_adi, kullanici_sifresi) yazmak yerine kullanici = SonYazdigimClass(kullanici_adi, kullanici_sifresi) son yazdığım class ile birlikte oluşturuyorum Kullanıcıyı . Acaba burada benim tekniksel bir hatam mı var. Son yazdığım class ta ise sadece obj leri tanıttığım alttaki kodu tanıtmadığım için proje hata veriyor. Bunun doğrusu nasıl olması gerekiyor :frowning:

if ad in self.borclular.keys() and \ sifre == self.borclular[ad]["Sifresi"]: print("Hosgeldin", ad)

Aşağıdaki kodlara bir bakın isterseniz

#!/usr/bin/env python3
# -*- coding: utf-8 -*-


class Kullanici:
    borclular = {
        "Tom": {"Sifresi": "tom1234", "Borcu": 0},
        "Mehmet": {"Sifresi": "mehmet123", "Borcu": 0}
    }

    def __init__(self, ad, sifre):
        if ad not in self.borclular.keys():
            print("Bu kullanici kayitli degil.")
        elif ad in self.borclular.keys() and \
                sifre == self.borclular[ad]["Sifresi"]:
            print("Hosgeldin", ad)
            self.ad = ad
            self.sifre = sifre
            self.borc = self.borclular[self.ad]["Borcu"]
            
            
class Borc(Kullanici):
    def borc_ekleme(self):
        if hasattr(self, "borc"):
            self.borc += float(input("Ne kadar borc eklenecek ? "))
            self.borclular[self.ad]["Borcu"] = self.borc
        
    def borc_silme(self):
        if hasattr(self, "borc"):
            self.borc -= float(input("Ne kadar borc silinecek? "))
            self.borclular[self.ad]["Borcu"] = self.borc



while True:
    kullanici_adi = input("Kullanici adinizi giriniz: ")
    kullanici_sifresi = input("Kullanici Sifresi Giriniz: ")
    kullanici = Borc(kullanici_adi, kullanici_sifresi)
    kullanici.borc_ekleme()
    kullanici.borc_silme()
    print(kullanici.borclular)