1. Duyuruyu Kapat

Python'da eval () kullanımı hakkında yardım

'Python' forumunda shine tarafından 24 Kasım 2016 tarihinde açılan konu

  1. shine

    shine Member

    Katılım:
    5 Aralık 2015
    Mesaj:
    23
    Beğeniler:
    0
    Şehir:
    Belirtilmemiş
    Merhaba arkadaşlar. Fırat ÖZGÜL-Python için Türkçe Kılavuz Sürüm 3 ile python öğrenmeye çalışıyorum. Etrafımda anlayan bilen hiçkimse yok ve ilgili kaynağın bir yerinde eval( ) kullanımı hakkında bayağı bir takıldım, biraz araştırdım ama orada takıldığım aynı örneği baz alarak anlatan bir yer bulamadım haliyle. Yardımcı olursanız sevinirim.

    Şimdi kitaptaki örnek kodlar şu şekilde

    Kod:
    #Her bir ayın kaç gün çektiğini tanımlıyoruz
    ocak = mart = mayıs = temmuz = ağustos = ekim = aralık = 31
    nisan = haziran = eylül = kasım = 30
    şubat = 28
    #Doğalgazın vergiler dahil metreküp fiyatı
    birimFiyat = 0.79
    #Kullanıcı ayda ne kadar doğalgaz tüketmiş?
    aylıkSarfiyat = input("Aylık doğalgaz sarfiyatınızı metreküp olarak giriniz: ")
    #Kullanıcı hangi aya ait faturasını öğrenmek istiyor?
    dönem = input("""Hangi aya ait faturayı hesaplamak istersiniz?
    (Lütfen ay adını tamamı küçük harf olacak şekilde giriniz)\n""")
    #Yukarıdaki input() fonksiyonundan gelen veriyi
    #Python'ın anlayabileceği bir biçime dönüştürüyoruz
    ay = eval(dönem)
    #Kullanıcının günlük doğalgaz sarfiyatı
    günlükSarfiyat = int(aylıkSarfiyat) / ay
    #Fatura tutarı
    fatura = birimFiyat * günlükSarfiyat * ay
    print("günlük sarfiyatınız: \t", günlükSarfiyat, " metreküp\n",
    "tahmini fatura tutarı: \t", fatura, " TL", sep="") 
    Şimdi daha zor olan benim burada takıldığım noktayı cümlelere dökebilmek. Ama kodu kısımlara ayırarak anlatmayı deneyeyim.

    Aşağıdaki kod parçasında; kitabın hemen önceki konularından öğrendiğim üzere input()'ta her ne kadar sayısal bir değer giriyor olsak da python bunu karakter dizisi olarak algılayacak. O nedenle normalde bunu ,int( ) ile çevireceğiz diye düşündüm.

    Kod:
    aylıkSarfiyat = input("Aylık doğalgaz sarfiyatınızı metreküp olarak giriniz: ") 
    Hemen alttaki kod parçasında da, input( )'a girilen değer bir "ay" ismi ama çektiği gün bakımından sayısal bir karşılığa sahip. Bu noktada dönem değişkenine, girilen ay'ın ismi mi, yoksa karşıladığı sayısal değer mi karakter dizisi olarak gönderilecek o kısımdan pek emin olamadım.

    Kod:
    dönem = input("""Hangi aya ait faturayı hesaplamak istersiniz?
    Ve asıl takıldığım nokta aşağıda

    Kod:
    ay = eval(dönem) 
    Kaynakta hemen üstteki kod için: "input() fonksiyonundan gelen veriyi #Python'ın anlayabileceği bir biçime dönüştürüyoruz" şeklinde bir açıklama yer alıyor.
    Anlamadığım nokta da burası. Şöyleki; Şimdi yukarıda 2 defa input( ) kullanmışız ama bunların değerlerini int( ) ile sayısal değere çevirmemişiz. Bu durumda eval() burada bu dönüşümü kendisi mi gerçekleştiriyor ve bunu yapması gerektiğini nereden biliyor. Çünkü başka örneklerde karakter dizisi olan bir değeri int( ) ile kendimiz çeviriyorduk.

    Ben bunu IDLE'da şöyle denemeye çalıştım. Yani

    Kod:
    ay = eval(dönem) 
    yerine

    Kod:
    ay = int(dönem) 
    olarak denedim. Düşüncem, girilen ay isminin gün değeri karşılığını ay değişkenine bir int. değer olarak aktarmak ve bunu aşağıdaki

    Kod:
    günlükSarfiyat = int(aylıkSarfiyat) / ay
    kısmında kullanmaktı ama hata veriyor.

    Özetle tüm kodlama içinde iki defa input( ) ile kullanıcıdan bilgi almışız ama kitapta öğretildiği şekliyle int( ) ile sayısal değere dönüştürmemişiz. Onun yerine eval( ) geçmiş. Ve bunun buradaki rolünü anlayamadım.

    Bilemiyorum derdimi anlatabildim mi?
     
  2. shine

    shine Member

    Katılım:
    5 Aralık 2015
    Mesaj:
    23
    Beğeniler:
    0
    Şehir:
    Belirtilmemiş
    Cvp: Python'da eval () kullanımı hakkında yardım

     
  3. kalisu

    kalisu Member

    Katılım:
    2 Kasım 2017
    Mesaj:
    9
    Beğeniler:
    1
    Cinsiyet:
    Kadın
    keşke bu kadar ilerleyebilsem o zaman yardımcı olurdum :)
     

Bu Sayfayı Paylaş

Share