Neler yeni
MEGAForum - Teknoloji Forumu

Forum içeriğine ve tüm hizmetlerimize erişim sağlamak için foruma kayıt olmalı yada giriş yapmalısınız. Forum üye olmak tamamen ücretsizdir.

Python Giriş-çıkış işlemleri KULLANICIDAN GIRDI ALMAK

LeGoLaS

ikra
Onursal Üye
Konum
Türkiye
  • Üyelik Tarihi
    1 Ağu 2008
  • Mesajlar
    9,958
  • MFC Puanı
    2,986
KULLANICIDAN GIRDI ALMAK


Kayıtlı Python Dosyasını Çalıştırmak
Kullanıcı ile etkileşime geçmeden önce bir "Python dosyası nasıl oluşturulur?" ve "Komut satırında nasıl çalıştırılır?" bundan bahsetmeliyiz.
Python dosyası oluştururken ilk yapmamız gereken ilk satıra
#!/usr/bin/env python
yazmaktır. Bu komut yazacağımız kodların Python kodları olduğunu ve Python'un sistemdeki konumunu belirtir. Eğer istenilirse Python'nun yolu direkt olarak da belirtilebilir. Fakat her sistemde aynı olmaması ve kullanıcının tam olarak nerede olduğunu bilmemesinden dolayı "env" betiği kullanılmaktadır. Bu betik sayesinde sistemde Python nerede olursa olsun program onu kendisi bulur. Bu satırı yazdıktan sonra kodun devamını istediğimiz gibi şekillendirebiliriz.
Peki Python dosyasını kaydettik ama nasıl çalıştıracağız?
Bu sorunun cevabı oldukça basittir. Yapmanız gereken "uç birimde" oluşturduğunuz Python dosyasının bulunduğu dizine gitmek ve şu kod parçacığını yazmaktır.
python dosyaAdi.py

Kullanıcıdan Veri Almak
Bugüne kadar yaptığımız bütün örneklerde her zaman tek taraflı işlemler yaptık.Yani kullanıcı programa hiç müdahalede bulunamadı. Bu yazımızda kullanıcının Python ile nasıl etkileşime geçeceğinden bahsedeceğiz.
Python da kullanıcı ile etkileşime geçebilmek için input() ve raw_input()fonksiyonları kullanılır. Şimdi bu fonksiyonları ve aralarındaki temel farkları inceleyelim.

raw_input() Fonksiyonu
raw_input() fonksiyonu klavye aracılığı ile kullanıcıdan veri alınmasını sağlar. Daha iyi anlayabilmeniz için basit bir örnek ile açıklayalım.

[COLOR=white !important]?
1
2
3
4
5​
#!/usr/bin/env python
# -*- coding: utf-8 -*-

ad = raw_input("Lütfen adınızı giriniz:")
print ad​

[/COLOR]
Yukarıdaki programda ilk satırdaki kodun ne işe yaradığından ve kaydedilen bir Python dosyasının çalıştırılmasından yazının başında bahsetmiştik. Gelelim şuan bizi ilgilendiren kodlara; Gördüğünüz gibi raw_input() fonksiyonu içinde "Lütfen adınızı giriniz:" açıklaması yapılarak programın kullanıcıdan ne beklediği belirtilmiştir. Bu açıklamayı yapmak zorunda değilsiniz. Ama kullanıcının programın kendisinden ne beklediğini anlayabilmesi için yazmanız daha faydalı olacaktır. Burada raw_input() fonksiyonunun anlaşılabilmesi için basit bir örnek yapılmıştır.Şimdi ise kullanıcının girdiği iki sayıyı topladıktan sonra ekrana yazdıran programı yazmaya çalışalım.

[COLOR=white !important]?
1
2
3
4
5
6
7
8
9​
#!/usr/bin/env python
# -*- coding: utf-8 -*-

print "İki Sayıyı Toplayan Program"
sayi1 = raw_input("Birinci Sayıyı Giriniz:")
sayi2 = raw_input("İkinci Sayıyı Giriniz:");

toplam = sayi1+sayi2
print toplam​

[/COLOR]
Bu programı çalıştırdıktan sonra 10 ve 15 değerlerini girerseniz şu şekilde bir çıktı ile karşılaşacaksınız.

[COLOR=white !important]?
1
2
3
4​
İki Sayıyı Toplayan Program
Birinci Sayıyı Giriniz:10
İkinci Sayıyı Giriniz:15
1015​

[/COLOR]
Gördüğünüz gibi biz programın iki sayıyı toplamasını isterken;program iki sayıyı yan yana ekleyerek ekrana yazdı. Buradan da anlayacağınız gibi raw_input() kullanıcı tarafından girilen bütün değerleri karakter dizisi olarak alır. Yani Python için girilen iki değer sayı değildir.Bu yüzden de iki karakter dizisini uç uca eklemiş oldu. Programın kod yapısını şu şekilde değiştirelim.

[COLOR=white !important]?
1
2
3
4
5
6
7
8
9​
#!/usr/bin/env python
# -*- coding: utf-8 -*-

print "İki Sayıyı Toplayan Program"
sayi1 = raw_input("Birinci Sayıyı Giriniz:")
sayi2 = raw_input("İkinci Sayıyı Giriniz:");

toplam = int(sayi1)+int(sayi2)
print toplam​

[/COLOR]
Aynı değerleri bu program için girdiğinizde aşağıdaki gibi bir sonuçla karşılaşacaksınız.

[COLOR=white !important]?
1
2
3
4​
İki Sayıyı Toplayan Program
Birinci Sayıyı Giriniz:10
İkinci Sayıyı Giriniz:15
25​

[/COLOR]
Peki neden bu şekilde oldu? Eğer bu sorunun cevabı hakkında pek bir fikriniz yoksa;Değişkenler başlıklı yazıyı okumalısınız. Burada programın elinde bulunan karakter dizilerini sayıya çevirmesi için int() fonksiyonundan yararlandık. Şimdi bir de input() fonksiyonunu inceleyelim.
input() Fonksiyonu
Tıpkı raw_input() fonksiyonu gibi input() fonksiyonu da kullanıcıdan klavye aracılığıyla veri alınmasını sağlar. Az önce verdiğimiz örneği şimdi de input() ile yapmaya çalışalım.

[COLOR=white !important]?
1
2
3
4
5
6
7
8
9​
#!/usr/bin/env python
# -*- coding: utf-8 -*-

print "İki Sayıyı Toplayan Program"
sayi1 = input("Birinci Sayıyı Giriniz:")
sayi2 = input("İkinci Sayıyı Giriniz:");

toplam = sayi1+sayi2
print toplam​

[/COLOR]
Bu programı çalıştırdığınız da şu şekilde bir sonuç alacaksınız.

[COLOR=white !important]?
1
2
3
4​
İki Sayıyı Toplayan Program
Birinci Sayıyı Giriniz:10
İkinci Sayıyı Giriniz:15
25​

[/COLOR]
Gördüğünüz gibi herhangi bir dönüştürme işlemi yapmadan input() fonksiyonu ile aldığımız değerleri matematiksel olarak toplayabildik. Buradan da anlaşılacağı gibi input() fonksiyonu aldığı değeri karakter dizisi olarak tutmaz. Gönderdiğimiz değerleri sayı olarak tuttuğu için dönüştürme işlemi yapmadan sayıları toplayabildik. Gelin şimdi de şu örneği inceleyelim.

[COLOR=white !important]?
1
2
3​
#!/usr/bin/env python
# -*- coding: utf-8 -*-
kelime = input("Bir kelime giriniz:")​

[/COLOR]
Bu programı çalıştırdığınız da şu şekilde bir hata ile karşılaşacaksınız.

[COLOR=white !important]?
1
2
3
4
5​
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
File "<string>", line 1, in <module>
NameError: name 'kelime' is not defined
</module></string></module></stdin>​

[/COLOR]
Az önce de söylediğimiz gibi input() fonksiyonu ile gönderilen değerler karakter dizisi olarak saklanmaz. Eğer kod satırına şunu yazarsanız aynı hata ile karşılaştığınızı göreceksiniz.

[COLOR=white !important]?
1​
>>>kelime​

[/COLOR]
Bir de şu şekilde deneyelim;

[COLOR=white !important]?
1
2​
Bir kelime giriniz:"pythondersleri.com"
pythondersleri.com​

[/COLOR]
Bu şekilde denediğimiz zaman program herhangi bir hata vermeyecektir. Çünkü biz ona tanıdığı bir tür olan karakter dizisini gönderdik. Buradan anlayacağınız gibi raw_input() fonksiyonu kullanıcıdan aldığı değeri karakter dizisi olarak saklarken input() fonksiyonu kullanıcıdan komut bekler. input() fonksiyonun kullanıcıdan komut beklemesi bazı güvenlik sorunlarına sebep olmaktadır.
Güvenlik Sorunları
Yukarı da söylediğimiz gibi input() fonksiyonu kullanıcıdan komut bekler.

[COLOR=white !important]?
1
2
3
4
5​
#!/usr/bin/env python
# -*- coding: utf-8 -*-

sayi = input("Bir kelime giriniz:")
print sayi​

[/COLOR]
[COLOR=white !important]?
1
2​
Bir sayı giriniz:3*6
18​

[/COLOR]
Bu örnekte input() komutunun komut beklediğini çok net bir şekilde görebiliyorsunuz. Kullanıcının "3*6" olarak girdiği ifadeyi komut olarak gördü ve "*" operatörünü işleme soktu. input() fonksiyonunun bu özelliği yanında çok ciddi tehlikeler de getirmektedir. Kullanıcı programın istediği "sayi" yerine işletim sistemine ait komutları girerek programa istediği herhangi bir şeyi(dosya silmek,dosya içeriğini görmek vb.) yaptırabilir.
input() fonksiyonun güvenlik sorunlarından dolayı programcılar genellikle raw_input() fonksiyonunu kullanmayı tercih ederler. Zaten bu fonksiyon veri alış verişi ile ilgili her türlü isteğimizi karşılayacak özelliktedir.

Türkçe Karakter Kullanımı
Yukarıda yazdığımız programların hepsinde şu satırı gördünüz.

[COLOR=white !important]?
1​
# -*- coding: utf-8 -*- =>​

[/COLOR]
Python 2.x sürümü Türkçe karakterleri desteklememektedir. Eğer bu kodu yazmadan Türkçe karakter kullanırsanız program hata verecektir. Bu kodu yazarak kullandığımız karakter tipini Python'a tanıtmış oluruz.
 
Üst Alt