#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