"TypeError: string indices must be integers" hatası

Üşenmeyip yazdığınız için teşekkürler o zaman if i["ad"] == hesap_adi eşitse en dış köşeli parantezde ki listenin içine atacak değil mi? hesap_adi inputdan alınana değer olsa gerek.
Önemli değil, doğru anlamışsınız.

Bir deneme yaptım ama ne yazık ki aynı hatayı verdi.
Yazdığınız kodu ve hatayı atarsanız bakabilirim.
 
Önemli değil, doğru anlamışsınız.

Yazdığınız kodu ve hatayı atarsanız bakabilirim.

typeerror: String indices must be integers​

Hatta kodun tamamını gönderyim deneme yapın bir de ufak düzeltilmiş halini de göndereyim.

Python:
# aHesap = {
#     "ad": "mehmetB",
#     "hesapNo" : "8946534",
#     "bakiye" : 2000,
#     "ekHesap": 1000
# }

# bHesap = {
#     "ad": "aliA",
#     "hesapNo" : "8946534",
#     "bakiye" : 2000,
#     "ekHesap": 1000
# }
bHesap = ["ad" , "mehmet", "hesap no" , 8946, "bakiye" , 2000]


karar = int(input("para çekmek için 1 yatırmak içinse 2 yazınız: "))

if karar == 1:
    hesap1 = input("hesap ad: ")
    miktar1 = int(input("miktar: "))
# secilen_hesap = [i for i in hesap1 if i["ad"] == aHesap ][0]

    def paraCek(hesap, miktar):
        print(f"merhaba {bHesap[0]} ")
    
    paraCek(hesap1 , miktar1)

# secilen_hesap = [i for i in hesap_listesi if i["ad"] == hesap_adi][0]
 

typeerror: String indices must be integers​

Hatta kodun tamamını gönderyim deneme yapın bir de ufak düzeltilmiş halini de göndereyim.

Python:
# aHesap = {
#     "ad": "mehmetB",
#     "hesapNo" : "8946534",
#     "bakiye" : 2000,
#     "ekHesap": 1000
# }

# bHesap = {
#     "ad": "aliA",
#     "hesapNo" : "8946534",
#     "bakiye" : 2000,
#     "ekHesap": 1000
# }
bHesap = ["ad" , "mehmet", "hesap no" , 8946, "bakiye" , 2000]


karar = int(input("para çekmek için 1 yatırmak içinse 2 yazınız: "))

if karar == 1:
    hesap1 = input("hesap ad: ")
    miktar1 = int(input("miktar: "))
# secilen_hesap = [i for i in hesap1 if i["ad"] == aHesap ][0]

    def paraCek(hesap, miktar):
        print(f"merhaba {bHesap[0]} ")
 
    paraCek(hesap1 , miktar1)

# secilen_hesap = [i for i in hesap_listesi if i["ad"] == hesap_adi][0]
Listenin içini yanlış tanımlamışsınız. Liste bir dictionary listesi olacak. Doğrudan tek satırda da tanımlayabilirsiniz ama ben sizin önceden tanımladığınız dictionaryleri ekleyerek örnek bir kod atacağım.

Kodu biraz düzenledim, şu an "Ctrl + C" ile programı durdurmadığınız sürece seçenek sormaya devam edecek. Anlamadığınız kısımları sormaktan çekinmeyin.

Python:
aHesap = {
    "ad": "mehmetB",
    "hesapNo" : "8946534",
    "bakiye" : 2000,
    "ekHesap": 1000
}

bHesap = {
    "ad": "aliA",
    "hesapNo" : "8946534",
    "bakiye" : 2000,
    "ekHesap": 1000
}

hesap_listesi = []

hesap_listesi.append(aHesap)
hesap_listesi.append(bHesap)

def paraCek(hesap, miktar):
        print(f"merhaba {hesap['ad']}")

while True:
    karar = int(input("para çekmek için 1 yatırmak içinse 2 yazınız: "))

    if karar == 1:
        hesap1 = input("hesap ad: ")
        miktar1 = int(input("miktar: "))

        try: secilen_hesap = [i for i in hesap_listesi if i["ad"] == hesap1][0]
        except:
            print("Hesap bulunamadı!")
            continue
      
        paraCek(secilen_hesap, miktar1)
 
Son düzenleme:
Listenin içini yanlış tanımlamışsınız. Liste bir dictionary listesi olacak. Doğrudan tek satırda da tanımlayabilirsiniz ama ben sizin önceden tanımladığınız dictionaryleri ekleyerek örnek bir kod atacağım.

Kodu biraz düzenledim, şu an "Ctrl + C" ile programı durdurmadığınız sürece seçenek sormaya devam edecek. Anlamadığınız kısımları sormaktan çekinmeyin.

Python:
aHesap = {
    "ad": "mehmetB",
    "hesapNo" : "8946534",
    "bakiye" : 2000,
    "ekHesap": 1000
}

bHesap = {
    "ad": "aliA",
    "hesapNo" : "8946534",
    "bakiye" : 2000,
    "ekHesap": 1000
}

hesap_listesi = []

hesap_listesi.append(aHesap)
hesap_listesi.append(bHesap)

def paraCek(hesap, miktar):
        print(f"merhaba {hesap['ad']}")

while True:
    karar = int(input("para çekmek için 1 yatırmak içinse 2 yazınız: "))

    if karar == 1:
        hesap1 = input("hesap ad: ")
        miktar1 = int(input("miktar: "))

        try: secilen_hesap = [i for i in hesap_listesi if i["ad"] == hesap1][0]
        except:
            print("Hesap bulunamadı!")
            continue
    
        paraCek(secilen_hesap, miktar1)
Burdan sonrasını ne yazık ki bilmiyorum try ve except daha önce görmedim sanırım if bloğuna benziyor tamda bilmiyorum bu kısmı açıklayabilir misiniz ?
try: secilen_hesap = [i for i in hesap_listesi if i["ad"] == hesap1][0]
except:
print("Hesap bulunamadı!")
continue

paraCek(secilen_hesap, miktar1)

note : nesne tabanlı programlamada nasısınız yakında bu konuya geçecem kuvvetle muhtemel sizden yardım isteyecem
 
Burdan sonrasını ne yazık ki bilmiyorum try ve except daha önce görmedim sanırım if bloğuna benziyor tamda bilmiyorum bu kısmı açıklayabilir misiniz ?
try: secilen_hesap = [i for i in hesap_listesi if i["ad"] == hesap1][0]
except:
print("Hesap bulunamadı!")
continue

paraCek(secilen_hesap, miktar1)
Normalde bir hata aldığınızda yazdığınız yazılım direkt çöküp kapanıyor değil mi? Try'ın içine yazılan kod hata verdiği zaman except'in içindeki kod çalıştırılır, yazılımınız çökmez.

Continue ise bir döngünün içinde kullanıldığında kendisinden sonraki kodları çalıştırmadan döngünün başına gelir.
 
Anladım teşekkür ederim normalde bu kodun çok kısa bir bölümü tam halini sanırım şu anki haline adapte edebilirim gibi bir deneme yapayım.

note : nesne tabanlı programlamada nasısınız yakında bu konuya geçecem kuvvetle muhtemel sizden yardım isteyecem
Adapte etmeyi denedim ama baktım olacak gibi değil 2 parametreden tek parametreye düşürünce olaylar değişti. yani hakikaten inputdan alınana değer okusa iş çözülecek inputdna aldığımı dict çevirsem oda boş fonksiyon dışında yapılabilir ama fonksiyon içinde pek mümkün görünmüyor

Şu son denemede yolu uzatmaktan başka bir işe yaramadı :D

Python:
aHesap = {
    "ad": "mehmetB",
    "hesapNo" : "8946534",
    "bakiye" : 2000,
    "ekHesap": 1000
}

bHesap = {
    "ad": "aliA",
    "hesapNo" : "8946534",
    "bakiye" : 2000,
    "ekHesap": 1000
}
hesap_listesi = []

hesap_listesi.append(aHesap)
hesap_listesi.append(bHesap)

karar = int(input("aşırı çömert bankaya hoj geldiniz para çekmek için 1 yatırmak içinse 2 yazınız: "))

if karar == 1:
    hesap = input("hesap ad: ")
    miktar = int(input("miktar: "))

    def paraCek(hesap, miktar):
        print(f"merhaba {hesap['ad']} ")

        if hesap["bakiye"] >= miktar:
            hesap["bakiye"] -= miktar
            print("paranızı alabilirsiniz")
            BakiyeSorgulama(hesap)
        else:
            toplam = hesap["bakiye"] + hesap["ekHesap"]
            if toplam >= miktar:
                ekHesapKulanımı = input("ek hesap kullanılsınmı (e/h) ")
                
                if ekHesapKulanımı == "e":
                    ekHesapKullanılacakMiktar = miktar - hesap["bakiye"]
                    hesap["bakiye"] = 0
                    hesap["ekHesap"] -= ekHesapKullanılacakMiktar
                    print("paranızı alabilirsiniz")
                    BakiyeSorgulama(hesap)
                
                else:
                    print(f" {hesap['hesapNo']} nolu hesabınızda {hesap['bakiye']}  bulunmaktadır.")
            else:
                print("üzgünüz bakiyeniz yetmemmektedir lütven en kısa sürüde yükleme yapınız")
                BakiyeSorgulama(hesap)
            
    def BakiyeSorgulama(hesap):
        print(f" {hesap['hesapNo']} nolu hesabınızda {hesap['bakiye']} tl bulunmaktadır. ek hesap limitiniz ise {hesap['ekHesap']} tl bulunmaktadır  ")

    paraCek(hesap[hesap_listesi][0] , miktar[hesap_listesi][0])
    
    
#  paraCek(aHesap , 1000)
# if karar == 2:
#     hesap1 = input("hesap ad: ")
#     miktar1 = int(input("miktar: "))
    
#     def ParaYatır(hesap1, miktar1):
        
#         hesap1["bakiye"] =+ miktar1
#         print("paranız yatırılılmıştır")
#         BakiyeSorgulama(hesap1)
#     ParaYatır(hesap1 , miktar1)
Tekrardan merhaba şansına olayı hallettim nasıl oldu hiçbir fikrim yok bu bankametik uygulamasını class olarak tanımaldım(bugün ufaktan nesne tabanlı programalmaya giriş yaptım gerçe sade class olarak tanımladım :D)
İçimden şöyle geçti ya ben bunu class olarak tanımlarsam ne olur kodun çalışacagını hiç zannetmiyordum bir baktıydım çalıştı en aşagıda none yazdı onu niye yazdı bilmiyorum.
Bu nasıl oldu ya :D

Python:
aHesap = {
    "ad": "mehmetB",
    "hesapNo" : "8946534",
    "bakiye" : 2000,
    "ekHesap": 1000
}

bHesap = {
    "ad": "aliA",
    "hesapNo" : "8946534",
    "bakiye" : 2000,
    "ekHesap": 1000
}

class Bankamatik:

    karar = int(input("aşırı çömert bankaya hoj geldiniz para çekmek için 1 yatırmak içinse 2 yazınız: "))

    if karar == 1:
        hesap = input("hesap ad: ")
        miktar = int(input("miktar: "))

        def paraCek(hesap, miktar):
            print(f"merhaba {hesap['ad']} ")

            if hesap["bakiye"] >= miktar:
                hesap["bakiye"] -= miktar
                print("paranızı alabilirsiniz")
                # BakiyeSorgulama(hesap)
            else:
                toplam = hesap["bakiye"] + hesap["ekHesap"]
                if toplam >= miktar:
                    ekHesapKulanımı = input("ek hesap kullanılsınmı (e/h) ")
                    
                    if ekHesapKulanımı == "e":
                        ekHesapKullanılacakMiktar = miktar - hesap["bakiye"]
                        hesap["bakiye"] = 0
                        hesap["ekHesap"] -= ekHesapKullanılacakMiktar
                        print("paranızı alabilirsiniz")
                        # BakiyeSorgulama(hesap)
                    
                    else:
                        print(f" {hesap['hesapNo']} nolu hesabınızda {hesap['bakiye']}  bulunmaktadır.")
                else:
                    print("üzgünüz bakiyeniz yetmemmektedir lütven en kısa sürüde yükleme yapınız")
                    # BakiyeSorgulama(hesap)
                
        def BakiyeSorgulama(hesap):
            print(f" {hesap['hesapNo']} nolu hesabınızda {hesap['bakiye']} tl bulunmaktadır. ek hesap limitiniz ise {hesap['ekHesap']} tl bulunmaktadır  ")

        # paraCek(hesap , miktar)

ssd = Bankamatik.paraCek()
print(ssd)
    
#  paraCek(aHesap , 1000)
# if karar == 2:
#     hesap1 = input("hesap ad: ")
#     miktar1 = int(input("miktar: "))
    
#     def ParaYatır(hesap1, miktar1):
        
#         hesap1["bakiye"] =+ miktar1
#         print("paranız yatırılılmıştır")
#         BakiyeSorgulama(hesap1)
#     ParaYatır(hesap1 , miktar1)
 
Son düzenleme:

Technopat Haberler

Geri
Yukarı