#python #pandas
#python #панды
Вопрос:
Я новичок, проходящий онлайн-курс с использованием ipython notebook и panda.
Нам дана функция
def roundToMillions (value):
result = round(value / 1000000)
return result
и некоторые тесты
roundToMillions(4567890.1) == 5
roundToMillions(0) == 0 # always test with zero...
roundToMillions(-1) == 0 # ...and negative numbers
roundToMillions(1499999) == 1 # test rounding to the nearest
Нам говорят .. Определите еще несколько тестовых примеров для обеих функций .
Я не могу придумать больше тестов.
Поставленный вопрос:
Почему вы не можете использовать roundToMillions() для округления населения до миллионов жителей?
Я не совсем понимаю, что может быть не так с функцией.
Этот курс бесплатный, и поэтому на самом деле не так много доступной помощи.
Ответ №1:
С точки зрения тестовых примеров, этот цикл будет генерировать много тестовых примеров, и результаты говорят сами за себя:
for x in xrange(-2000000, 2000000, 250000):
print roundToMillions(x), x
>> -2.0 -2000000
>> -2.0 -1750000
>> -2.0 -1500000
>> -2.0 -1250000
>> -1.0 -1000000
>> -1.0 -750000
>> -1.0 -500000
>> -1.0 -250000
>> 0.0 0
>> 0.0 250000
>> 0.0 500000
>> 0.0 750000
>> 1.0 1000000
>> 1.0 1250000
>> 1.0 1500000
>> 1.0 1750000
Так что, очевидно, это округление в меньшую сторону.
Это связано с целочисленным делением. удаление раунда показывает это:
def roundToMillions (value):
result = value / 1000000
return result
print roundToMillions(999999)
>> 0
Это исправлено путем добавления .0 к функции:
def roundToMillions (value):
result = round(value / 1000000.0)
return result
for x in xrange(0, 1000000, 250000):
print roundToMillions(x), x
>> 0.0 0
>> 0.0 250000
>> 1.0 500000
>> 1.0 750000
print roundToMillions(999999)
>> 1.0
Подробнее о целочисленном делении смотрите на
print (3/2)
>> 1
print (3.0/2.0)
>> 1.5
Комментарии:
1. Спасибо за вашу помощь, Дэниел.
2. Спасибо Дэниелу. В вашем коде 1750000 округляется до 1, верно?
3. когда я запускаю roundToMillions (1750000), возвращаемое значение ответа равно 2
4. Попробуйте это с 500 000 и 1 500 000. Если они округляются правильно, то ваша функция верна.
5. Я смущен 1,500000 раундов до 2, что кажется нормальным.