-3

ユーザーに 3 次元の円錐の半径と高さを求めるプロンプトを表示し、円錐の表面積と体積を計算して出力するプログラムを作成してください。入力の収集と同様に、表面積と体積の計算は関数で行われます。

この部分のプログラムは次のように機能します。

  1. プログラムの動作を示すメッセージを出力します。
  2. ユーザーに半径 (非負の浮動小数点数) をフィート単位で入力するように求めます。
  3. ユーザーに高さ (非負の浮動小数点数) をフィート単位で入力するように求めます。
  4. 半径と高さを出力しますが、小数点以下 2 桁に丸めます。
  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'

この小さな壁のブロックを通過するのを手伝ってくれる人はいますか? 「浮き」が問題の一部だと思います。セットアップは良いと思いますが、実行が問題です。

4

1 に答える 1

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と、float (二乗できる) が得られるか、ユーザーが何か悪いことを入力した場合に例外が発生します。

一方、strその行の for は何ですか? あなたはどのタイプだと思います"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ですか? 割り当てには、値を「2桁に丸める」必要があると書かれています。

より一般的には、コードの一部の行でエラーが発生し、その理由がわからない場合は、それを分割してみてください。その1行で非常に多くのことが起こっています。これを試してみませんか:

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、各値が想定どおりであることを確認できます。

于 2013-02-19T22:59:40.803 に答える