Pythonda Hata Alıyorum

Başlatan Kaleihan, 14 Haziran 2016 - 14:36:26

« önceki - sonraki »

0 Üyeler ve 1 Ziyaretçi konuyu incelemekte.

Kaleihan

Merhaba,
Şu sıralar python'a merak sardım. Daha dün başladım ama bir noktada hata ile karşılaşıyorum.
Programımız şu: #! /usr/bin/python3

ocak = mart = mayıs = temmuz = ağustos = ekim = aralık = 31
nisan = haziran = eylül = kasım = 30
subat = 28

birimfiyat = 0.79
aylıksarfiyat = input("Aylık sarfiyatınızı giriniz.")

dönem = input("""Hangi aya ait faturayı hesaplamak istersiniz?"
               (Lütfen ay adını tamamı küçük olacak
               şekilde giriniz)\n""")

ay = eval(dönem)

#fatura tutarı içi günlük sarfiyatı hesaplıyoruz
günlüksarfiyat = int(aylıksarfiyat) / ay

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="")

Benim sorum ise yukarıda
ay = eval(dönem) kısmında eval() fonksiyonu yerine int() fonksiyonu kullandığımda hata almam. Oradaki amacımız "dönem" i tam sayıya(integer) çevirmek değil mi? eval orada int() in yapamadığı neyi yapıyor? Teşekkürler.

bourbaki

#1
eval() komutu verinin işleme sokulmasını sağlıyor. Zaten kullandığın kaynakta da (istihza) açıklamış bunu.

Kaleihan

Öncelikle cevabınız için teşekkürler.
eval() fonksiyonunun görevini biliyorum (en azından bildiğimi sanıyorum :) ) benim sorum biraz daha  farklıydı :)

bourbaki

#3
İlk defa bir kodu inceliyorum ben de bir amatörüm yeni başladım. Saçma bir tespit olmuş olabilir öyleyse affola.
Amatör gözlemimle biraz daha inceledim. Programın ilk satırlarında ayların kaç gün olduğunu tanımlanmış zaten değil mi?
ocak = mart = mayıs = temmuz = ağustos = ekim = aralık = 31
nisan = haziran = eylül = kasım = 30
subat = 28



dönem = input("""Hangi aya ait faturayı hesaplamak istersiniz?"
               (Lütfen ay adını tamamı küçük olacak
               şekilde giriniz)\n""")

kısmında bizden zaten tanımlanmış bir veriyi seçmemiz isteniyor. Mesela "nisan" yazdığımızda önceden tanımlanmış olan bir şeyi devreye sokmamız gerekiyor. eval() önceden tanımlanmış olan "nisan"ı devreye sokuyor. int() kullanılırsa önceden belirlenmiş "nisan" devreye girmiyor. int() komutu "nisan"ı integer'e dönüştürmeye çalışıyor ve de başarısız oluyor.

Kaleihan

Evet demek istediğinizi anladım. Çok teşekkürler. Daha if, else, elif derslerini okumadım ama bence bu kısmı
if dönem == nisan gibisinden yaparsak daha az beyin yakar :)) Kodlar biraz uzun olur ama. O derse geldiğimde bu programı bir de if, else, elif ile yazmaya çalışır yapabilirsem burada paylaşırım :)

bourbaki

#5
Merhaba, ben de son iki gündür tekrar amaçlı bu örnekleri yapıyorum (if,else kısımlarını geçtim) eval()'i anlamadığım için ilk olarak öyle yapmayı düşündüm ama eval'i detaylı inceledikçe daha mantıklı olduğu anlaşılıyor. çünkü if ve elif kullanarak yapılırsa kod çok daha fazla uzayacak ve bu hem performansın düşmesine hem de kodların başkası tarafından incelenmesini zorlaşatıracaktır. neyse, iyi çalışmalar.  :)) :))

Kaleihan

#6
if, else olayını denedim ama beceremedim onunla daha sonra ilgilenirim. Bu başlık altında python eğitimim boyunca karşılaştığım hataları sormaya karar verdim. Şimdi yine bir kodda hata aldım. Bir hesap makinesi kodlarına bişiler ekledim. Aşşağıdaki kodda hatalı kısım break ve seçim kısmıymış. Pycharm öyle diyor. Lakin ben yine de bu kodun neresi hatalı çözemedim.
giriş = """
(1) topla
(2) çıkar
(3) çarp
(4) böl
(5) karesini hesapla
(6) kare kök hesapla
"""
print(giriş)

while True:

seçim = input("Yapmak istediğiniz işlemin numarasını giriniz (Çıkmak için q):  ")

if seçim == "q":
    print("Çıkılıyor...")
    break
elif seçim == "1":
    sayı1 = int(input("Toplama işlemi için ilk sayıyı giriniz: "))
    sayı2 = int(input("Toplama işlemi için ikinci sayıyı giriniz: "))
    print(sayı1 + sayı2)
elif seçim == "2":
    sayı1 = int(input("Çıkarma işlemi için ilk sayıyı girin: "))
    sayı2 = int(input("Çıkarma işlemi için ikinci sayıyı girin: "))
    print(sayı1 - sayı2)
elif seçim == "3":
    sayı1 = int(input("Çarpma işlemi için ilk sayıyı girin: "))
    sayı2 = int(input("Çarpma işlemi için ikinci sayıyı girin: "))
    print(sayı1 * sayı2)
elif seçim == "4":
    sayı1 = int(input("Bölme işlemi için ilk sayıyı giriniz: "))
    sayı2 = int(input("Bölme işlemi için ikinci sayıyı giriniz: "))
elif seçim == "5":
    sayı1 = int(input("Karesini almak istediğiniz sayıyı girin: "))
    print(sayı1 ** 2)
elif seçim == "6":
    sayı1 = int(input("Karekökünü almak istediğiniz sayıyı girin: "))
    print(sayı1 ** 0.5)
else:
    print("""Yanlış giriş. Lütfen aşağıdaki seçeneklerden birini giriniz.""", giriş)



Mesaj tekrarı yüzünden mesajınız birleştirildi. Bu mesajın gönderim tarihi : 15 Haziran 2016 - 21:44:50

Programın doğru yazılmış hali:
giriş = """
(1) topla
(2) çıkar
(3) çarp
(4) böl
(5) karesini hesapla
(6) kare kök hesapla
"""
print(giriş)
while True:
    a = input("Yapmak istediğiniz işlemin numarasını giriniz (Çıkmak için q):  ")
    if a == "q":
        print("Çıkılıyor")
        break
    if a == "1":
        sayı1 = int(input("Toplama işlemi için ilk sayıyı giriniz: "))
        sayı2 = int(input("Toplama işlemi için ikinci sayıyı giriniz: "))
        print(sayı1 + sayı2)
    elif a == "2":
        sayı1 = int(input("Çıkarma işlemi için ilk sayıyı girin: "))
        sayı2 = int(input("Çıkarma işlemi için ikinci sayıyı girin: "))
        print(sayı1 - sayı2)
    elif a == "3":
        sayı1 = int(input("Çarpma işlemi için ilk sayıyı girin: "))
        sayı2 = int(input("Çarpma işlemi için ikinci sayıyı girin: "))
        print(sayı1 * sayı2)
    elif a == "4":
        sayı1 = int(input("Bölme işlemi için ilk sayıyı giriniz: "))
        sayı2 = int(input("Bölme işlemi için ikinci sayıyı giriniz: "))
    elif a == "5":
        sayı1 = int(input("Karesini almak istediğiniz sayıyı girin: "))
        print(sayı1 ** 2)
    elif a == "6":
        sayı1 = int(input("Karekökünü almak istediğiniz sayıyı girin: "))
        print(sayı1 ** 0.5)
    elif a == "q":
        print("çıkılıyor")
        break
    else:
        print("""Yanlış giriş. Lütfen aşağıdaki seçeneklerden birini giriniz.""", giriş)