Python值错误:float()的文本无效:4/

2024-04-18 14:31:24 发布

您现在位置:Python中文网/ 问答频道 /正文

所以这门课我要做一个计算器。 除了除法函数,我什么都能用,每次运行它都会出错

Traceback (most recent call last):
  File "C:\Python27\Calculator.py", line 43, in <module>
    val3 = Mult(val1, val2)
  File "C:\Python27\Calculator.py", line 17, in Mult
    val1 = float(val1)
  ValueError: invalid literal for float(): 4/

这是我的代码,我意识到我可能使用了很多不正确的方法来做一些事情,比如从字符串中取出操作数,但是我不知道其他的方法。在

^{pr2}$

提前谢谢


Tags: 方法函数inpymostlinefloatcalculator
3条回答

您可以通过首先拆分操作以获得3个组件,然后将其分配到operator模块中的一个方法来避免大量的样板文件,例如:

from operator import sub, add, div, mul
import re

for line in iter(raw_input, ''): # stop after just enter pressed
    try:
        num1, op, num2 = re.split('([-+/*])', line)
        print {
            '-': sub,
            '+': add,
            '/': div,
            '*': mul
        }[op](float(num1), float(num2))
    except ValueError:
        print line, '  not valid'

我建议将firstNu和{}替换为如下内容:

def get_operands(equation, operator):
    return [number.strip() for number in equation.split(operator)]

然后分配如下:

^{pr2}$

与您的方法相比的优势:

  • 支持一位数以上的数字
  • 支持数字和运算符之间的间距

如果找不到给定的子字符串,find()返回{}。Python认为-1是一个“truthy”值(与0None[]这些值是'false'),因此当找不到子字符串equat.find("\*")时,equat.find("\*")的计算结果是{}。你的if语句应该看起来更像:

if equat.find("+") != -1:

发生此错误是因为,当您输入除法方程时,equat.find("\*")计算结果为-1,即TruefirstNu被运算符'*'调用,而{}的计算结果为-1。Python通过从字符串末尾向后计数来处理负字符串索引(列表索引的处理方式相同),因此firstNu返回{},如果行是'4/5',则返回'4/'float()不知道如何将'4/'变成一个数字,所以它抛出您看到的错误。在

您还应该将firstNu和{}替换为类似的

^{pr2}$

相关问题 更多 >