#python #if-statement #while-loop #count #return
Вопрос:
Цифры функции в цикле while — while (n > 0) возвращает 325 326 327 и 1 в качестве значения счетчика, и если я использую while (n >> 1), он возвращает правильное количество чисел. Есть ли какая-нибудь логическая причина для такого поведения?
def digits(n):
count = 0
if n == 0:
return 1
while (n > 0):
count = 1
n = n / 10
return count
print(digits(25)) # Should print 2
print(digits(144)) # Should print 3
print(digits(1000)) # Should print 4
print(digits(0)) # Should print 1
Комментарии:
1. Может быть, ты имеешь в виду
n = n // 10
? Существует разница между/
обычным разделением и//
разделением этажей
Ответ №1:
Есть разница между /
и //
.
/
дает ли обычное деление точный ответ до 15 знаков после запятой в python. Однако //
это метод разделения этажей, при котором возвращается только коэффициент деления.
попробуйте заменить:
n = n / 10
с этим:
n = n // 10
Комментарии:
1. В этом есть смысл!
2. @Энни подумайте о том, чтобы принять и поддержать ответ
Ответ №2:
Если вы разделите что-то на 10, оно всегда будет больше 0, более быстрым способом было бы:
def digits(n):
return len(str(n))
Ответ №3:
Правильный Код
def digits(n):
count = 0
if n == 0:
return 1
while (n > 0):
count = 1
n = n//10
return count
print(digits(25)) # Should print 2
print(digits(144)) # Should print 3
print(digits(1000)) # Should print 4
print(digits(0)) # Should print 1
Используемая логика
Мы используем разделение этажей вместо обычного, потому что при нормальном цикле цикл займет очень много времени, но ничего не вернет, поэтому здесь
мы будем использовать разделение этажей до тех пор, пока n не станет меньше 10, а затем количество увеличится на 1
Например: Мы берем 25 в качестве входных данных
- 25 // 10 = 2 количество получает 1
- 2 // 10 = входы становятся меньше нуля, количество увеличивается на 1, пока условие не будет выполнено, так что теперь количество равно 2
Надеюсь, это поможет 🙂