'Counting number of digits of input using python

I am trying to count the number of digits of an input. However, whenever I input 10 or 11 or any two digit number, the output is 325. Why doesn't it work?

inputnumber = int(input())
countnumber = inputnumber
digitcount = 0
while countnumber > 0:
    digitcount += 1
    countnumber = countnumber/10

print(digitcount) 
# result is 325 when input is 10 or 11


Solution 1:[1]

Your error mainly happened here:

countnumber=countnumber/10

Note that you are intending to do integer division. Single-slash division in Python 3 is always "float" or "real" division, which yields a float value and a decimal part if necessary.

Replace it with double-slash division, which is integer division: countnumber = countnumber // 10. Each time integer division is performed in this case, the rightmost digit is cut.

You also have to watch out if your input is 0. The number 0 is considered to be one digit, not zero.

Solution 2:[2]

I would not convert that beautiful input to int to be honest.

print(len(input())

would be sufficient.

An easily understandable one liner that no one can complain about.

  • But of course, if negative sign bothers you like wisty said,

    len(str(abs(int (v))))
    

    will be safer for sure.

  • Again, if you are worried about the non numeric inputs like mulliganaceous said, you better cover that case.

    str = input()
    if str.isnumeric():
        print(len(str(abs(v))))
    else:
        print("bad input")
    

Solution 3:[3]

The reason is that in python 3 the division of two integers yields a floating point number. It can be fixed using the // operator:

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

Solution 4:[4]

You must be using Python3, logically your function is right. You just have to change

countnumber = countnumber // 10

because Python3, // is floor division, meanwhile / is true division.

>>>print(1 / 10)
0.1
>>>print(1 // 10)
0

Btw, as @chrisz said above, you can just simply using the len() function to get the number of digits of the input

>>>print(len(input())

Solution 5:[5]

num = int(input())
count = 0
while num > 0:
  count += 1
  num = num // 10
print(count)

Solution 6:[6]

def digits(number):
    number = str(number)
    lenght = len(number)
    return lenght

print(digits(25))   # Should print 2
print(digits(144))  # Should print 3
print(digits(1000)) # Should print 4
print(digits(0))    # Should print 1

Sources

This article follows the attribution requirements of Stack Overflow and is licensed under CC BY-SA 3.0.

Source: Stack Overflow

Solution Source
Solution 1
Solution 2
Solution 3 Elisha
Solution 4 Cypherius
Solution 5 Prakash Rajpurohit
Solution 6 sv001001