Matematik Operatörleri

Matematik Operatörleri

Merhaba,

aşağıda and ve or yerine & ve | kullandım. ilk if koşulunda çalıştı fakat ikinci if koşulunda ilginç bir şekilde if zar_a == 1 | 2 & zar_b == 2 or 1: sondaki or yerine | kullanınca çalışmıyor.

Bu şekilde denemeler de yaptım and yerine &,
iki or yerine | koydum çalışmıyor.

def zar1():
    
    import random
    
    zar_a = 1
    zar_b = 2
    
    if zar_a == 1 | 2 & zar_b == 2 or 1:
        return (zar_a,zar_b, "Yek-i Dü")
    else:
        pass
    
    return("olmadı")

Merhaba,

Bu sandığınız gibi “zar_a değeri 1 veya 2 ise” gibisinden çalışmıyor.
Bunun yerine if zar_a == 1 or zar_a == 2 veya daha kısa bir yol ile if zar_a in (1, 2) kullanabilirsiniz.

if zar_a in (1, 2) and zar_b in (1, 2):

*Düzenlendi.

& ve | “bitwise and” ve “bitwise or” diye geçiyor. Eğer elinizde tam sayılar varsa ve bunların bit’lerine inip işlem yapmak istiyorsanız bunları kullanabilirsiniz. Şurada bir sürü örneği var https://graphics.stanford.edu/~seander/bithacks.html (haddinden fazla belki de). Örneğin bir tam sayının çift mi tek olduğunu anlamak için genelde sayi % 2 == 1 felan yaparız (tekse doğrudur bu). Ama aynı zamanda şöyle de yapabiliriz sayi & 1. Neden bunu yapabildiğimizi çözersiniz. (& ve | operatörlerinin yanında bir de ^ yani “bitwise xor” var; belki << ve >> “shifting” operatörlerini de burada sayabiliriz. Ayrıntılı bilgi için buraya bakabilirsiniz (Mesela bazı özel metodların sınıflarda yazılmasıyla bu operatörlerin tam sayıların dışında da kullanılabileceği de yazıyor. Bunun bir örneği NumPy kütüphanesinde iki array arasında “element-wise” & alabilmenin mümkün olmasıdır).

and ve or ise “logical and” ve “logical or” diye geçiyor. İşin içine doğruluk değerleri, yani boolean tipinde veriler girdiğinde mantıktaki karşılıklarını sağlamak için bunları kullanabiliriz. Örneğin "sayı 100’den küçük ve 7’nin katı değil"in karşılığı sayi < 100 and sayi % 7 != 0 şeklinde and ile yazılabilir. Benzer şekilde, "sayı 4 veya 5 olsun"u da sayi == 4 or sayi == 5 diye yazabiliriz (sayi == 4 or 5 diye değil; nedeni için bakınız https://forum.yazbel.com/t/pythonda-and-ve-or-sikintisi/11554/5).

Velhasıl, o meşhur 0 ve 1’lerle işlem yapmak (daha doğrusu yaptığınızı hissetmek) istiyorsanız & ve | (ve ^, <<, >>) operatörlerini kullanabilirsiniz. Bunları çok yaygın görmüyoruz etrafta kullanım alanlarından dolayı. Öbür yandan mantıktaki (ve günlük konuşmadaki) “ve”, “veya”, “değili” gibi ifadelerin yerini and, or, not tutuyor.

Sizdeki şu satırda tam olarak ne demek istediğinizi anlayamadım ama “hem zar_a hem de zar_b 1 veya 2 değerlerinden birini alsın” diyorsunuz galiba.

if zar_a == 1 | 2 & zar_b == 2 or 1:

O zaman

if (zar_a == 1 or zar_a == 2) and (zar_b == 1 or zar_b == 2):

şeklinde yazabiliriz: & ve |'lar buraya uygun değil yukarıda bahsedilenlerden dolayı; onları and ve or ile değiştiriyoruz (öbür türlü de çalışıyor olabilir ama niyet çok belli olmazdı zira amaç bitwise işlemler değil). Veya yukarıdaki yanıttaki in operatörünü kullanarak “zar_a'nın değeri (1, 2) demetinin içerisinde mi?” diye de yazabiliriz:

Ama & kullanımından kaçınılmalıdır burada, zaten operatör önceliğinden dolayı hata veriyor… and olmalı aradaki:

if zar_a in (1, 2) and zar_b in (1, 2):

Son olarak niye zar_a == 1 or 2 çalışmazın sebebi de yukarıdaki linkte Python'da and ve or sıkıntısı - Unnick tarafından #5.

1 Beğeni

Teşekkür ederim. Orijinal kodda and ve or kullandım ama bugün başka bir konuda çalışırken aklıma geldi ve daha az tuş kullanılarak da yazılabilir mi diye bir denemek istedim.