Çözüldü Python sayıyı basamaklarına ayırma

Bu konu çözüldü olarak işaretlenmiştir. Çözülmediğini düşünüyorsanız konuyu rapor edebilirsiniz.
Çözüm
Merhaba, kodun mantığını biliyorsanız anlatabilir misiniz?
Kullanıcıdan input alıp int() ile sayıya çeviriyoruz. Sayımız 5628 olsun. Bu sayı 4 basamaklı olduğu için 10 tabanında logaritması 3,75 küsürlü bir sayı olacak.(n basamaklı her sayının 10 tabanında logaritması n - 1 küsürlü oluyor.) 3,75 küsürlü sayıyı math.floor() fonksiyonu ile aşağıya yuvarlıyoruz ve 3 oluyor, bunu da us değişkenine kaydediyoruz. Daha sonra üs, 0'dan küçük olana kadar sonsuz bir döngü döndürüyoruz, ne zaman 0'dan küçük olacağına birazdan geleceğiz. Math.pow() fonksiyonu ile az önce bulduğumuz üs kadar 10'un üssünü alıyoruz ve bunu basamak isimli bir değişkene atıyoruz.(Yani elimizde 10^3'ten 1000 var.) Sayıyı // işareti ile basamak değişkenimize(1000) tam bölüyoruz ve sayımız 5628 olduğu için sonuç 5 oluyor.(// tam bölüm işaretidir.) Daha sonra çıktıda basamağı da görmek istediğimiz için buluduğumuz basamağı tekrar basamak değişkeni ile çarpıyoruz. us değişkenini 1 eksiltiyoruz çünkü bir sonraki döngüde 100'ler basamağına geçeceğiz, ayrıca 100'ler basamağına geçebilmemiz için sayımızın 100'lük kısmını %(modulo) operatörü ile alıyoruz.(% işareti bölümden kalanı veriyor yani.) Başa dönüp tekrar ediyoruz. Birler basamağından sonra us değişkeni 0'dan küçük oluyor.
Keşke aynı konuyu tekrar açmasaydınız. Ben biraz farklı anlamışım, diğer konuda istediğinizin o olduğunu düşündüğüm kodu paylaştım.

Kod:
num = [int(x) for x in input("Lütfen bir sayı giriniz: ")]
size = len(num)

for i in num:
    print(i * 10**(size - i), end=".\n")
Maşallah. İkinci mesajınızda hırsızlığa başlamışsınız.

Aşağıdaki kod pozitif bir sayı girildiği sürece çalışıyor ama girilen sayı belirli limitleri aşarsa problem çıkabilir. Bu yazdığım kodun da doğruluğu tartışılabilir.
İstenen şey pratikte bir işe yaramayacak, kod yazmak öğrenilsin diye verilmiş boş bir şey. Milyon farklı yolla yapılabilir.

Pozitif sayıların girileceği varsayılarak math.floor() yerine direkt int() ve math.pow() yerine ** operatörünü kullanırdım.

Döngüde işlem yapıp değiştirmeyi pek sevmiyorum ben.
 
Merhaba, kodun mantığını biliyorsanız anlatabilir misiniz?
Kullanıcıdan input alıp int() ile sayıya çeviriyoruz. Sayımız 5628 olsun. Bu sayı 4 basamaklı olduğu için 10 tabanında logaritması 3,75 küsürlü bir sayı olacak.(n basamaklı her sayının 10 tabanında logaritması n - 1 küsürlü oluyor.) 3,75 küsürlü sayıyı math.floor() fonksiyonu ile aşağıya yuvarlıyoruz ve 3 oluyor, bunu da us değişkenine kaydediyoruz. Daha sonra üs, 0'dan küçük olana kadar sonsuz bir döngü döndürüyoruz, ne zaman 0'dan küçük olacağına birazdan geleceğiz. Math.pow() fonksiyonu ile az önce bulduğumuz üs kadar 10'un üssünü alıyoruz ve bunu basamak isimli bir değişkene atıyoruz.(Yani elimizde 10^3'ten 1000 var.) Sayıyı // işareti ile basamak değişkenimize(1000) tam bölüyoruz ve sayımız 5628 olduğu için sonuç 5 oluyor.(// tam bölüm işaretidir.) Daha sonra çıktıda basamağı da görmek istediğimiz için buluduğumuz basamağı tekrar basamak değişkeni ile çarpıyoruz. us değişkenini 1 eksiltiyoruz çünkü bir sonraki döngüde 100'ler basamağına geçeceğiz, ayrıca 100'ler basamağına geçebilmemiz için sayımızın 100'lük kısmını %(modulo) operatörü ile alıyoruz.(% işareti bölümden kalanı veriyor yani.) Başa dönüp tekrar ediyoruz. Birler basamağından sonra us değişkeni 0'dan küçük oluyor.
 
Son düzenleme:
Çözüm
Kullanıcıdan input alıp int() ile sayıya çeviriyoruz. Sayımız 5628 olsun. Bu sayı 4 basamaklı olduğu için 10 tabanında logaritması 3,75 küsürlü bir sayı olacak.(n basamaklı her sayının 10 tabanında logaritması n - 1 oluyor.) 3,75 küsürlü sayıyı math.floor() fonksiyonu ile aşağıya yuvarlıyoruz ve 3 oluyor, bunu da us değişkenine kaydediyoruz. Daha sonra sayı 0 olana kadar sonsuz bir döngü döndürüyoruz, sayının ne zaman 0 olacağına birazdan geleceğiz. Math.pow() fonksiyonu ile az önce bulduğumuz üs kadar 10'un üssünü alıyoruz ve bunu basamak isimli bir değişkene atıyoruz.(Yani elimizde 10^3'ten 1000 var.) Sayıyı // işareti ile basamak değişkenimize(1000) tam bölüyoruz ve sayımız 5628 olduğu için sonuç 5 oluyor.(// tam bölüm işaretidir.) Daha sonra çıktıda basamağı da görmek istediğimiz için buluduğumuz basamağı tekrar basamak değişkeni ile çarpıyoruz. us değişkenini 1 eksiltiyoruz çünkü bir sonraki döngüde 100'ler basamağına geçeceğiz, ayrıca 100'ler basamağına geçebilmemiz için sayımızın 100'lük kısmını %(modulo) operatörü ile alıyoruz. Başa dönüp tekrar ediyoruz. En son sayımız birler basamağındayken 1' e tam bölündüğü için % işareti 0 olarak sonuç veriyor ve sayımız 0 oluyor.(% işareti bölümden kalanı veriyor yani.)
Anladım cok tesekkurler iyi gunler
 
Python:
def compute(num, order):
    if num == 0:
        return
    denom = pow(10, order)
    res = math.floor(num / denom)
    print(res * denom)
    order -= 1
    compute(num - (res*denom), order)


num = 127896218462184612846
highest_order = math.floor(log(num, 10))
compute(num, highest_order)
 
Python:
def basamakayir(sayi):
    for i,j in enumerate(str(sayi)[::-1]):
        print(int(j)*(10 ** int(i)))
def basamakayirters(sayi):
    elemanlar = []
    for i,j in enumerate(str(sayi)[::-1]):
        elemanlar.insert(0,int(j)*(10 ** int(i)))
    for i in elemanlar:
        print(i)

basamakayir(145)
print()
basamakayirters(145)
 

Technopat Haberler

Geri
Yukarı