我试图制作一个简短的程序来解决着名的德雷克方程。我让它接受整数输入,十进制输入和小数输入。但是,当程序试图将它们相乘时,我收到此错误(在我输入所有必要值之后,错误发生了):
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
为了解决这个问题,我需要更改什么?
答案 0 :(得分:5)
您需要将输入值转换为浮点数。
r = float(input())
(注意:在少于3的Python版本中,使用raw_input
代替input
。)
等等其他变量。否则,您试图将字符串乘以字符串。
编辑:正如其他人所指出的,calc
还不能使用+
运算符连接到周围的字符串。使用字符串替换:
print('My estimate of the number of detectable civilizations is %s.' % calc)
答案 1 :(得分:1)
与答案相反,断言问题是没有将input
的输出强制转换为正确的类型。真正的问题是
尝试将str与此行上的数字连接起来:
print('My estimate of th..." + calc + ' .')
假设整数,浮点数和小数值作为输入,你的程序运行正常。将'1'
和'1'
(引用)作为前两个输入,它会返回您看到的错误。
答案 2 :(得分: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())
答案 3 :(得分:0)
输入([提示]) - &gt;值
相当于eval(raw_input(prompt))。
因此,我建议您使用raw_input
来避免潜在的错误。