Ubuntu Türkiye

Yazılım => Programlama => Konuyu başlatan: dwain - 15 Ağustos 2009 - 07:56:16

Başlık: Python kod: (Prompt character)
Gönderen: dwain - 15 Ağustos 2009 - 07:56:16
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()
Başlık: Ynt: Python kod: (Prompt character)
Gönderen: utdmr - 15 Ağustos 2009 - 11:26:41
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)
Başlık: Ynt: Python kod: (Prompt character)
Gönderen: 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.
Başlık: Ynt: Python kod: (Prompt character)
Gönderen: utdmr - 15 Ağustos 2009 - 17:27:03
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.
Başlık: Ynt: Python kod: (Prompt character)
Gönderen: gkhnt - 15 Ağustos 2009 - 18:32:44
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]
Başlık: Ynt: Python kod: (Prompt character)
Gönderen: utdmr - 15 Ağustos 2009 - 18:58:53
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.
Başlık: Ynt: Python kod: (Prompt character)
Gönderen: dwain - 15 Ağustos 2009 - 20:59:05
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.
Başlık: Ynt: Python kod: (Prompt character)
Gönderen: utdmr - 15 Ağustos 2009 - 21:05:08
Bulursan bana da anlat derim sadece, en ufak bir fikrim yok kodların ne yaptığı hakkında, google'dan buldum :).
Başlık: Ynt: Python kod: (Prompt character)
Gönderen: dwain - 15 Ağustos 2009 - 21:10:09
Belki bulduğun yerden okuyarak bulabilirim :) Bir bakayım :)
Başlık: Ynt: Python kod: (Prompt character)
Gönderen: utdmr - 15 Ağustos 2009 - 22:11:30
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 :).