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))
Girilen sayının basamaklarını bulma
6
●12.932
- 22-07-2018, 01:00:02Python 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:58Hocam 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Üyeliği durdurulduHaklısın valla ne diyimSaidYildiz adlı üyeden alıntı: mesajı görüntüle
Sağol
- 23-07-2018, 15:04:47Kimlik doğrulama veya yönetimden onay bekliyor.Python 3 yazdığınızı varsayıyorum, bölme işleminde integer bölmesi yapmanız gerekiyordu:byvector adlı üyeden alıntı: mesajı görüntüle
number = int(input()) digits = 0 while number > 0: digits += 1 number //= 10 print(digits)
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.SaidYildiz adlı üyeden alıntı: mesajı görüntüle - 24-07-2018, 06:30:24Haklı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.KEO adlı üyeden alıntı: mesajı görüntüle
Sağol