And or işleçleri hakkında bir sorum var?

Merhaba arkadaşlar aşağıdaki ilk kod için 85 yazdığımda doğru çalışıyor ve B aldın diyor.

notunuz=int(input("Notunuzu girin: "))

if notunuz >100 or notunuz < 0:
    print("Böyle bir noticat edilmedi!")
elif notunuz >= 90 <= 100:
    print("Aferin A aldın!")
elif notunuz >= 80 < 90:
    print("B aldın")

Ama şu şekilde yazarsam 85 notu için A aldın diyor. Neden böyle bir fark oluşuyor?

if notunuz >100 or notunuz < 0:
    print("Böyle bir noticat edilmedi!")
elif notunuz <= 100 >= 90:
    print("Aferin A aldın!")
elif notunuz >= 80 < 90:
    print("B aldın")

Merhaba.

notunuz <= 100 >= 90 deyimi notunuz <= 100 ve 100 >= 90 olarak ayrılıyor, ki bunların ikisi de doğru.

İyi çalışmalar.

merhaba cevabınızı tam olarak anlayamadım. ikisi de doğru demişsiniz ama ikinci kod dzininde 85 notu için Aferin A aldın diyor. yani B demesi gerekirken A diyor.

Evet çünkü şu kontrol doğru oluyor:

elif notunuz <= 100 >= 90:
    print("Aferin A aldın!")

Açıklamaya çalıştığım koşul buradaki koşuldu.

Ama burada 85>=90 koşulu sağlanmadığı için sonraki elif durumuna geçmesi gerekmiyor mu?

Bu dediğiniz durumu Python kontrol etmiyor, sadece ilk ikisine bakıyor, daha sonra da diğer ikisine bakıyor. Python’da bu gibi kafa karıştırıcı koşullardan olabildiğince sakınmalısınız, bunlar böyle hatalara neden olabilirler.

Aslında birçok dil Python’daki bu sözdizimini desteklemez. Örneğin Ruby’de bu koşulu şöyle yazmanız gerekir:

if notunuz <= 100 and notunuz >= 90

Zaten Python’da da daha çok şu gibi koşullar için bu sözdizimi desteklenmektedir:

if 90 >= notunuz >= 100

Siz de bu şekilde yazarak sorununuzdan kurtulabilirsiniz.

İyi çalışmalar.

Fırat Özgül’ün kitabından devam ediyorum. Verdiğiniz
if 90 >= notunuz >= 100

biliyorum. Ben dediğim şeyi neden kabul etmiyor özel bir nedeni mi var acaba, yoksa bir şey mi kaçırıyorum diye sormuştum.

İlginiz için teşekkürler…

İkinci yazdığınız kodların istediğiniz gibi çalışmayan kısmını Türkçe’ye çevirelim:


elif notunuz <= 100 >= 90:  # Notunuz 100'den küçük veya eşitse
    # ve 100 de 90'a eşit veya büyükse
    print("Aferin A aldın!") # Bu satırı çalıştır.
# Dolayısıyla siz input() kısmına 10 da yazsanız belirttiğiniz her iki şarta da 
# uyduğu için "Aferin A aldın!" yazacak.
# 90 yazdığınız yere 101 yazarsanız, 
# notunuzu ne girerseniz girin bir daha "Aferin A aldın!" yazısı bastırılmaz.
# çünkü bu sefer ikinci şart 100 >= 101 sağlanmamış olur.

# İsmail Bey bu karşılaştırma ifadesi yüzünden böyle bir çıktı aldığınızı yazmış.
# Kendisinin de önerdiği gibi bu elif satırı aşağıdaki gibi yazılırsa bu kez istenen şekilde çalışır:

elif notunuz <= 100 and notunuz >= 90: 
# Notunuz 100'e eşit veya 100'den küçük
# VE 90'a eşit veya 90'dan büyükse
    print("Aferin A aldın!") # Bu satırı çalıştır.

#veya şöyle de yazılırsa istendiği gibi çalışır

elif 100 >= notunuz >= 90:
    ....
    

Şimdi
elif notunuz >= 90 <= 100:
kodunun neden işe yaradığını anladım. Python soldan sağa doğru okuyor. ikinci şartı 90 <= 100 olarak okuduğunu bilmiyordum. Onu da notunuz <= 100 olarak algılıyor sanmışım.

Şimdi kafamda oturdu. Çok teşekkürler…