Yazdığım Fonksiyon içinde While döngüsü kullanımı hakkında

Herkese sağlıklı günler.

Fonksiyon konusunu incelerken While döngüsünü öğrenirken yaptığım kullanıcıdan alınan sayıların toplamını veren kodları bir fonksiyonun içinde tanımlayıp farklı yerlerde kullanmak gibi fonksiyonun temel kullanım amacını sağlamak istedim ama fonksiyon bir kere çalışıp durduğundan while ile ikinci inputu almayı beceremedim. Bunu nasıl yapabilirim. Teşekkürler.



total = 0


def sum_numbers(number):
    global total
    while True:
        number = int(input("Enter number : "))
        if number > 0:
            total = total + number
            return total
        else:
            break


print(sum_numbers(total))

Fonksiyonu else bloğunda değer döndürecek şekilde değiştirebilirsiniz:

total = 0

def sum_numbers(number):
    global total
    while True:
        number = int(input("Enter number : "))
        if number > 0:
            total = total + number
        else:
            return total


print(sum_numbers(total))

Fonksiyonu bir generator'a çevirebilirsiniz:

total = 0

def sum_numbers(number):
    global total
    while True:
        number = int(input("Enter number : "))
        if number > 0:
            total = total + number
            yield total
        else:
            break

print(*sum_numbers(total))

Ya da amacınız sadece iki kere input almaksa:

total = 0

def sum_numbers(number):
    global total
    
    for i in range(2):
        number = int(input("Enter number : "))
        if number > 0:
            total = total + number
        else:
            break
        
    return total


print(sum_numbers(total))

Daha kullanışlı ve mantıklı yöntemler var gibi geliyor fakat bu tip bir problemle pek karşılaşmadığım için benim aklıma sadece bunlar geldi.

3 Beğeni

Çok teşekkür ederim. Normalde PyCharm kullanıyorum Fakat Jupyter notebook kullanmaya başladım Alıştırma yapıp Not alabilmek için 1. yazdığınız kodu ben jupyterde yazdığımı hatırlıyorum , fakat hata vermişti. Bende neden olmuyor diye kafayı sıyırmıştım. Yaptığım hata fonksiyon öncesinde tanımladığım değişkenin olduğu cell - hücreyi mutlaka shift-enter ile çalıştırmam akabinde fonksiyonun olduğu satırı çalıştırmam gerekiyormuş. Bu sayede bunuda öğrendim. Generatör konusunu 1 kere okumuştum ama alıştırma yapmadığımdan konuyla ilgili unutmuşum. For döngüsü ile ilgili örneğinizi de biliyorum. Yardımınız için Çok teşekkür ederim.

Sn.@DrShahinstein Bir şey sormak istiyorum .
“”"
global deyimi her ne kadar ilk bakışta çok faydalı bir araçmış gibi görünse de aslında programlarımızda genellikle bu deyimi kullanmaktan kaçınmamız iyi bir fikir olacaktır. Çünkü bu deyim aslında global alanı kirletmemize neden oluyor. Global değişkenlerin lokal isim alanlarında değişikliğe uğratılması, eğer dikkatsiz davranırsanız programlarınızın hatalı çalışmasına yol açabilir. “”"
Bu kod yapısında global kullanmadan değişkenleri nasıl oluşturabiliriz. Ben türlü varyasyonlar denedim ama olmadı var mı başka bir yöntem acaba. Yazbel de okuduğum üstteki ifadeye göre sıkıntı çıkarabilirmiş.

>>> def sum_numbers():
    total = 0
    while True:
        number = int(input("Enter number : "))
        if number > 0:
            total = total + number
        else:
            return total

        
>>> print(sum_numbers())
Enter number : 1
Enter number : 2
Enter number : 3
Enter number : 4
Enter number : 0
10
>>> 

sum_numbers’ın aldığı number parametresi kullanılmıyordu, total değişkeni de fonksiyonun içine alınabilir.

2 Beğeni

Ekrem Hocam anladığım kadarıyla hatam inputdan gelen değeri hep fonksiyona argüman olarak vermek zorundaymışım gibi düşünmekmiş. Tüm denemelerimde de bu hataya düşmüşüm. Şimdi oturdu taşlar yerine. Çok teşekkür ederim.

Sn @EkremDincel Yukarda açıkladığınız mantıkla input ile kullanıcının girdiği kelimelerin tersini yazan ve girdiği input’un uzunluğu 1 karakter olmadığı müddetçe çalışan bir fonksiyon yazdım. Fakat while döngüsü bu şekilde yine 1 kere çalışıyor ve duruyor. Burada yapılan hata nedir. Teşekkür ederim.

def reverse():
    while True:

        string = input("Enter The String : ")
        if len(string) == 1:
            return "çıkılıyor"
            break
        else:           
            new_string = string[::-1]
            return new_string
            
print(reverse())

Aşağıdaki gibi yöntem izledim oda fonksiyonu değil while ile inputu çalıştırıyor. İkisinin ortsını bulamadım bir türlü…

def reverse():
    while True:

        string = input("Enter The String : ")
        new_string = ""
        if len(string) > 1:
            new_string = string[::-1]

        else:
            return new_string


print(reverse())

Fonksiyon çalıştığı sürece kullanıcıdan bir karakter dizisi alınacak ve o karakter dizisinin uzunluğu 1 olmadıkça karakter dizisi ters çevrilip terminale bastırılacak doğru mu ?
Birincisi, karakter dizisinin uzunluğunun 1’e eşit olup olmamasını kontrol etmek biraz saçma, kullanıcı hiçbir şey girmezse ne olacak ? Karakter dizisinin uzunluğunun 1’den büyük olup olmadığını kontrol etmek daha mantıklı.
İkincisi, sizin new_string’i terminale bastırmanız için return deyimine ihtiyacınız yok. print() fonksiyonunu neden kullanmıyorsunuz ? Ayrıca gördüğüm kadarıyla siz return deyiminin fonksiyonu durduğunu anlamamışsınız sanırım, aşağıdaki kodları görünce ben bunu düşündüm.

return deyimi fonksiyonu durdurur ve dolayısıyla eğer bir değeri return ettikten sonra kod yazmaya devam ederseniz boşuna yazmış olursunuz.
Kısacası new_string’i return deyimi fonksiyonu durdurduğu için return deyiminden ziyade print() fonksiyonuyla terminale bastırmaya çalışmalısınız.

Örnek kod:

def reverse():
    while True:
        string = input("Enter The String : ")
        if not len(string) > 1:
            return "çıkılıyor"
     # Burada bir `else` bloğuna ihtiyaç yok 
     # çünkü `if` bloğu çalışacak olursa zaten fonksiyon duracak.
     # Çalışmazsa da ters çevrilmiş string terminale bastırılacak.

        new_string = string[::-1]
        print(new_string)
     # Siz burada `new_string`i terminalde gösterebilmek için
     # `return` deyimini kullanmıştınız fakat artık bu iş için `return` 
     # yerine print() fonksiyonunu kullanıyoruz. Bu sayede 
     # `new_string`i terminalde göstermeye çalışırken 
     # fonksiyonu durdurmamış olacaksınız.
print(reverse())
2 Beğeni

Zaman ayırıp ayrıntılı açıklama yaptığınız için çok teşekkür ederim. Fonksiyonlarda return kullanımına dair örneklemeler yaptığım için bu örnekte de aslında 2. aşamada peşi sıra girilen 2 yada 3 stringi bir listeye atıp listenin son halini return ile alıp programın başka bir yerinde kullanma amacım olduğu için normalde print fonksiyonunu kullanmadım. Dediğinizde haklısınız return deyiminin programı while içinde dahi durdurduğunu bilmiyordum. Aslında okuduğum konularda bu detay mutlaka geçmiştir ama pratik yapmayıp okumakla program yazma öğrenilmiyor… . Zamanınızı aldım. Tekrar teşekkürler