2013-02-19 3 views
-2

écrire un programme qui demande à l'utilisateur le rayon et la hauteur d'un cône tridimensionnel, puis calcule et imprime la surface et le volume du cône. Le calcul de la surface et du volume se fera en fonctions, de même que le regroupement des entrées.Surface et volume d'un cône 3D

Votre programme pour cette partie fonctionnera comme suit:

  1. Imprimez un message indiquant ce que fait le programme.
  2. Invite l'utilisateur pour le rayon (un flotteur non négatif) en pieds.
  3. Invite l'utilisateur pour la hauteur (un flotteur non négatif) en pieds.
  4. Imprime le rayon et la hauteur, mais arrondi à 2 chiffres décimaux.
  5. Imprime la surface et le volume, arrondie à 2 chiffres décimaux.

Voici ce que je fait jusqu'à présent:

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,) 

Je continue de recevoir des erreurs

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

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

Quelqu'un peut me aider à passer ce petit bloc de mur, je pense « flotter » fait partie de le problème. Je pense que la configuration est bonne mais l'exécution est le problème.

+0

S'il vous plaît ne pas simplement montrer l'erreur, montrer le retraçage, de sorte que nous puissions voir quelle ligne a causé chaque erreur, et ne pas avoir à essayer de deviner. – abarnert

+0

En outre, cela ne peut pas être votre vrai code, ou vous obtiendrez un 'TypeError' de cette ligne' math.sqrt() 'avant même d'arriver à celui de' ** '. Si vous voulez que nous déboguions votre code, vous devez nous donner le même code que vous donnez à Python. – abarnert

Répondre

2

Je suppose que vous utilisez Python 3, donc input renvoie juste une chaîne.

Alors:

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

Cela soulèvera cette erreur parce que vous essayez de carré une chaîne. Tu ne peux pas faire ça.

Si vous ajoutez r = float(r) après le input, alors il vous donnera un flottant (que vous pouvez mettre en carré), ou déclencher une exception si l'utilisateur tape quelque chose de mauvais.

Pendant ce temps, quelle est la str dans cette ligne? Quel type pensez-vous "What is the radius in feet? (no negatives): " est? Essayez-vous d'accomplir quelque chose ou l'avez-vous simplement inséré sans même savoir pourquoi?

De même, dans cette ligne:

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

Pourquoi vous convertir les valeurs à virgule flottante à int? L'affectation indique que les valeurs doivent être "arrondies à 2 chiffres". Plus généralement, si vous obtenez une erreur sur une ligne de code et que vous n'avez aucune idée de pourquoi, essayez de la décomposer. Il se passe énormément de choses dans cette ligne. Pourquoi ne pas essayer ceci:

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. 

Ensuite, vous pouvez voir que l'on ne fonctionne pas, et comprendre pourquoi, sans avoir à regarder un grand désordre de code et deviner. Vous pouvez même le déboguer en ajoutant des points d'arrêt pdb ou des appels print sur une ligne particulière, pour vous assurer que chaque valeur correspond à ce que vous pensez qu'elle devrait être.

+0

Merci abarnet. Je suis nouveau sur python et c'est tactile. Mais j'apprends tous les jours, plus j'essaie. Pour un noob comme moi, les dégâts sont ce qui vient avec l'apprentissage. Merci pour vos conseils et votre temps. –

Questions connexes