Посчитайте цифры в числе

#python #filter #count

#питон #Фильтр #считать

Вопрос:

Я написал функцию под названием count_digit :

 # Write a function which takes a number as an input # It should count the number of digits in the number # And check if the number is a 1 or 2-digit number then return True  # Return False for any other case def count_digit(num):  if (num/10 == 0):  return 1  else:  return 1   count_digit(num / 10);   print(count_digit(23))  

Я получаю 325 в качестве вывода. Почему это так и как мне это исправить?

Комментарии:

1. Используя Python 2 или 3?

2. return len(str(num))

3. @LarrytheLlama, OP, возможно, пытается выполнить рекурсивную функцию. Это работает, тхо

4. Вы должны использовать целочисленное деление ( // вместо / ) или более простой метод, предложенный здесь.

5. Что именно подразумевается под количеством цифр в номере ?

Ответ №1:

преобразуйте целое число в строку, а затем используйте метод len() для преобразованной строки. Если только вы также не рассматриваете возможность использования поплавков в качестве входных данных, а не только целых чисел.

Ответ №2:

Это такое Python3 поведение. / возвращается float , а не integer деление.

Измените свой код на:

 def count_digit(num):  if (num//10 == 0):  return 1  else:  return 1   count_digit(num // 10)  print(count_digit(23))  

Комментарии:

1. как насчет удаления «еще», это после возврата

2. @datdinhquoc Я думаю, что для начинающих лучше явно указать здесь «еще».

Ответ №3:

Рекурсивный

 def count_digit(n):  if n == 0:  return 0  return count_digit(n // 10)   1  

Легко

 def count_digit(n):  return len(str(abs(n)))  

Комментарии:

1. @Timus готово. Добавлен abs()

Ответ №4:

Предполагая, что вы всегда отправляете целое число в функцию и просите математический ответ, это может быть вашим решением:

 import math   def count_digits(number):  return int(math.log10(abs(number)))   1 if number else 1   if __name__ == '__main__':  print(count_digits(15712))  # prints: 5