Python string denklemi integera çevirme

a=5
b=3
c=raw_input("Denklem: ")

Kullanıcıdan aldığı “a+b” ile 8 yazmasını istiyorum. Yardımcı olursanız sevinirim.

Merhaba Serkan Bey. raw_input kullanmanızdan Python2.x kullandığınız anlaşılıyor. Bir teknoloji gelişip iyileşirken onu geriden takip etmek çok iyi değildir. Yapmak istediğiniz konuya gelirsek, Yazbel sitesinde bulunan Python dokümanlarını okudunuz mu bilmiyorum ancak ihtiyaç duyduğunuz bilgiler orada mevcut:
https://belgeler.yazbel.com/python-istihza/input.html#eval-ve-exec-fonksiyonlari

Tam olarak aradığım şeyi sundunuz. Çok teşekkürler Ekrem Bey.

Önemli değil. Eğer dökümanları ilk defa gördüyseniz orayı takip etmenizi öneririm.

Kolay yol: eval

Burada kullanicidan Python bilip Python kodu girmesini bekliyoruz. Girdigi kodun zararli veya amaci disinda kotuye kullanilacak bir sey olmamasini umit ediyoruz (veya umrumuzda degil.)

Dogru yol: Gramer olusturma, parse etme ve calistirma

Buradaki terimlerin Turkcesini bile bilmiyorum. Yazilabilecek seyleri belirtilen bir former grammar olusturup bunun (tercihen bir kutuphane yardimiyla) parse edilip degerlendirilmesi lazim. Paranteze izin verilecekse gramer muhtemelen context-free grammar olacak, ona gore aranabilir. pyparsing guzele benziyor mesela.

Evet, en güvenli yol programımızdaki değişkenlere kullanıcının erişmesine olanak sağlamayacak bir algoritma kullanmak. Ancak bir dili öğrenirken bu konuya o kadar da dikkat edilmesi gerektiğini düşünmüyorum. Eğer gerçek bir uygulama geliştirilecekse elbette dediğiniz gibi bir yöntem izlenmeli.

Ancak eval fonksiyonunun tehlikesi hakkında kesinlikle haklısınız. Bunu zaten biliyordum -pythonla işi olan çoğu kişi duymuştur- ancak bu kadar olabileceğini hiç düşünmemiştim:
https://nedbatchelder.com/blog/201206/eval_really_is_dangerous.html

1 Like

Ben de dusunmuyorum.

1 Like