Подсчет количества цифр ввода с использованием Python - PullRequest
0 голосов
/ 22 мая 2018

Я пытаюсь посчитать количество цифр входа.Однако всякий раз, когда я ввожу 10 или 11 или любое двузначное число, вывод будет 325.Почему это не работает?

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

Ответы [ 4 ]

0 голосов
/ 22 мая 2018

Я бы не стал преобразовывать этот красивый ввод в int, если честно.

print(len(input())

было бы достаточно.

Легко понятный вкладыш, на который никто не может пожаловаться.

  • Но, конечно, если отрицательный знак вас беспокоит, как мудрый сказал ,

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

    наверняка будет безопаснее.

  • Опять же, если вас беспокоит нецифровый ввод, такой как умозрительный сказал , вам лучше охватить этот случай.

    str = input()
    if str.isnumeric():
        print(len(str(abs(v))))
    else:
        print("bad input")
    
0 голосов
/ 22 мая 2018

Вы должны использовать Python3, логически ваша функция верна.Вам просто нужно изменить

countnumber = countnumber // 10

, потому что Python3, // это разделение по полу, а / это истинное разделение.

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

Кстати, как сказал @chriszвыше, вы можете просто использовать функцию len (), чтобы получить количество цифр ввода

>>>print(len(input())
0 голосов

Ваша ошибка в основном произошла здесь:

countnumber=countnumber/10

Обратите внимание, что вы собираетесь делать целочисленное деление.Деление на одну косую черту в Python 3 всегда является делением "с плавающей запятой" или "реальным", которое при необходимости дает значение с плавающей запятой и десятичную часть.

Замените его на деление с двойной косой чертой,что является целочисленным делением: countnumber = countnumber // 10.Каждый раз, когда в этом случае выполняется целочисленное деление, самая правая цифра обрезается.

Вы также должны следить, если ваш ввод равен 0. Число 0 считается одной цифрой, а не нулем.

0 голосов
/ 22 мая 2018

Причина в том, что в питоне 3 деление двух целых чисел дает число с плавающей запятой.Это можно исправить с помощью оператора //:

number = int(input())
digits_count = 0
while number > 0:
    digits_count += 1
    number = number // 10
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...