a=""
if not a:
print(a)
yukarıdaki kod da not a
True değerini mi döndürür ?
a=""
if not a:
print(a)
yukarıdaki kod da not a
True değerini mi döndürür ?
Neden 7<9 and "m"
ifadesinin degeri "m"
a="" #Değeri bize false döndürür
if not a:
print(a)
kısmına gelince if eğer doğru ise yani true ise çalışır not değili demektir matematik mantığı gibi false’ın değili true olduğu için print komutu çalışır ancak a boş olduğu için ekrana sadece alt satır basılır değer basılmaz.
e=7<9 and "m"
print(e)
kısmına gelince biz 7 küçük müdür 9 dan diyoruz o da bize true diyor yani doğru biz bu true değerimizi e değişkenine atıyoruz ve true and “m” diyoruz aslında orada true and true diyoruz çünkü “m” boş bir karakter dizisi değil dolu çünkü içinde m var sonuç ise true oluyor
eğer neden True değil karakter dizisi döndürüyor diyorsan yerlerini değiştir bu sefer True döner “m” and True konumu ile alakalı bu ikinci true ekrana basıyor diye biliyorum karakter dizisi olduğu için yanlışım olabilir bu konuda ama mesele bu.
a
fonksiyon olmadigi icin deger donduremez. a
degere sahip bir degisken.
“Kotu bir programciyim” demek istedik. if
gibi kontrollere giren / not
gibi operatorlere operand olan ifadelerin bool
turunde olmasi lazim, yoksa bool(ifade)
denmis gibi cevriliyorlar.
Programcinin hata yapmasini engellemek isteyen diller bu tur str
→ bool
gibi cevrimlerin implicit (otomatik) olmasina izin vermiyor cunku cevrim kurallari dili tasarlayan insanlarin kafasina gore oluyor ve mantiga veya dili kullananlarin beklentilerine her zaman uymuyor. bool("False")
Python’da True
mesela.
Bu kadar soru soran bir insan olarak artik ifadelerini duzeltmis olman gerekiyor:
“Neden 7<9 and "m"
ifadesinin degeri "m"
”
Cevap dil kurallarinda bir yerde gizli.
Hayir, bu ifade e = (7<9 and "m")
gibi parse ediliyor ve e
degiskenine atama and
ifadesi degerlendirilmeden olmuyor.
Bu “x = x or default_value
” gibi ifadeleri mumkun kilmak icin tasarlanmis bir ilginclik ve kullanimi code review’da azar yeme sebebi.
Değer döndürüyor kısmı yanlış oldu evet bool değeri false demeliydim diğer kısımları da düzeltmişsiniz teşekkürler.
evet bu bölümü de gayet yanlış anlatmışım
burada mantık dışı olan ne ?, bool
fonksiyonuna str (eğer boş değil ise) gönderildiğinde True olarak döndürmesi normal acaba ben mi sizi yanlış anladım?
Mantıklı mı bilmem ama tutarlı, dediğiniz gibi basit bir kural ile çalışıyor. Birkaç defa bu özelliği unutmamdan dolayı programdaki hatayı bulamamıştım. @aib in de dediği gibi dili kullananın isteği hep bu olmuyor.
O kodda None
yok ki
boş string ifadelerinin bool değeri None olmaz mı ?
eğer değilse None ne için kullanılıyor
Boş string içeren bir değişken ''
dir
None
sınıfının tek örneği olan bir nesne. Bir değişken global alanda bulunmadığı halde değer atanmadan fonksiyon içinde global hale getirilirse None
olur. Fonksiyon bir değer döndürmezse None
dönmüş olur …
Anladım belkide böyle saçma sorular sormamalıydım
anladığım kadarıyla şu ifadede hep en sağdaki değer dönücek(eğer ikisininde bool ifadesi True ise) a= "e" and "m"
dediğimizde a
değişkeni m
değerini alacak
Nasil normal? bool("True")
True
ise bool("False")
da False
olmali, bundan daha dogal ne var?
Derleyici/yorumlayici tarafindan islendigi icin her halukarda tutarli olacak zaten Ama evet, “mantikli” subjektif bir sey.
None
bool
degil.
Burada @Emerald_Gamer’in söylemeye çalıştığı şey şu:
bool("True") == bool("False") == bool("hede")
bool
sınıfından örnek oluştururken, argümanın True
veya False
olup olmadığı önemli. Karakter dizisinin uzunluğunun 0
dan büyük olduğu her durumda True
değeri geri döner.
Biliyorum, ve bu mantiksiz. Burada "mantiksiz"i “cok sacma, dogal degil ve dogru olmadigini dusunuyorum” manasinda kullaniyorum, “kendi icinde tutarli kurallar cercevesinde var olamayacak” manasinda degil. (Yoksa dedigim gibi, bilgisayar tarafindan calistirilabilen her kural mantikli.)
C’de mesela karakter dizilerinin tamami true, karakter dizisi olamayacak tek deger false gibi calisiyor.
Aslında mantıksız olan bir şey yok.
bool("True")
ve
bool("False")
değeri boolean sınıfında bir karakter dizisini ifade ediyor. Boolean sınıfında string bir ifade var ise True değeri döndürüyor.
bool(False)
değeri ile
bool("False")
aynı değeri döndürmüyor. 3. kodda Boolean sınıfından False değeri alıyoruz, 4. de ise Boolean sınıfından string değeri “False” olan bir değişken oluşturuyoruz.
Başka bir örnek göstermek gerekirse ;
a = [ ]
b = [0]
c = 0.0
bool(a)
bool(b)
bool(c)
Yukarıdaki boş a listesinin bool değeri False,
1 elemana sahip olan b listesinin bool değeri True,
c’nin bool değeri ise False oluyor.
Burada kafa karışıklığına sebep olan sanırım parantez içinin string değer olması.
bool(False)
ile bool("False")
aynı değil. bool("False") = bool(True) = bool("True") = bool(1)
a = None
bool sınıfında bool(a)
False değerini verir. Yani boş string ifadesi None değeri döndürdüğü için bool değeri False oluyor.
Evet None bool değil ama bool(None)
False. Boolean iki değer döndürür True ve False. bool(None) = bool(False)
Nasil normal?
bool("True")
True
isebool("False")
daFalse
olmali, bundan daha dogal ne var?
Bu bahsettiğinin doğal sonucu şöyle olurdu:
bool("True")
True
ise ve
bool("False")
False
ise
bool("Hede")
doğal olarak Hede
dir.
Aslında mantıksız olan bir şey yok.
boolean sınıfında bir karakter dizisini ifade ediyor
“Boolean sinifinda bir karakter dizisi” mantiksiz. Boolean sinifinda 2 deger var, bunlarin ikisi de karakter dizisi degil.
Boolean sınıfında string bir ifade var ise True değeri döndürüyor.
Yanlis yazmissin (uzunlugu 0’dan buyuk olan string bir ifade varsa True) ama bu da mantiksiz.
bool(False)
değeri ile
bool("False")
aynı değeri döndürmüyor.
Bu da mantiksiz.
bool("True")
True
ise ve
bool("False")
False
ise
bool("Hede")
doğal olarakHede
dir.
Bu mantikli. Hede
diye bir deger olsaydi daha da mantikli olurdu.
Burada kafa karışıklığına sebep olan sanırım parantez içinin string değer olması.
Kafa karisikligi yok; dilin nasil davrandigindan bahsetmiyorum, nasil davranmasi gerektiginden bahsediyorum.
bool(False)
ilebool("False")
aynı değil.
Evet, ve bu cok sacma.
Yani boş string ifadesi None değeri döndürdüğü için bool değeri False oluyor.
Burada bir kafa karisikligi var sanirim. Bos string ifadesi bos string degerine sahip. bool
fonksiyonu burada oyle yazdigi icin False
donduruyor; bos string ile None
’in herhangi bir alakasi oldugundan degil. bool("")
→ bool(None)
→ False
gibi bir donusum yok yani.
Olamaz da:
a) (Bildigim kadariyla) hic bir ifadeyi NoneType
’a ceviren bir degisim yok.
b) Parametreler tursuz (unityped) oldugu icin argumanlar otomatik tur degisimine ugramiyorlar.