Listeler hakkında

Selam, kullanıcı eğitim durumunu yazdığı zaman örnek “Lise” bunun listemde olup olmadığını sorgulamak istiyorum koşul ifadesinde ‘in’ ile bunu hallebiliyorum buraya kadar tamam sorun yok. Oluşturmuş olduğum 4 elemanlı bir listem var, fakat girilen string ifadeyi listemdeki elemanın indexinden büyük mü küçük mü diye sorgulayamıyorum ona göre bir yol izleyeceğim. Haliyle “TypeError: list indices must be integers or slices, not str” hatası alıyorum çünkü index elemanlarını sorgulamam için bir tam sayı değer vermem gerekiyor.

Yapmak istediğim Lise mezunu altıysa “En az lise mezunu olmalısınız” üstüyse “Durum başarılı” yazdırmak.
Fakat işin içinden çıkamadım :smiley: Örnek ;

education = input("Eğitim durumunuzu yazın :  ")

education_list = ['ilkokul', 'ortaokul', 'lise', 'üniversite']

if (education.lower() in education_list) and (education.lower() > education_list['ortaokul']):

    print("Durum başarılı.")

else:

    print("En az Lise mezunu olmak zorundasınız.")

elif koşul ifadesiyle tek tek değerleri sorgulayabilirim elbette fakat çok uzun yöntem olmaz mı? Direkt listeden ilerleyemez miyim ?
Teşekkürler

Aklıma dict ile denemek geldi bir deniyeyim :smiley: Son durumu yazarım :smiley:

"""education_list = ['ilkokul', 'ortaokul', 'lise', 'üniversite']"""
education = input("Eğitim durumunuzu yazın :  ")
education_list = {
'ilkokul': 0,
'ortaokul': 1,
'lise': 2,
'üniversite': 3
}
if(education in education_list) and (education == 'lise') or (education == 'üniversite'):
print("Bu iş tamamdır.")
else:
print("En az lise mezunu olmak zorundasınız.")

Bu şekilde ancak çözdüm yine istediğim gibi olmadı maalesef (çünkü dict gereksiz yere kullanılıyor)

üniversite değerinin uzunluğu 10 karakter. diğerlerinin uzunlukları arasında 10 karaktere ulaşan yok. böylece kullanıcıdan aldığın education uzunluğunu 2 koşul ifade içinde kontrol ederek çözebilirsin.

if (len(education) >= 10):
    print("başarılı")
else:
    print("başarısız")
2 Beğeni

tabi bu geçiçi ve sağlıksız güvenilir olmayan bir kod yapısına sahip çözüm. Sonuçta kullanıcı en abuk girdiler yaparak seni zora sokabilir. sana aslında başka bir tavsiyem var

1 Beğeni

education_list = ['ilkokul', 'ortaokul', 'lise', 'üniversite']
Teşekkür ederim ilginiz için. Liste içinde büyük küçük sorgulaması yapamaz mıyım benim yukarıda izlediğim yöntem gibi

from time import sleep
from os import system

while True:

    system("cls")

    print("""
    İLKOKUL >> 1
    ORTAOKUL >> 2
    LİSE >> 3
    ÜNİVERSİTE >> 4
    """)
    print()
    print("Lütfen bir öğrenim seviyesi seçiniz")
    
    education = input("Seçiminiz >")

    if education == "1" or education == "2" or education == "3":
        print()
        print("Başarısız")
        sleep(2)
        print()
        break

    elif education == "4":
        print()
        print("Başarılı")
        sleep(2)
        break

    else:
        print()
        print("Hatalı veri girişi yaptınız lütfen tekrar deneyiniz.")
        sleep(2)

Buna bir bak sonra da çalıştır.

Çalıştırırken şunları dene

  1. seçiminiz kısmına 1 yaz
  2. seçiminiz kısmına 2 yaz
  3. seçiminiz kısmına 3 yaz
  4. seçiminiz kısmına 4 yaz
  5. seçiminiz kısmına saçma sapan bir şeyler yaz örn: sskldgh3hhsdgkh

bence bu senin işini daha sade ve daha güvenilir şekilde görebilir.

2 Beğeni

kodu tekrar güncelledim aldıysan öncekini sil bunu tekrar alır mısın?

2 Beğeni

Hocam emekleriniz için çok teşekkür ederim. Ben çok uzun olmasın daha pratik nasıl yapabileceğimi öğrenmek istemiştim :smiley: Yoksa soruyu cözemeyecek bir şey yok.
Yanlış anlamayın lütfen, ama sizde cok uzatmışsınız :slight_smile:
Benim sorumun cevabı şu 6 satırın arasında yatıyor ; fakat nasıl ? tek olay bu

education = input("Eğitim durumunuzu yazın :  ")

education_list = ['ilkokul', 'ortaokul', 'lise', 'üniversite']

if (education.lower() in education_list) and (education.lower() > education_list['ortaokul']):

    print("Durum başarılı.")

else:

    print("En az Lise mezunu olmak zorundasınız.") 

Kullanıcının girdiği değeri, listeyle karşılaştırıp büyük küçük diye sorgulayabilirsem olay çözülüyor

Bu yöntem iyi aslında, enum-vari bir yapı var; şöyle yazsanız:

if education in education_list and education_list[education] >= education_list["lise"]:
    print("Bu iş tamamdır.")
else:
    print("En az lise mezunu olmak zorundasınız.")
1 Beğeni

Bu şekilde denedim, bilmem olur mu?

education = input("Eğitim durumunuzu yazın :  ")

education_list = ['lise', 'üniversite']

if education in education_list:

    print("Durum başarılı.")

else:

    print("En az Lise mezunu olmak zorundasınız.")
1 Beğeni

Nerede hata yaptığımı bu cevabınızla gördüm. :smiley: Çok teşekkür ederim tam olarak aradığım buydu :smiley:

Bu cevapta kesinlikle geçerli hocam ama benim aradığım cevap , liste içerisinde büyüklük küçüklük kontrolü yapmaktı teşekkür ederim ilginiz için :slight_smile:

https://python-istihza.yazbel.com/listelerin_ve_demetlerin_metotlari.html#index

1 Beğeni

Dogru cevabin bu kadar asagida olmasi endiselendirici…

Cok da gereksiz degil, listedeki ima edilen siralamayi acikca belirtmek icin kullanilmis. Listenin sirasiz veya baska bir sirayla (alfabetik mesela) olabilmesini istedigin noktada zaten baska sansin yok.

Hatta dict kullanılacaksa list gereksiz, sözlüğün anahtara sahip olup olmadığına bakılabilir.


* Zaten öyle yapılmış, değişken isminin sonu _list kalınca fark etmemiştim.

Saygı değer hocalarım. Hocanın bize sorduğu bu soruda, ne liste kullanın diyor ne de sözlük tipi liste kullanın diyor. Hocanın istediği yöntem if-elif-else ile çözmek. Ama bu çok çok basit ve bana göre uzun yöntem. Ben hocanın istediği yöntemle çözdüm zaten. Ekstra olarak listeyle çözmek istedim baktım listeyle işin içinden çıkamadım, dedim bari sözlük tipi listeyle ‘key,value’ üzerinden ilerliyeyim olay bu. Hocam evet bu cümleyi yazdığım yerde dict gereksiz kullanılıyor diye düşünüyorum hala (ben cözemememiştim o an olayı) Hala’da (o kısım için konusuyorum) dict gereksiz. Neden mi ?

education = input("Eğitim durumunuzu yazın :  ")
education_list = {
'ilkokul': 0,
'ortaokul': 1,
'lise': 2,
'üniversite': 3
}
if(education in education_list) and (education == 'lise') or (education == 'üniversite'):
print("Bu iş tamamdır.")
else:
print("En az lise mezunu olmak zorundasınız.")

Şu kısma dikkat ;
1 - Burada sözlük için tek gereklilik ‘in’ operatörü bence.
if(education in education_list) and (education == 'lise') or (education == 'üniversite'):
2 -
if(education == 'lise') or (education == 'üniversite'):
Eğer gayem eşitleyip geçmek olsaydı, direkt böyle yapardım. Bu yüzden Dict ile orada istediğim amaca ulaşamadım ve orada gereksiz dedim ki bu yöntemle gideceksem bence gereksiz. Eşitle geç, nasılsa 2 seçenek yok mu? “lise”, “üniversite” dict’e gerek yok.:smiley:

Benim öğrenmek istediğim ; dict tip liste veya normal listede nasıl sorgulama yapabilirim vb vb. Ben çözemedim işte o an bir yandan kaynaklara bakarken bir yandanda buraya yazmak istedim. Teşekkürler :smiley:
100 elemanlı bir dict olduğunda nasıl sorgulayabilirim vb vb diye ilerledim hep olay buralara geldi :smiley:
Aslında yazılan yöntemlerde bildiğim yöntemler ama bazen takılıyo insan :smiley:

Ayrıca @aib hocam siz belki 1000 program yazdınız, biz yeni öğreniyoruz :smiley:

Sorun çözüldü olayı anladım teşekkürler tekrardan herkese :slight_smile:

education = input("Eğitim durumunuzu yazın :  ").lower()

education_list = ['ilkokul', 'ortaokul', 'lise', 'üniversite']

if (education in education_list) and (education_list.index(education) > education_list.index("ortaokul")):
    print("Durum başarılı.")

else:
    print("En az Lise mezunu olmak zorundasınız.")

Liste kullanarak şu şekilde yapılabilir ama liste içindeki değerlerin sırasına dikkat etmek lazım.

1 Beğeni