Olmasını istediğiniz şeyin ne olduğunu tam anlayamadım ancak sanıyorum ki Türkçe düşündüğünüz için bir sorun yaşadınız.
if x == y and z:
...
Burayı sanırım “x
değişkeni, y
ve z
değikenine eşitse …”
Diye algılıyorsunuz.
Ancak hayır. Böyle olabilmesi için
if x == y and x == z:
...
Şeklinde yazılmalı.
if x:
...
Yazarsanız, eğer değişken True
bir değer içeriyorsa True
döndürür, içermiyorsa False
döndürür.
Mesela x
değikeninin 0
’a eşit olduğunu düşünün.
x = 0
if x:
print("if çalıştı")
else:
print("else çalıştı")
Python’da 0
sayısı False
bir değer olduğu için burada if
bloğu çalışmaz. Çünkü if
bloklarının çalışabilmesi için koşulların True
döndürmesi lazım.
x == y and z:
...
Kodunda da benzer bir durum oluyor.
“x
, y
’ye eşitse ve z
True
” ise demek oluyor bu.
x
in, y
ve z
’ye eşit olup olmadığının sorgulanması için:
if x == y and a == z:
yazılması lazım.
Çünkü mantıksal bağlaçların olduğu koşullar baştan sona doğru sırasyla şu şekilde okunuyor:
x == y and z:
#True döndü # mantıksal bağlaç # Barındırdığı değere göre bir boolean değer döndürecek
Mesela siz burayı muhtemelen şöyle düşündünüz.
c değişkeni, "a" ve "1" stringine eşitse..
Ama aslında orası şu demek:
c değişkeni, "a" stringine eşitse ve "1" stringi True döndürüyorsa...
ve bu iki anlam birbirinden o kadar farklı ki …
Hadi bu anlamları karşılaştıralım.
c
değişkeninde kullanıcıdan bir veri alıyorsunuz. Kullanıcı veriyi girdikten sonra bir koşul yazıyorsunuz. Bu koşulun çalışması için gereken durumu da, kullanıcının girdiği verinin "a"
ve "1"
stringi ile eşleşmesi olarak belirliyorsunuz. Pekala. Buraya kadar her şey çok güzel.
Fakat, koşulun çalışması için belirlediğiniz durumu böyle belirttiğiniz zaman amacınızla aynı yönde bir işlev gerçekleşmiyor:
if c == "a" and "1":
...
Siz " c
değişkeni, "a"
ve "b"
stringlerine eşitse … " diye düşünüyorken, orada bu oluyor:
" c
değişkeni, "a"
stringine eşitse ve "1"
stringi True
ise …"
Şimdi bu iki anlamı işleyişleri bakımından karşılaştıralım:
if c == "a" and "1":
...
ifadesine bakalım öncelikle:
Mesela kullanıcıdan a
verisini alıyorsunuz. input
fonksiyonu string
döndürdüğü için c
değişkenimiz "a"
karakter dizisine eşit oluyor.
Sonrasında c
değişkeninin "a"
stringine eşit olduğu doğrulanıyor ve mantıksal bağlacımız and
in sorguladığı iki ifadeden biri True
dönmüş oluyor. Eğer ikinci ifade de True
döndürürse artık if
bloğumuz çalışabilir. "1"
stringi True
döndürdüğünden dolayı ikinci ifade de True
oluyor ve artık if
bloğu çalışmaya hazır.
Şimdi de
if c == "a" and c == "1":
...
ifadesine bakalım.
Yine kullanıcıdan a
verisi aldık. input
fonksiyonu string
döndürdüğü için c
değişkenimiz "a"
stringine eşit oluyor tekrardan.
Sonra tam olarak koşulumuza bakıyoruz. and
bağlacının ilk ifadesi olan c == "a"
True
döndürüyor çünkü zaten c
değişkenimiz "a"
stringine eşit. Sonrasında and
bağlacımızın ikinci ifadesi olan c == "1"
False
dönüyor çünkü c
değişkenimiz "1"
stringine eşit değil …
Son olarak karşılaştırmayı özetle şöyle göstereyim: (kullanıcının “a” girdiğini varsayın yine)
if c == "a" and "1":
c == "a" and "1"
# True # Mantıksal Bağlaç # True (çünkü "1" stringi True'dur ...)
if c == "a" and c == "1":
c == "a" and c == "1"
# True # Mantıksal Bağlaç # False