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

Python程序将整数乘以分数和小数时出错,python,math,equation,Python,Math,Equation,我试着做一个简短的程序来计算著名的德雷克方程。我让它接受整数输入、小数输入和小数输入。但是,当程序试图将它们相乘时,我会出现此错误(在我输入所有必要的值之后,错误就会发生): 要解决此问题,我需要更改什么 您需要将输入值转换为浮点值 r = float(input()) (注意:在小于3的Python版本中,使用raw_input而不是input) 其他变量也是如此。否则,您将尝试将字符串乘以字符串 编辑:正如其他人所指出的,calc不能使用+操作符连接到周围的字符串。使用字符串替换: pri

我试着做一个简短的程序来计算著名的德雷克方程。我让它接受整数输入、小数输入和小数输入。但是,当程序试图将它们相乘时,我会出现此错误(在我输入所有必要的值之后,错误就会发生):


要解决此问题,我需要更改什么

您需要将输入值转换为浮点值

r = float(input())
(注意:在小于3的Python版本中,使用
raw_input
而不是
input

其他变量也是如此。否则,您将尝试将字符串乘以字符串

编辑:正如其他人所指出的,
calc
不能使用
+
操作符连接到周围的字符串。使用字符串替换:

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

您需要将输入值转换为浮点数

r = float(input())
(注意:在小于3的Python版本中,使用
raw_input
而不是
input

其他变量也是如此。否则,您将尝试将字符串乘以字符串

编辑:正如其他人所指出的,
calc
不能使用
+
操作符连接到周围的字符串。使用字符串替换:

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

您已将一些值转换为适合算术的类型,但未将其他值转换为适合算术的类型。实数值应该传递给
float()
,比率应该被解析和计算(或者使用类型,或者强制用户输入实数)。后者的一个例子如下所示:

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

您已将一些值转换为适合算术的类型,但未将其他值转换为适合算术的类型。实数值应该传递给
float()
,比率应该被解析和计算(或者使用类型,或者强制用户输入实数)。后者的一个例子如下所示:

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())
输入([提示]->值

相当于eval(原始输入(提示))

因此,我建议您使用
原始输入
,以避免潜在的错误

输入([提示]->值

相当于eval(原始输入(提示))


因此,我建议您使用
raw_input
来避免潜在的错误。

与断言问题在于没有将
input
的输出转换为正确类型的答案相反。真正的问题是

  • 未正确验证程序的输入,以及
  • 正在尝试将str与此行上的数字连接起来:

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

  • 给定整数、浮点数和小数作为输入,您的程序运行良好。给定
    '1'
    '1'
    (引用)作为前两个输入,它返回您看到的错误。

    与断言问题在于未将
    输入的输出转换为正确类型的答案相反。真正的问题是

  • 未正确验证程序的输入,以及
  • 正在尝试将str与此行上的数字连接起来:

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

  • 给定整数、浮点数和小数作为输入,您的程序运行良好。给定
    '1'
    '1'
    (引用)作为前两个输入,它会返回您看到的错误。

    使用最新修订的代码(一切都是一个浮点值),我在输入第一部分时得到这个错误:回溯(最近的调用最后):文件“C:/Users/Family/Desktop/Programming/Python Files/1/DrakeEquation1.py”,第24行,在calc()#calc-calc-to-execute文件“C:/Users/Family/Desktop/Programming/Python Files/1/DrakeEquation1.py”的第8行中,在calc-fp=float(input())ValueError:无法将字符串转换为float:“2/3”正确,请记住发布的示例只接受reals。使用最新修订的代码(一切都是float)在calc()中输入第一个分数时,我得到了这个错误:Traceback(最近一次调用最后一次):文件“C:/Users/Family/Desktop/Programming/Python Files/1/DrakeEquation1.py”,第24行,calc()#calc calc执行文件“C:/Users/Family/Desktop/Programming/Python Files/1/DrakeEquation1.py”,第8行,calc fp=float(input())ValueError:无法将字符串转换为浮点:“2/3”正确,请记住,发布的示例仅接受实数。在第6行中使用raw_input())会产生以下错误:r=float(raw_input())NameError:全局名称“raw_input”未定义。请参阅,您必须使用Python 3。Python3
    raw_input
    input
    ;我已经更新了上面的代码。好的,可以了。剩下的唯一问题是,如果我为一个询问分数的问题输入一个分数(e.x.“2/3”),我会得到以下错误:ValueError:无法将字符串转换为float:“2/3”;但是,如果我只使用整数和小数,程序就可以完美运行。如果需要将分数转换为浮点数,最好使用
    input
    ,这可以通过
    eval(input())
    在Python 3中模拟。请注意,通常不鼓励使用
    eval
    。好的,我会做必要的更改。谢谢你的帮助!在第6行中使用raw_input())会产生以下错误:r=float(raw_input())name错误:未定义全局名称“raw_input”,请参见,您必须使用Python 3。Python3
    raw_input
    input
    ;我已经更新了上面的代码。好的,可以了。剩下的唯一问题是,如果我为一个询问分数的问题输入一个分数(e.x.“2/3”),我会得到以下错误:ValueError:无法将字符串转换为float:“2/3”;但是,如果我只使用整数和小数,程序就可以完美运行。如果需要将分数转换为浮点数,最好使用
    input
    ,这可以通过
    eval(input())
    在Python 3中模拟。请注意,通常不鼓励使用
    eval
    。好的,我会做必要的更改。谢谢你的帮助!