将整数乘以分数和小数时,Python程序出错

时间:2012-07-28 04:41:10

标签: python math equation

我试图制作一个简短的程序来解决着名的德雷克方程。我让它接受整数输入,十进制输入和小数输入。但是,当程序试图将它们相乘时,我收到此错误(在我输入所有必要值之后,错误发生了):

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 个答案:

答案 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的输出强制转换为正确的类型。真正的问题是

  1. 未正确验证程序的输入,
  2. 尝试将str与此行上的数字连接起来:

    print('My estimate of th..." + calc + ' .')
    
  3. 假设整数,浮点数和小数值作为输入,你的程序运行正常。将'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来避免潜在的错误。