• 22-07-2018, 00:26:22
    #1
    Üyeliği durduruldu
    Merhaba arkadaşlar. Python ile yeni başladım. Girilen sayının basamak sayısını bulmaya çalışıyorum ancak yazdığım kod sürekli hata veriyor yada saçma sapan bir değer yazıyor. Kod aşağıdaki gibidir. Yardımcı olursanız çok sevinirim. Teşekkürler

    sayi = int(input("Lütfen bir sayı giriniz... : "))
    basamak = 0
    while (sayi>0):
    basamak += 1
    sayi /= 10
    print("Basamak sayısı... : {}".format(basamak))
  • 22-07-2018, 01:00:02
    #2
    Python syntaxini bilmiyorum ama int değişkenleri eger burada virgüllü sayı da alıyorsa mantık yanlış diyebilirim. Çünkü 123 sayısını ele alırsak örnek olarak 0 dan büyük olduğu için döngüye girer 10 a böler ve basamak 1 artar. Sayımız 12.3 olur ve 0 dan büyük olduğu için tekrar 10 a böler ve basamak 2 olur. Sayımız da 1.23 olmuş olur. Daha sonrasında 0 dan büyük olduğu için sayımız yine 10 a böler ve basamak tekrar artarak 3 olur. Sayımız da 0.12 olmuş olur. Tabi ki bu sürekli böyle gider. Integer bir sayı virgulden sonra python da kaç karakterine bakıyorsa o kadar saçma bir sonuç verir size. Dediğim gibi python syntaxini bilmiyorum ama dediğim gibi ise sorun bundan kaynaklanıyor olabilir. Mantığı değiştirerek algoritmayı tekrar yazabilirsiniz bu durumda.
  • 22-07-2018, 01:15:58
    #3
    Hocam böyle basamak mı bulunur ben 1.000.000.000.000.000.000.000.000.000.000.000.000. 000.000.000.000.000.000 gibi bir sey yazarsam oraya 0dan baslayip bunu sayacak?

    sayi = str(input("Lütfen bir sayı giriniz... : "))
    
    basamak = len(sayi)
    
    print("Basamak sayısı... : {}".format(basamak))
  • 22-07-2018, 05:58:30
    #4
    Üyeliği durduruldu
    SaidYildiz adlı üyeden alıntı: mesajı görüntüle
    Hocam böyle basamak mı bulunur ben 1.000.000.000.000.000.000.000.000.000.000.000.000. 000.000.000.000.000.000 gibi bir sey yazarsam oraya 0dan baslayip bunu sayacak?

    sayi = str(input("Lütfen bir sayı giriniz... : "))
    
    basamak = len(sayi)
    
    print("Basamak sayısı... : {}".format(basamak))
    Haklısın valla ne diyim Sağol
  • 22-07-2018, 18:49:12
    #5
    import math

    print('Basamak sayısı: ', math.floor(math.log(int(input('Bir sayı girin: ')), 10)) + 1)
  • 23-07-2018, 15:04:47
    #6
    KEO
    Kimlik doğrulama veya yönetimden onay bekliyor.
    byvector adlı üyeden alıntı: mesajı görüntüle
    Merhaba arkadaşlar. Python ile yeni başladım. Girilen sayının basamak sayısını bulmaya çalışıyorum ancak yazdığım kod sürekli hata veriyor yada saçma sapan bir değer yazıyor. Kod aşağıdaki gibidir. Yardımcı olursanız çok sevinirim. Teşekkürler

    sayi = int(input("Lütfen bir sayı giriniz... : "))
    basamak = 0
    while (sayi>0):
    basamak += 1
    sayi /= 10
    print("Basamak sayısı... : {}".format(basamak))
    Python 3 yazdığınızı varsayıyorum, bölme işleminde integer bölmesi yapmanız gerekiyordu:

    number = int(input())
    digits = 0
    
    while number > 0:
    	digits += 1
    	number //= 10
    
    print(digits)

    SaidYildiz adlı üyeden alıntı: mesajı görüntüle
    Hocam böyle basamak mı bulunur ben 1.000.000.000.000.000.000.000.000.000.000.000.000. 000.000.000.000.000.000 gibi bir sey yazarsam oraya 0dan baslayip bunu sayacak?

    sayi = str(input("Lütfen bir sayı giriniz... : "))
    
    basamak = len(sayi)
    
    print("Basamak sayısı... : {}".format(basamak))
    Yanılıyorsunuz, 0'dan başlayıp saymıyor yazılan kod, while döngüsü tam olarak basamak sayısı kadar dönmekte (O(log( n )) time complexity). Sizin önerdiğiniz çözümdeki gereksiz str dönüşümü (casting) de yapılmadığı için daha iyi (efficient) bi çözüm olduğunu söylemek de mümkün.
  • 24-07-2018, 06:30:24
    #7
    KEO adlı üyeden alıntı: mesajı görüntüle
    Yanılıyorsunuz, 0'dan başlayıp saymıyor yazılan kod, while döngüsü tam olarak basamak sayısı kadar dönmekte (O(log( n )) time complexity). Sizin önerdiğiniz çözümdeki gereksiz str dönüşümü (casting) de yapılmadığı için daha iyi (efficient) bi çözüm olduğunu söylemek de mümkün.
    Haklısınız uzerine cok dusunmeden yazdim, 0'dan baslamiyor. Fakat benim onerdigimle sizin onerdiginizi complier edip execution timelarini compare ederseniz castingin loopingten daha efficient oldugunu goreceksiniz.