2013-02-19 6 views
-2

Напишите программу, которая подскажет пользователю о радиусе и высоте трехмерного конуса, а затем вычислит и распечатает площадь поверхности и объем конуса. Расчет площади поверхности и объема будет выполняться в функции, как и сбор входов.Площадь поверхности и объем 3D-конуса

Ваша программа для этой части будет функционировать следующим образом:

  1. Распечатайте сообщение о том, что программа делает.
  2. Подскажите пользователю радиус (неотрицательный поплавок) в футах.
  3. Подскажите пользователю о высоте (неотрицательный поплавок) в футах.
  4. Распечатайте радиус и высоту, но округлите до двух десятичных цифр.
  5. Распечатайте площадь и объем поверхности, округленные до 2 десятичных цифр.

Вот что я сделал до сих пор:

import math 

print("This Program will calculate the surface area and volume of a cone." 
    "\nPlease follow the directions.") 
print() 
print() 
r = input(str("What is the radius in feet? (no negatives): ")) 
h = input(str("What is the height in feet? (no negatives): ")) 

math.pi = (22.0/7.0) 
math.sqrt() 
surfacearea = int(math.pi*r**2)+int(r*math.pi(math.sqrt(r**2+h**2))) 
print("The surface area is", surfacearea) 
print() 
volume = (1/3)*math.pi*r**2*h 
print ("The volume is", volume) 

print() 
print("Your Answer is:") 
print() 

print("A cone with radius", r, "\nand hieght", h,"\nhas a volume of : ",volume, 
    "\nand surface area of", surfacearea,) 

Я продолжаю получать ошибки

TypeError: unsupported operand type(s) for ** or pow(): 'str' and 'int' 

TypeError: can't multiply sequence by non-int of type 'float' 

Может кто-нибудь помочь мне пройти этот небольшой блок стены, я думаю, «поплавок» является частью проблема. Я думаю, что настройка хороша, но проблема - проблема.

+0

Просьба не просто показать ошибку, показать трассировку, чтобы мы могли видеть, какая строка вызвала каждую ошибку, и не нужно пытаться угадать. – abarnert

+0

Кроме того, это не может быть ваш реальный код, или вы получите 'TypeError' из этой строки' math.sqrt() ', прежде чем вы даже дойдете до символа' ** '. Если вы хотите, чтобы мы отлаживали ваш код, вы должны предоставить нам тот же код, который вы даете Python. – abarnert

ответ

2

Я предполагаю, что вы используете Python 3, поэтому input просто возвращает строку.

Итак:

r = input(str("What is the radius in feet? (no negatives): ")) 
# ... 
surfacearea = int(math.pi*r**2) #+ ... 

Это поднимет эту ошибку, потому что вы пытаетесь умиротворять строку. Вы не можете этого сделать.

Если вы добавите r = float(r) после input, тогда он предоставит вам поплавок (который вы можете поставить в квадрат) или поднимите исключение, если пользователь вводит что-то плохое.

Между тем, что такое str для этой линии? Какой тип вы думаете "What is the radius in feet? (no negatives): "? Вы пытаетесь что-то сделать, или вы просто вставляете его, даже не зная почему?

Кроме того, в этой строке:

surfacearea = int(math.pi*r**2)+int(r*math.pi(math.sqrt(r**2+h**2))) 

Почему вы преобразования значения с плавающей запятой в int? В задании указано, что значения должны быть округлены до двух цифр.

В общем случае, если вы получите сообщение об ошибке на какой-либо строке кода и не знаете, почему, попробуйте разбить ее. В этой одной линии происходит очень много. Почему бы не попробовать это:

r_squared = r**2 
pi_r_squared = math.path * r_squared 
int_pi_r_squared = int(pi_r_squared) 
h_squared = h**2 
r_squared_h_squared = r_squared + h_squared 
sqrt_r2_h2 = math.sqrt(r_squared_h_squared) 
# etc. 

Тогда вы можете увидеть, какой из них не работает, и выяснить, почему, без необходимости смотреть на большом беспорядке кода и догадки. Вы можете даже отладить его, добавив pdb точки останова или print звонки на определенную строку, чтобы убедиться, что каждое значение является тем, что, по вашему мнению, должно быть.

+0

Спасибо abarnet. Я новичок в python, и это прикосновение и выход. Но я узнаю каждый день, чем больше стараюсь. Для нуба, как я, беспорядок - это то, что приходит с обучением. Спасибо за ваше руководство и время. –

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