2013-07-30 3 views
0

Я пытаюсь рассчитать стоимость квадрата круглого объекта, учитывая его диаметр и цену.Рассчитать стоимость квадратного квадрата объекта

Вот что я получил:

import math 

def main(): 
    print("This program calculates the cost per square inch of a circular object.") 

    diameter = eval(input("What is the diameter of the object? ")) 
    price = eval(input("What is the price of the whole object? ")) 

    cost_per_square = (math.pi * (diameter/2)**2)/price 

    print("The cost per square inch is $", round(cost_per_square, 2), sep="") 

main() 

Я не силен в математике, так что я подумал, что формула верна?

+2

Я хотел бы предупредить вас об обращении eval (input()) - пользователь может ввести некоторый действительный код python, и он будет выполнен в процессе оценки. Гораздо безопаснее использовать float (input()) –

+0

Спасибо, что я не знал об этом, я только что начал Python. – onimojo

+0

И eval, и exec выполнят любую заданную им строку (eval ожидает, что результат будет значением). Это очень мощно, когда ваш код генерирует код, а затем запускает его для вас __but__, когда кто-то _else_ может поставить строку, она также ___incredibly опасна___, поэтому вам нужно избегать вызова их на все, что приходит из внешнего мира. –

ответ

3

Да, формула для площади круга A = π * r * r.

Но price должно быть в числителе и area в знаменателе. Вы закодировали обратный - квадратные футы за единицу стоимости. Подумайте о единицах, которые вы хотите: стоимость квадратного фута. Это поможет вам.

Я бы порекомендовал разделять diameter на 2.0 вместо 2, чтобы избежать проблем с целым делением.

+0

Если вы используете π, вы не должны бояться использования ² ;-) – Alfe

+0

Боитесь? Нет, просто невежествен. Не на кончике моего языка. Что такое разметка? Пожалуйста, измените. Я слишком ленив для Google. – duffymo

+0

Спасибо за разъяснение :) – onimojo

0

Формула для определения области круга pi*r*r. Чтобы получить стоимость за квадратный дюйм, сделайте следующее: price/area

3

Я также предложил бы сначала вычислить промежуточные значения с собственными именами. Это часто предотвращает ошибки в первую очередь:

radius = diameter/2.0 
area = math.pi * radius**2 
price_per_area = price/area 

Вы также могли заметить, что я предпочел «цену» перед «стоимость» и «площадь» до «квадрат». Это потому, что использование синонимов взаимозаменяемо также создает пространство для ошибок. Все три строки теперь настолько просты, что будет сложно ввести ошибку, которую вы впервые сделали.

+2

+1 - хорошие имена. Отличная точка. Только один вопрос: разделите диаметр на 2.0, чтобы избежать проблемы с целым делением. – duffymo

+1

@duffymo - согласен, хорошие имена важны. В одном мета-вопросе вопрос специально обозначен как python-3, где '5/2 == 2.5', но для переносимости и удобочитаемости ваша рекомендация, вероятно, является хорошей практикой. – msw

+0

Я пропустил тэг python-3. Спасибо, что указали. – duffymo

Смежные вопросы