Merhaba,
Tek yani esnek parametre kullanarak, döngü yoluyla 0’a basıncaya kadar aldığı değerleri toplayıp döndüren bir fonksiyon yazmaya çalışmaktayım, birçok biçimde denedim ancak sağlıklı bir düzen sağlayamadım.
Örneğin;
def toplamaYap():
while True:
sayi = list()
if sayi != 0:
sayi.append(int(input("Sayı giriniz: ")))
else:
print("Çıkış yapıldı.")
break
return tuple(sayi)
def sonucuVer(*sayilar):
toplam = sum(toplamaYap())
return toplam
islem = sonucuVer(toplamaYap())
print(islem)
Başka bir biçimde daha denedim;
def toplamaYap():
while True:
sayi = int(input("Sayı giriniz: "))
if sayi != 0:
def sonucuVer(*sayilar):
sonuc = 0
for i in sayilar:
sonuc += i
return sonuc
islem = toplamaYap()
print(islem)
Geriye dönüp aktaramadığım birçok yöntemle daha denedim. İlgili olarak bir fikir verip yardımcı olabilirseniz sevinirim.
Teşekkürler.
Bu örnekte parametreye pek ihtiyacınız yok aslında. Yazdığınız fonksiyonlar sanki yapmak istediğiniz işlemi zorlaştırmış gibi geldi bana. Aşağıdaki fonksiyonun işlevine benzeyen bir fonksiyon yazmaya çalışmıyor musunuz?
def topla():
toplam = 0
while True:
try:
veri_al = int(input("Sayi: "))
except ValueError:
continue
if veri_al != 0:
toplam += veri_al
else:
return toplam
print(topla())
Evet aklımdaki işlem tam olarak bu işlevde. Ancak ben özellikle “*sayilar” biçimindeki bir parametre üzerinden bir algoritma oluşturmak istiyordum. Bunun, belki özyineli fonksiyon şeklinde olabileceğini sanıyorum ama dediğin gibi oldukça da karıştı. İlgine teşekkürler.
Ben de bir türlü hem *sayilar’ı parametre olarak sağlayıp hem de parametresiz bir fonksiyonun içinde kurulacak bir döngüyle veri aktarmayı veya aynı işlevde başka bir düzeni şimdilik gerçekleyemedim işte.
Bu örnek için parametre alan bir fonksiyona ve bu parametre alan fonksiyon içindeki başka bir fonksiyona ihtiyacınız yok. *args veya **kwargs kullanmanızın daha uygun olacağı başka örnekler düşünelim isterseniz.
Mesela, burada input ile kullanıcıdan sayı girmesini istiyorsunuz. Bu input'u kaldırıp, sayıları parametre olarak verebilirsiniz. Ve bu örnekte özyineleme kullanabilirsiniz.
Örnek:
def topla(*args):
return args[0] + topla(*args[1:]) if args and args[0] else 0
Bu fonksiyon, parametreler içinde 0'ı görene kadar parametreleri toplar.