Traceback (most recent call last):
File "/usr/lib/python3.7/threading.py", line 926, in _bootstrap_inner
self.run()
File "/usr/lib/python3.7/threading.py", line 870, in run
self._target(*self._args, **self._kwargs)
File "a.py", line 22, in increase
root.text.config(text=str(i))
File "/usr/lib/python3.7/tkinter/__init__.py", line 1485, in configure
return self._configure('configure', cnf, kw)
File "/usr/lib/python3.7/tkinter/__init__.py", line 1476, in _configure
self.tk.call(_flatten((self._w, cmd)) + self._options(cnf))
RuntimeError: main thread is not in main loop
while...else ne yapiyor bilmiyorum ama bir sekilde increase'in decrease ve decrease'in de increase'i cagirdigini varsayiyorum. Bu sonsuz recursion; tail call optimization olmayan dillerde stack yetmezligi nedeniyle patlayacaktir.
Kendi sistemimde 35 dakika gibi bir sure hesapladim ama update ve sleep cagrilari cikartilarak hemen olmasi saglanabilir.
Cozum de sonsuz loop icinde iki state arasinda gidip gelmek.
Bir şey yapmıyor değil, else durumlarında self.upper ve self.lower değişkenleri sıfırlanıyor, yani ilk konumlarına geri getiriliyorlar ve daha sonra decreaseincrease’i, increase de decrease’i çağırıyor. while döngüsü koşul sağlanmadığı zaman otomatik olarak duruyor ve bu kez diğer fonksiyondaki while döngüsüne geçiliyor.
self.increase fonksiyonunda self.upper > self.lower koşulu sağlanmadığında else durumuna geçilir, self.lowerwhile döngüsü aktif olduğu sürece self.step kadar arttırılır.
self.decrease fonksiyonunda da self.upper > self.lower koşulu sağlanmadığında else durumuna geçilir, self.upperwhile döngüsü aktif olduğu sürece self.step kadar azaltılır.
Aşağıda paylaştığım kod sizin dediğiniz gibi çalışıyor. Ben sadece fantezi yapıp ifadeyi o şekilde yazdım ve recursion kullanmak istemiştim. Hepsi bu
@aib’in bahsettiği RecurssionError fırlatma ihtimallerini kaldırmak için kodları şöyle değiştirdim.
Ben de demek istiyorum ki bu koşul sağlanmadığında zaten döngü bitecek, else yazmasak da döngüden sonraki kodlar çalışacak. Fazladan bir etkisi mi var ki elsenin bu şekilde kullanılıyor?
^^^ Iste tam olarak bu yukardakine sebep oldugu icin sevmiyorum ve nasil calistigini anlamayi reddediyorum. Python mainstream oldu artik, bu tur “acaba C’yi iyilestirebilir miyiz” deneylerine gerek yok. Giderken caldiginiz dogru sirali if expression’ini da yerine koyun lutfen. Tesekkurler.
Bari caldigi keyword’le uzaktan-yakindan alakali bir is yapsa… while'a girilmediginde calissa belki zerre saygi gosterebilirdim.
nobreak diye adlandirilmasi gereken durumdan bahsediyoruz, degil mi? for...else cunku hala “loop’a girilmezse” gibi okunuyor.
Sebepsiz yere catch’i except, throw’u raise yapan dilden nobreak keyword’u eklemekten korkmasini beklemezdim. (“Fazla keyword kullanmayalim” diye kotu bir savunma vardi, ama resmi miydi hatirlamiyorum)
Ah evet, “bu dil sacmaliklarina ragmen ogrenmeye deger mi” degerlendirmesi yaparken okumustum. Profosyonel Python’cularin sevmeyip kullanmamasi icime su serpmisti.