Fonksiyon içindeki değişkeni yazdırma

print ekranında fonksiyon içindeki değişkeni yazdıramıyorum. yardımcı olur musunuz?

import time
sayi = None

def bolenleriAl():
    global sayi
    liste = []
    sayi = int(input("Sayı giriniz:"))
    for i in range(1, sayi + 1):
        if sayi % i == 0:
            liste.append(i)
    return liste


while True:
    kapatma = int(input("devam etmek için bir sayıya basın\nçıkmak için 0:"))
    if kapatma == 0:
        time.sleep(5)
        exit()
    else:
        print(sayi, "'nın tam bölenleri", bolenleriAl())
"""`

Şurayı şu şekilde değiştirip çıktıyı atarmısınız ?

return liste,sayi
1 Beğeni

çıktı şu şekilde:

devam etmek için bir sayıya basın
çıkmak için 0:1
Sayı giriniz:20
None 'nın tam bölenleri ([1, 2, 4, 5, 10, 20], 20)
devam etmek için bir sayıya basın
çıkmak için 0:

Sorun sıralamadan kaynaklanıyor. Siz fonksiyonu çağırmadan önce print() içerisinde sayi değişkenini belirtmişsiniz. Bunun yerine şöyle yapın:

else:
    liste = bolenleriAl()
    print(sayi, "'nın tam bölenleri",liste)

print() fonksiyonunu şu şekilde daha iyi kullanabilirsiniz.
print(f"{sayi}'nın tam bölenleri {liste}") veya print("{}'nın tam bölenleri {}".format(sayi, liste))

1 Beğeni
import time

def bolenleriAl(sayi):
    liste = []
    for i in range(1, sayi + 1):
        if sayi % i == 0:
            liste.append(i)
    return liste


while True:
    kapatma = int(input("devam etmek için bir sayıya basın\nçıkmak için 0:"))
    if kapatma == 0:
        time.sleep(5)
        exit()
    else:
        sayi = int(input("Sayı giriniz:"))
        print(sayi, "'nın tam bölenleri", bolenleriAl(sayi))

sayi değişkenini fonksiyonun içinden yani local scope’dan çıkarıp, döngünün içinde tanımlayarak (bu da input oluyor) global scope’a taşıyıp, fonksiyona argüman şeklinde girerek kullanabiliriz.

Yalnız programa başlar başlamaz henüz hiçbir işlem yapmadan “devam etmek için…” şekilnde bir süreç yerine, işlem sonunda “tekrar işlem yapmak için sayı giriniz / çıkmak için 0 tuşlayınız” gibi bir tasarım daha kullanışlı olurdu ama tabii size kalmış.

1 Beğeni

Belirtilen iki yöntemle de sorunum çözüldü. Yardımlarınız ve değerli yorumlarınız için çok teşekkür ederim. Yorumlarınızı dikkate alacağım.

2 Beğeni