Gönderen Konu: Python kod: (Prompt character)  (Okunma sayısı 3476 defa)

0 Üye ve 1 Ziyaretçi konuyu incelemekte.

« : »
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()
Kaan Aslan
Mac OSX

« Yanıtla #1 : »
Denemedim ancak, internette şu şekilde bir kod buldum:
Kod: [Seç]
import sys, tty, termios
fd = sys.stdin.fileno()
old_settings = termios.tcgetattr(fd)
tty.setraw(sys.stdin.fileno())
ch = sys.stdin.read(1)
Kişisel Blogum: Çoğunlukla Zararsız - cogunluklazararsiz.org
--
Any intelligent fool can make things bigger, more complex, and more violent. It takes a touch of genius -and a lot of courage- to move in the opposite direction.

« Yanıtla #2 : »
Tam anlayamadım tabi :) Daha yeni öğrendiğim için bu kodlarla istediğime nasıl ulaşırım bilmiyorum.
Kaan Aslan
Mac OSX

« Yanıtla #3 : »
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.
Kod: [Seç]
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.
Kişisel Blogum: Çoğunlukla Zararsız - cogunluklazararsiz.org
--
Any intelligent fool can make things bigger, more complex, and more violent. It takes a touch of genius -and a lot of courage- to move in the opposite direction.

« Yanıtla #4 : »
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.


Model: Hp Compaq Mini 731ET
İşlemci: Intel® Atom™ CPU N270 @ 1.60GHz × 2
Grafik: Intel® 945GME x86/MMX/SSE2
Hafıza: 2,0 Gb İşlemci Tipi: 32-bit

« Yanıtla #5 : »
Denedim,

karakter_al() fonksiyonunda ch'ı döndürmeden önce, yani return dan bir satır öncesine
Kod: [Seç]
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
Kod: [Seç]
    tty.setraw(sys.stdin.fileno()) kodunda terminalin davranış şeklini değiştiriyor, önceki kodla eski haline getirmek gerekiyor terminali.
Kişisel Blogum: Çoğunlukla Zararsız - cogunluklazararsiz.org
--
Any intelligent fool can make things bigger, more complex, and more violent. It takes a touch of genius -and a lot of courage- to move in the opposite direction.

« Yanıtla #6 : »
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.
Kaan Aslan
Mac OSX

« Yanıtla #7 : »
Bulursan bana da anlat derim sadece, en ufak bir fikrim yok kodların ne yaptığı hakkında, google'dan buldum :).
Kişisel Blogum: Çoğunlukla Zararsız - cogunluklazararsiz.org
--
Any intelligent fool can make things bigger, more complex, and more violent. It takes a touch of genius -and a lot of courage- to move in the opposite direction.

« Yanıtla #8 : »
Belki bulduğun yerden okuyarak bulabilirim :) Bir bakayım :)
Kaan Aslan
Mac OSX

« Yanıtla #9 : »
Belki bulduğun yerden okuyarak bulabilirim :) Bir bakayım :)
"getch python" diye aramıştım :).
Kişisel Blogum: Çoğunlukla Zararsız - cogunluklazararsiz.org
--
Any intelligent fool can make things bigger, more complex, and more violent. It takes a touch of genius -and a lot of courage- to move in the opposite direction.