1

有名なドレイクの方程式を解く短いプログラムを作ってみました。整数入力、10進数入力、および小数入力を受け入れるようになりました。ただし、プログラムがそれらを乗算しようとすると、このエラーが発生します(必要なすべての値を入力した直後にエラーが発生します)。

Traceback (most recent call last)
  File "C:/Users/Family/Desktop/Programming/Python Files/1/DrakeEquation1.py", line 24, in <module>
    calc() #cal calc to execute it
  File "C:/Users/Family/Desktop/Programming/Python Files/1/DrakeEquation1.py", line 17, in calc
    calc = r*fp*ne*fl*fi*fc*l
TypeError: can't multiply sequence by non-int of type 'str'

私のコードは次のとおりです。

def intro():
    print('This program will evaluate the Drake equation with your values')

def calc():
    print('What is the average rate of star formation in the galaxy?')
    r = input()
    print('What fraction the stars have planets?')
    fp = input()
    ne = int(input('What is the average number of life supporting planets (per     star)?'))
    print('What fraction of these panets actually develop life')
    fl = input()
    print('What fraction of them will develop intelligent life')
    fi = input()
    print('What fraction of these civilizations have developed detectable technology?')
    fc = input()
    l = int(input('How long will these civilizations release detectable signals?'))
    calc = r*fp*ne*fl*fi*fc*l

    print('My estimate of the number of detectable civilizations is ' + calc + ' .')


if __name__=="__main__":
    intro() #cal intro to execute it 
    calc() #cal calc to execute it 

この問題を解決するには、何を変更する必要がありますか?

4

4 に答える 4

5

入力値をfloatに変換する必要があります。

r = float(input())

(注:Pythonバージョンが3未満の場合は、raw_input代わりに使用してinputください。)

他の変数についても同様です。それ以外の場合は、文字列に文字列を掛けようとしています。

編集:他の人が指摘しているように、演算子calcを使用して周囲の文字列にさらに連結することはできません。+そのために文字列置換を使用します。

print('My estimate of the number of detectable civilizations is %s.' % calc)
于 2012-07-28T04:44:33.100 に答える
1

input問題はの出力を正しいタイプにキャストしないことにあると主張する答えとは反対です。本当の問題は

  1. プログラムへの入力を適切に検証していない、および
  2. この行の数字とstrを連結しようとしています:

    print('My estimate of th..." + calc + ' .')
    

入力として整数、浮動小数点数、小数値を指定すると、プログラムは正常に実行されます。最初の2つの入力として(引用符'1''1'囲まれた)を指定すると、表示されているエラーが返されます。

于 2012-07-28T04:56:03.233 に答える
0

一部の値を算術演算に適したタイプに変換しましたが、他の値は変換していません。実数値をに渡しfloat()、比率を解析して計算する必要があります(または、Fraction型を使用するか、ユーザーに実数値を入力するように強制します)。後者の例を以下に示します。

print('What is the average rate of star formation in the galaxy?')
r = float(input())
print('What fraction the stars have planets?')
fp = float(input())
ne = int(input('What is the average number of life supporting planets (per star)?'))
print('What fraction of these panets actually develop life')
fl = float(input())
于 2012-07-28T04:47:49.703 に答える
0

input([prompt])-> value

eval(raw_input(prompt))と同等です。

raw_inputしたがって、潜在的なエラーを回避するために使用することをお勧めします。

于 2012-07-28T04:48:55.990 に答える