Merhabalar,
Ben python programlama dilini yeni öğrenmeye başladım. Henüz başlangıç aşamasında olduğum için umarım sorduklarım çok saçma gelmez :)
Aşağıdaki gibi bir hesap makinesi yaptım. Import edilir edilmez otomatik olarak başlatmak için b tuşuna basıp enter a basınız yazdırıyorum. Bunu yaptıktan sonra da program çalışıyor.
Benim istediğim enter tuşuna basmadan klavyeden b tuşuna basmamızla programın başlaması. Yani hangi tuşa bastığını algılaması bir bakıma... Daha sonra farklı programlar arası seçenek de ekleyebileceğim. Yani hesap makinesi için h ye adres defteri için a ya gibi... Enter a basmadan algılama işini nasıl yapabilirim?
Şimdiden çok teşekkürler...
from __future__ import division
import sys
def hesaplama():
while True:
baslat=raw_input("Programi baslatmak icin 'b' tusuna basip 'enter' a basiniz: ")
if baslat=="b":
while True:
islem=raw_input("Isleminizi seciniz (+,-,x,/)\nCikmak icin 'quit' yaziniz: ")
if islem == "quit":
print "Bye!"
sys.exit()
if not islem in "+-x/":
print "Gecersiz islem!"
continue
try:
s1, s2= input("Birinci sayiyi giriniz: "), input("Ikinci sayiyi giriniz: ")
sonuc=calc(islem,s1,s2)
print "%s %s %s = %s" % (s1, islem, s2, sonuc)
except NameError:
print "Sadece sayi girebilirsiniz."
except SyntaxError:
print "Sadece sayi girebilirsiniz."
except ValueError:
print "Sadece sayi girebilirsiniz."
else:
print "Sadece 'b' tusu aktiftir."
continue
def calc(opt, n1, n2):
if opt=="+":
return n1+n2
elif opt=="-":
return n1-n2
elif opt=="x":
return n1*n2
elif opt=="/":
return n1/n2
print "Hesaplama Programina Hosgeldiniz"
hesaplama()
Denemedim ancak, internette şu şekilde bir kod buldum:import sys, tty, termios
fd = sys.stdin.fileno()
old_settings = termios.tcgetattr(fd)
tty.setraw(sys.stdin.fileno())
ch = sys.stdin.read(1)
Tam anlayamadım tabi :) Daha yeni öğrendiğim için bu kodlarla istediğime nasıl ulaşırım bilmiyorum.
Alıntı yapılan: dwain - 15 Ağustos 2009 - 16:09:48
Tam anlayamadım tabi :) Daha yeni öğrendiğim için bu kodlarla istediğime nasıl ulaşırım bilmiyorum.
Benim de python geçmişim sadece basit koşullardan ibaret ama, senin kodunu şu şekile getirebiliriz gibi, ancak bir yerde hata olursa bilmiyorum ne yapabileceğimi.
from __future__ import division
import sys
import tty, termios
def karakter_al():
fd = sys.stdin.fileno()
old_settings = termios.tcgetattr(fd)
tty.setraw(sys.stdin.fileno())
ch = sys.stdin.read(1)
return ch
def hesaplama():
while True:
print "Programi baslatmak icin 'b' tusuna basiniz "
baslat=karakter_al()
if baslat=="b":
while True:
islem=raw_input("Isleminizi seciniz (+,-,x,/)\nCikmak icin 'quit' yaziniz: ")
if islem == "quit":
print "Bye!"
sys.exit()
if not islem in "+-x/":
print "Gecersiz islem!"
continue
try:
s1, s2= input("Birinci sayiyi giriniz: "), input("Ikinci sayiyi giriniz: ")
sonuc=calc(islem,s1,s2)
print "%s %s %s = %s" % (s1, islem, s2, sonuc)
except NameError:
print "Sadece sayi girebilirsiniz."
except SyntaxError:
print "Sadece sayi girebilirsiniz."
except ValueError:
print "Sadece sayi girebilirsiniz."
else:
print "Sadece 'b' tusu aktiftir."
continue
def calc(opt, n1, n2):
if opt=="+":
return n1+n2
elif opt=="-":
return n1-n2
elif opt=="x":
return n1*n2
elif opt=="/":
return n1/n2
print "Hesaplama Programina Hosgeldiniz"
hesaplama()
Tekrar söylüyorum, doğaçlama yazdım, denemedim.
Ben denedim kodun son halini. Olan şu. Program çalışınca ilk olarak b tuşuna basıp başlatın diye mesaj çıkıyor. Basınca işlemi seçin diyor; ama orada takılıyor. Ne başka bir şey yapılabiliyor ne de quit yazıp çıkılabiliyor.
[IMG]http://img38.imageshack.us/img38/2193/resimb.png[/img]
Denedim,
karakter_al() fonksiyonunda ch'ı döndürmeden önce, yani return dan bir satır öncesine
termios.tcsetattr(fd, termios.TCSADRAIN, old_settings)
satırını ekleyince çalışıyor. Nasıl çalışığını bilmiyorum sanırım ama, sanırım tty.setraw(sys.stdin.fileno())
kodunda terminalin davranış şeklini değiştiriyor, önceki kodla eski haline getirmek gerekiyor terminali.
Hocam ellerine sağlık tam da istediğim gibi oldu gerçekten...
Şimdi bana bu kodların mantığını anlamak kalıyor. Şu anda hiçbirisini bilmiyorum... Şimdilik mantığını anlamaya hiç girme dersen girmem. Ama anlaşılması kolay ise ve açıklayabilirsen çok sevinirim.
Bulursan bana da anlat derim sadece, en ufak bir fikrim yok kodların ne yaptığı hakkında, google'dan buldum :).
Belki bulduğun yerden okuyarak bulabilirim :) Bir bakayım :)
Alıntı yapılan: dwain - 15 Ağustos 2009 - 21:10:09
Belki bulduğun yerden okuyarak bulabilirim :) Bir bakayım :)
"getch python" diye aramıştım :).