Yazmış olduğum modülü kullanamıyorum

Bilişim giriş dersinde hocamız bir program yazın dedi ve bende hoca değerlendirme sistemi gibi bir şey yaptım. Fakat def sınırbelirle(): modülünü bir türlü etkinleştiremedim. Her şey tamam fakat bir türlü sınır belirle modülünü kullanamıyorum. Sizlerden yardım istiyorum.

Modülü şu şekilde kullanmak istiyorum: örneğin soru1’e kişi 10 dan büyük veya 1 den küçük değer girdi. Bu değeri kabul etmesin soruyu tekrar sorsun. Ne zaman ki 1 ile 10 arasında bir değer girerse diğer soruya geçsin ve onu sorsun.

def sınırBelirle():
    puan = (1 <= sayı  <= 10)
    if puan < 1 or puan > 10:
       print("Fazla ya da eksik puan girdiniz lütfen 1-10 arasında puan giriniz")
    return puan
def ortalama():
    toplam = soru1 + soru2 + soru3 + soru4 + soru5
    ortalama = toplam/5
    return ortalama

##############################################
print ("Ogretmen Degerlendirme Sistemine Hosgeldiniz")

import time
time.sleep(0.1)

isim = input(" Isminizi giriniz ")
soyisim = input(" Soy isminizi giriniz ")
print("Değerlendiren öğrencinin adı:", isim[0].upper() + isim [1:].lower(), "Soy adı:",soyisim[0].upper() + soyisim [1:].lower() )



print ("1. Jesmi ")
print ("2. Sait ")
print ("3. Abdullah ")
print ("4. Onur ")
print ("5. Tanju  ")

OgretmenSeciniz = int(input("Degerlendirmek Istediginiz Ogretmeni Seciniz:"))

import time
time.sleep(0.1)

if OgretmenSeciniz == 1:
    print("Seciminiz: Esma ")
elif OgretmenSeciniz == 2:
    print("Seciminiz: Sait ")
elif OgretmenSeciniz == 3:
    print("Seciminiz: Abdullah ")
elif OgretmenSeciniz == 4:
    print("Seciminiz: Onur ")
elif OgretmenSeciniz == 5:
    print("Seciminiz:  Tanju ")

if OgretmenSeciniz < 6 :
    print("Lutfen ekrana gelicek sorulari cevaplayiniz")
    soru1=int(input("Ders anlatımını puanlamak için 1-10 arasında bir sayı giriniz: "))
    import time
    time.sleep(0.5)

    soru2=int(input("Konuya hakimiyetini puanlamak için 1-10 arasında bir sayı giriniz: "))
    import time
    time.sleep(0.5)

    soru3=int(input("Sınıfa hakimiyetini puanlamak için 1-10 arasında bir sayı giriniz: "))
    import time
    time.sleep(0.5)

    soru4=int(input("Materiyal çeşitliliğini puanlamak için 1-10 arasında bir sayı giriniz: "))
    import time
    time.sleep(0.5)

    soru5=int(input("Öğretmen öğrenci ilişkisini puanlamak için 1-10 arasında bir sayı giriniz: "))

else:
    print("Lutfen 5 ile 1 arasında bir sayı giriniz!!")
    input()


ort = ortalama()
toplampuan = soru1 + soru2 +soru3 + soru4 + soru5

if soru1 < 1 or soru1 > 10 or soru2 < 1 or soru2 > 10 or soru3 < 1 or soru3 > 10 or soru4 < 1 or soru4 >10 or soru5 < 1 or soru5 > 10 :
    print ( "Fazla ya da eksik puan girdiniz lütfen 1 ile 10 arasında puan giriniz")
else:
    print ("Hocanin ortalamasi 10 üzerinden ",ort,"puandir.")
    if(1<=ort<2):
        print("Kendini Gelistirmesi Gereken Bir Hoca" , 1*"*")
    elif(2<=ort<3):
        print("Kendini Gelistirmesi Gereken Bir Hoca" , 2*"*")
    elif(3<=ort<4):
        print("Kendini Gelistirmesi Gereken Bir Hoca" , 3*"*")
    elif(4<=ort<5):
        print("Iyi Bir Hoca" , 4*"*")
    elif(5<=ort<6):
        print("Iyi Bir  Hoca" , 5*"*")
    elif(6<=ort<7):
        print("Iyi Bir  Hoca" , 6*"*")
    elif(7<=ort<8):
        print("Yetenekli Bir  Hoca" , 7*"*")
    elif(8<=ort<9):
        print("Yetenekli Bir  Hoca" , 8*"*")
    elif(9<=ort<10):
        print("Yetenekli Bir  Hoca" , 9*"*")
    else:
        print("Mükkemmel bir hocadır", 10*"*")


input()

Lütfen mesajınızı bu gönderiye göre düzenleyin ki kodunuzu rahatlıkla kopyalayıp üzerinde oynama yapabilelim:

1 Beğeni

Ekrem bey yaptım dediğiniz gibi.

Döngüler ve sözlükler konusunda bilginiz var mı? Eğer sizin için uygunsa onlar ile kodunuzu yazmak çok daha kolay olacaktır.

1 Beğeni

Ya açıkcası hocamız genel olarak anlattığı komutlar if , for , while , random vs giriş seviye komutlarla bir şeyler yaptık. Zaten yazılımcı değilim. Gemi makine mühendisliği okuyorum. O yüzden pek yazılımla ilgili bilgim yok. Siz dilerseniz dediğiniz şekilde yapabiliriz.

for döngüsü kullanacağım o zaman.

1 Beğeni

Bekliyorum sizin kodunuzu.

Kodda anlayamadığınız bir yer olursa sorun lütfen:

import time


print ("Ogretmen Degerlendirme Sistemine Hosgeldiniz")


time.sleep(0.1)

isim = input(" Isminizi giriniz ")
soyisim = input(" Soy isminizi giriniz ")
print("Değerlendiren öğrencinin adı:", isim.capitalize(), ", Soy adı:", soyisim.capitalize())

print ("""1. Jesmi 
2. Sait 
3. Abdullah 
4. Onur 
5. Tanju  """)

OgretmenSeciniz = int(input("Degerlendirmek Istediginiz Ogretmeni Seciniz:"))

time.sleep(0.1)

if OgretmenSeciniz == 1:
    print("Seciminiz: Esma ")
elif OgretmenSeciniz == 2:
    print("Seciminiz: Sait ")
elif OgretmenSeciniz == 3:
    print("Seciminiz: Abdullah ")
elif OgretmenSeciniz == 4:
    print("Seciminiz: Onur ")
elif OgretmenSeciniz == 5:
    print("Seciminiz:  Tanju ")

cevaplar = []

if OgretmenSeciniz < 6 :
    print("Lutfen ekrana gelicek sorulari cevaplayiniz")
    cevaplar.append(int(input("Ders anlatımını puanlamak için 1-10 arasında bir sayı giriniz: ")))
    time.sleep(0.5)

    cevaplar.append(int(input("Konuya hakimiyetini puanlamak için 1-10 arasında bir sayı giriniz: ")))

    time.sleep(0.5)
    cevaplar.append(int(input("Sınıfa hakimiyetini puanlamak için 1-10 arasında bir sayı giriniz: ")))
    time.sleep(0.5)

    cevaplar.append(int(input("Materiyal çeşitliliğini puanlamak için 1-10 arasında bir sayı giriniz: ")))
    time.sleep(0.5)

    cevaplar.append(int(input("Öğretmen öğrenci ilişkisini puanlamak için 1-10 arasında bir sayı giriniz: ")))

else:
    print("Lutfen 5 ile 1 arasında bir sayı giriniz!!")
    input()

toplampuan = sum(cevaplar)
ort = toplampuan / 5


girdi_hatalı = False
for cevap in cevaplar:
    if not 1<=cevap<=10:
        print ( "Fazla ya da eksik puan girdiniz lütfen 1 ile 10 arasında puan giriniz")
        girdi_hatalı = True
        break
    
if not girdi_hatalı:
    print ("Hocanin ortalamasi 10 üzerinden ",ort,"puandir.")
    if ort < 4:
        print("Kendini Gelistirmesi Gereken Bir Hoca" , int(ort)*"*")

    elif ort < 7:
        print("Iyi Bir Hoca" , int(ort)*"*")

    elif ort < 10:
        print("Yetenekli Bir  Hoca" , int(ort)*"*")

    else:
        print("Mükkemmel bir hocadır", 10*"*")


input()

1 Beğeni

Eğer sınırBelirle fonksiyonunu başka bir modülde yazıp kullanmanız ödevin bir parçası ise o şekilde de yapabiliriz.

1 Beğeni

Hocamızın istediği bu def komutunu kullanabilmek. Şöyle söyleyeyim son yaptığı derste sayı sıkıştırma diye bir yazılım oluşturdu ve bir çok def komutu vardı. Ve projenin ders ortalamasına etkisi %90. %10 u vize ve finallerden gelecekmiş dediler.

Tamam, şimdi iki tane python dosyamız olacak. Birine asıl programımızı yazacağız, diğerinde ise sınırBelirle fonksiyonumuz olacak. Dosyalarımız main.py ve module.py olsun:

# module.py

def sınırBelirle(sayı):
    if 1<=sayı<=10: return True
    return False

# main.py

import time
import module # eğer fonksiyonumuzun olduğu dosyayı import etmez isek onu kullanamayız

print ("Ogretmen Degerlendirme Sistemine Hosgeldiniz")


time.sleep(0.1)

isim = input(" Isminizi giriniz ")
soyisim = input(" Soy isminizi giriniz ")
print("Değerlendiren öğrencinin adı:", isim.capitalize(), ", Soy adı:", soyisim.capitalize())

print ("""1. Jesmi 
2. Sait 
3. Abdullah 
4. Onur 
5. Tanju  """)

OgretmenSeciniz = int(input("Degerlendirmek Istediginiz Ogretmeni Seciniz:"))

time.sleep(0.1)

if OgretmenSeciniz == 1:
    print("Seciminiz: Esma ")
elif OgretmenSeciniz == 2:
    print("Seciminiz: Sait ")
elif OgretmenSeciniz == 3:
    print("Seciminiz: Abdullah ")
elif OgretmenSeciniz == 4:
    print("Seciminiz: Onur ")
elif OgretmenSeciniz == 5:
    print("Seciminiz:  Tanju ")

cevaplar = []

if OgretmenSeciniz < 6 :
    print("Lutfen ekrana gelicek sorulari cevaplayiniz")
    cevaplar.append(int(input("Ders anlatımını puanlamak için 1-10 arasında bir sayı giriniz: ")))
    time.sleep(0.5)

    cevaplar.append(int(input("Konuya hakimiyetini puanlamak için 1-10 arasında bir sayı giriniz: ")))

    time.sleep(0.5)
    cevaplar.append(int(input("Sınıfa hakimiyetini puanlamak için 1-10 arasında bir sayı giriniz: ")))
    time.sleep(0.5)

    cevaplar.append(int(input("Materiyal çeşitliliğini puanlamak için 1-10 arasında bir sayı giriniz: ")))
    time.sleep(0.5)

    cevaplar.append(int(input("Öğretmen öğrenci ilişkisini puanlamak için 1-10 arasında bir sayı giriniz: ")))

else:
    print("Lutfen 5 ile 1 arasında bir sayı giriniz!!")
    input()

toplampuan = sum(cevaplar) # gömülü bir fonksiyon olan 'sum' kendisine verilen listenib bütün elemanlarının toplamını döndürüyor
ort = toplampuan / 5


girdi_hatalı = False
for cevap in cevaplar:
    if not module.sınırBelirle(cevap): # aynı 'time.sleep' de yaptığımız gibi fonksiyonumuza modülümüzün ismi üzerinden erişiyoruz
        print ( "Fazla ya da eksik puan girdiniz lütfen 1 ile 10 arasında puan giriniz")
        girdi_hatalı = True
        break
    
if not girdi_hatalı:
    print ("Hocanin ortalamasi 10 üzerinden ",ort,"puandir.")
    if ort < 4:
        print("Kendini Gelistirmesi Gereken Bir Hoca" , int(ort)*"*")

    elif ort < 7:
        print("Iyi Bir Hoca" , int(ort)*"*")

    elif ort < 10:
        print("Yetenekli Bir  Hoca" , int(ort)*"*")

    else:
        print("Mükkemmel bir hocadır", 10*"*")


input()

İlk attığınız kodda time modülünü defalalarca import etmiştiniz. Oysa ki modüllerimizi bir defa içe aktarmamız yeterli. Bu yüzden içe aktarma işlemlerini çoğunlukla programımızın en başında yaparız.

Modüller ve fonksiyonlar hakkında daha fazla bilgi için bu linklere bakabilirsiniz:
https://python-istihza.yazbel.com/moduller.html
https://python-istihza.yazbel.com/fonksiyonlar.html

1 Beğeni

Ekrem bey benim bilgisayarımdaki python da import modül hata veriyor onu sildiğim takdirde düzgün çalışıyor.

Ve son olarak çok çok çok teşekkür ederim. Gerçekten ne desem bilemiyorum kaç gündür uğraşıyordum.

Çok özür dilerim, söylemeyi unuttum. İki programınızın da aynı dizinde olması lazım. Yani eğer main.py dosyanız masaüstünde ise module.py dosyanızın da masaüstünde olması lazım. Eğer aynı klasörde oldukları halde hata almaya devam ediyorsanız module.py'ye başka bir isim vermeyi deneyebilirsiniz.

1 Beğeni

Ekrem bey bu append komutunu açıklayabilir misiniz? cevaplar.append ne işe yarar ne diye oraya koydun oradaki işlevi ne diye sorarsa hoca nasıl bir cevap vermeliyim?

Burada çok güzel anlatılmışlar:
https://python-istihza.yazbel.com/listeler_ve_demetler.html#listeler
https://python-istihza.yazbel.com/listelerin_ve_demetlerin_metotlari.html#append

Kısaca açıklamak gerekirse cevaplar listemizin sonuna eleman eklememizi sağlıyor.

1 Beğeni

Bu listedeki elemanlar bizim girdiğimiz değerler oluyor ve bu değerleri toplayıp bölünce de ortalamayı buluyoruz değil mi ?

Evet, verdiğim linklerde ayrıntılı bir şekilde ve örneklerle anlatılmış, vaktiniz olduğunda bakabilirsiniz.

sum fonksiyonu da bu toplama işlemini yapıyor.

1 Beğeni

Tekrardan çok teşekkür ederim. İyi geceler dilerim.

Ekrem bey

Burda girdi_hatali neden false’a eşit oldu bu kod dizisinin işlevini anlatabilir misiniz?

Buradaki girdi_hatalı değişkenimiz kullanıcının girdiği değerlerin hatalı olup olmadığını saklıyor. En başta False yapıyoruz. Daha sonra teker teker bütün cevapları for cevap in cevaplar: kısmı ile kontrol ediyoruz. Eğer cevaplardan biri uygun değilse

        print ( "Fazla ya da eksik puan girdiniz lütfen 1 ile 10 arasında puan giriniz")
        girdi_hatalı = True
        break

Kısmı çalışıyor. girdi_hatalı değişkeni True yapılıyor, çünkü artık kullanıcıdan aldığımız verinin istediğimiz kurallara uymadığını biliyoruz. Daha sonra da break deyimi ile döngümüz kırılıyor.

if not girdi_hatalı: kısmına geldiğimizde eğer girdi_hatalı değişkeninin değeri False ise if bloğunun içindeki kodlar çalışıyor, eğer girdi_hatalı değişkeninin değeri True ise çalışmıyor. not ifadesi zaten True'yu False'a , False'ı da True'ya dönüştürür. En başta girdi_hatalı değişkenini False yapıyoruz çünkü eğer girdilerde bir problem yoksa değeri False kalmaya devam edecek, böylece if not girdi_hatalı: şartı sağlanmış olacak. Eğer bir hata varsa True olacak ve if not girdi_hatalı: şartı sağlanmamış olacak.