Python Sözlük ve Değişken

def Notlari_gir():
   for i in range(ogr_sayisi):
     vize_1=int(input("VİZE 1 :"))
     vize_2=int(input("VİZE 2 :"))  
     final=int(input("Final :"))
     sözlük["vize1"]=vize_1
     sözlük["vize2"]=vize_2
     sözlük["final"]=final 

şu kodda vize1 vize2 final değerlerini kaç öğrenci varsa döndürecek döndürüyor fakat son döneni vize 1 vize 2 ve finale kaydediyor ilk girilenleri kaydetmiyor.Çözüm nedir?

Kodlarinizi iki tane ``` arasina alarak yaziniz lutfen.

Kodunuzun tamamını buraya göre düzenleyip atarmısınız.

1 Beğeni

Çünkü sözlüklerde aynı isme sahip birden fazla anahtar bulunamaz.

  • Aslında kaydediyor, fakat bir sonraki döngü içerisinde, aynı anahtara yeni bir değer atıyorsunuz.
  • Sizin burada yaptığınız işlem, yeni anahtar eklemek değil, var olan bir anahtara değer atamak.

Yeni bir anahtar oluşturmak için:

sözlük.update({anahtar: değer})

Her bir öğrenci için ayrı bir sözlük oluşturmayı veya sözlük içerisinde sözlük kullanmayı bir düşünün derim. Öbür türlü yapmanız gereken şey, “vize1” in başına veya sonuna bir takım eklemeler yaparak farklı bir anahtar haline getirmek.

Liste içine her öğrenciye ait bilgileri atabilirsiniz.

arr = []
for _ in range(10):
    hash = {}
    hash["vize_1"] = int(input("Vize_1 : "))
    hash["vize_2"] = int(input("Vize_2 : "))
    hash["final"] = int(input("Final : "))
    arr.append(hash)
1 Beğeni

vize1,vize2 ve final değerlerinin belli bir katını alıp ortalama hesaplayacağımda bunu nasıl yaparım. Mesela vize 1 in % 25’i ,2’nin 35’i ,finalin 40’ı=ortalama

Pek çok yoldan yapabilirsiniz,
Tüm girdileri aldıktan sonra

ortalama = round(vize1 * (25/100) + vize2 * (35/100) + final * (40/100), 2)

Veya sözlükteki değerleri girildikten sonra

ortalama = round(sum(hash[_not] * yuzde for _not, yuzde in zip(["vize_1", "vize_2", "final"], [25/100, 35/100, 40/100])), 2)
2 Beğeni

Kod çalışmadı print ortalama yazdırdığımda eror verdi.

Tamam global yapınca çalıştı eyvallah class’lı kodda da çok yardımcı olmuştun.

1 Beğeni

Kendi kodunuza uyarlamanız lazım.

arr = []
for _ in range(2):
    hash = {}
    hash["vize_1"] = int(input("Vize_1 : "))
    hash["vize_2"] = int(input("Vize_2 : "))
    hash["final"] = int(input("Final : "))
    hash["ortalama"] = round(sum(hash[_not] * yuzde for _not, yuzde in zip(["vize_1", "vize_2", "final"], [25/100, 35/100, 40/100])), 2)
    arr.append(hash)

print(arr)
1 Beğeni
arr = []
ogr=[]
ort=[]
harf_notu=[]


ogr_sayisi=int(input("Öğrenci Sayısını Giriniz:"))
def Ogrenci_isimlerini_gir():
    
    for i in range (ogr_sayisi):
        ogr_isim=input((str(i+1))+"-Numaralı  Öğrencinin İsmini Giriniz:")
        ogr.append(ogr_isim)









def Notlari_gir():
    for _ in range(ogr_sayisi):
        hash = {}
        global ortalama
        hash["vize_1"] = float(input("Vize_1 : "))
        hash["vize_2"] = float(input("Vize_2 : "))
        hash["final"] = float(input("Final : "))
        ortalama = round(sum(hash[_not] * yuzde for _not, yuzde in zip(["vize_1", "vize_2", "final"], [25/100, 35/100, 40/100])), 2)
        ort.append(ortalama)
        arr.append(hash)
        


def Harf_notunu_hesapla():
    for i in range(0,ogr_sayisi):
        if 90 <= ortalama[i] <= 100:
            print("AA")
            ortalama[i].append(harf_notu)
        elif 85 <= ortalama[i] <= 89:
            print("BA")
            ortalama[i].append(harf_notu)
        elif 80 <= ortalama[i] <= 84:
            print("BB")
            ortalama[i].append(harf_notu)
        elif 70 <= ortalama[i] <= 79:
            print("CB")
            ortalama[i].append(harf_notu)
        elif 60 <= ortalama[i] <= 69:
            print("CC")
            ortalama[i].append(harf_notu)
        elif 45 <= ortalama[i] <= 59:
            print("DC")
            ortalama[i].append(harf_notu)
        elif 0 <= ortalama[i] <= 44:
            print("DD")
            ortalama[i].append(harf_notu)
        else:
            ("Hata!")


def Çıktı():       
    for i in range(0,ogr_sayisi):
        global  öğrenci_bilgileri
        öğrenci_bilgileri=[
            {"isim":ogr[i],"notlar":arr[i],"Ortalama":ort[i],"Harf Notu":harf_notu[i]}
            ]


def Yazdir():
   Ogrenci_isimlerini_gir()
   Notlari_gir()
   Harf_notunu_hesapla()


Yazdir()

kodu yazdımda float’ object is not subscriptable eror alıyorum neden ?

Hangi satırda aldığınızı belirtmenizde fayda var.

Görünüşe göre sizin liste/tuple sandığınız bir değişken float tipinde, ve siz bu değişkeni var[0] gibisinden çağırmaya çalışıyorsunuz. Bu da hataya sebebiyet veriyor.

Hata şurada: if 90 <= ortalama[i] <= 100:
ortalama dediğimiz şey bir float. Sanırım ort[i] demek istediniz.
Ayrıca ortalama[i].append() burada da harf_notu demek istediniz sanırım.

def Harf_notunu_hesapla():
    for i in range(0,ogr_sayisi):
        if 90 <= ort[i] <= 100:
            print("AA")
            harf_notu.append("AA")
        elif 85 <= ort[i] <= 89:
            print("BA")
            harf_notu.append("BA")
        elif 80 <= ort[i] <= 84:
            print("BB")
            harf_notu.append("BB")
        elif 70 <= ort[i] <= 79:
            print("CB")
            harf_notu.append("CB")
        elif 60 <= ort[i] <= 69:
            print("CC")
            harf_notu.append("CC")
        elif 45 <= ort[i] <= 59:
            print("DC")
            harf_notu.append("DC")
        elif 0 <= ort[i] <= 44:
            print("DD")
            harf_notu.append("DD")
        else:
            ("Hata!")
1 Beğeni