Programming Basics - Simple Operations and Calculations Lab - Birthday 80/100 (Python)
Здравейте,
Опитвам се да направя лаба от заглавието, но ми дава грешки в задачи 4 и 6 без допълнителни пояснения. Изглежда доста хора са се сблъсквали с този проблем, но за C# и във всичките постове по въпроса там изглежда проблема е със закръглянето до третия знак.
Аз обаче правя зкръгляне и ми излизат всички примерни резултати, но не мога да разбера какво не му харесва на judje.
Ако някой може да даде акъл ще съм много благодарен.
Ето го и кода, който изпозлвам:
length = int(input())
width = int(input())
height = int(input())
percent = float(input())
volume_cm_cube = length * width * height
volume_liters = volume_cm_cube * 0.001
percent_adjusted = percent*0.01
volume_adjusted = volume_liters * (1 - percent_adjusted)
volume_rounded = float("{0:.3f}".format(volume_adjusted))
print(volume_rounded)
Благодаря!
Следния код, предложен от теб проработи в judge:
Входа и Изхода от него ако принтирам след всяка операция е:
Вход:
105
77
89
18.5
Изход:
719565
719.565
0.185
586.445475
586.445
При моя първоначален код по-горе изхода при същия вход изглежда по абсолютно същия начин:
719565
719.565
0.185
586.445475
586.445
Явно обаче judge си проверява, коя операция е използвана, закръгляне или форматиране.
Благодаря отново!
Мисля, че причината не е в Judge. До колкото знам има особености при закръглянето в Python. Тук и тук има полезна информация за това.
Реших да се заровя малко и да разбера защо първоначалното закръгляне, което използвах с "{0:.3f}".format() даваше грешка, а това с '%.3f' % не. Според това, което четох % е "стария" начин за форматиране, докато str.format() e новия, предполагам под стар и нов се има предвид Python 2 и 3. Независимо от това обаче и двете би трябвало да са абсолютно еднакви и това още повече ме озадачи и тръгнах да търся, кое може да дава разлика.
Тогава осъзнах, че това което ти предложи е да се форматира "volume_adjusted" директно в принт функцията, докато аз имах една допълнителна стъпка, която всъщност е излишна и изглежда направо грешна:
Това е float() в този ред. "volume_adjusted" вече е float и явно повторния опит за конвертирането и дава някаква грешка. Ако променя кода на:
и след това разпечатам, изхода изглежда същия, но минава със 100/100 и в judge.
Като заключение грешката е някъде при опита за повторно конвертиране на променлива, която вече е float във float и като се премахне това всеки един от следните три варианта за форматиране при изпечатването работи коректно и дава 100/100 в judge:
Е, знаех си, че имало и по-кадърен начин :D
Много добре,
keep coding :)