ValueError:对于带有基数为10的int()无效:''

时间:2014-10-01 00:14:54

标签: python

我正在编写一个Python程序,它采用一个双边方程的字符串,"(方程式)=(方程式)",并通过将两个可以打开的字符变黑来解决双方问题任何一方,使方程解决方案彼此相等

到目前为止,我有这个代码,并且我不断得到任何不是单方程的情况下的错误。以下是完整的追溯:

    Traceback (most recent call last):
  File "C:/Users/rgade_000/Desktop/blackout.py", line 69, in <module>
    main()
  File "C:/Users/rgade_000/Desktop/blackout.py", line 65, in main
    print("+11x4 =",compute("+11x4"), "(expect None)")
  File "C:/Users/rgade_000/Desktop/blackout.py", line 22, in compute
    temp_num_int = int(temp_num_str)
ValueError: invalid literal for int() with base 10: ''

我知道这是op == ""声明中的问题,但我不知道如何修复它。问题只出现在我尝试使用的任何字符串方程中,例如使用主调用

print("solving 288/24x6=18x13x8: ", solve("288/24x6=18x13x8"))

(主要功能包含测试用例)

def compute(exp):
    """
    Takes a string representing an equation and computes the value
    """
    temp_num_str = ""
    temp_num_int = 0
    op = ""
    for ch in exp:
        if ch.isdigit():
            if temp_num_str == "":
                temp_num_str = ch
            else:
                temp_num_str += ch
        else:
            if op == "":
                op = ch
                temp_num_int = int(temp_num_str)
            else:
                temp_num_int = eqs(temp_num_int, op, temp_num_str)
                op = ch
            temp_num_str = ""
    return eqs(temp_num_int, op, temp_num_str)

def eqs(temp_num_int, op, temp_num_str):
    if op == "+":
        return temp_num_int + int(temp_num_str)
    elif op == "-":
        return temp_num_int - int(temp_num_str)
    elif op == "x":
        return temp_num_int * int(temp_num_str)
    else:
        return temp_num_int / int(temp_num_str)

def solve(eqn):
    """
    Takes two sided equation and blacks out values so that the equations are equal
    """
    for i in range(len(eqn)):
        for j in range(i+1,len(eqn)):
            if i != eqn.find('=') and j != eqn.find('='):
                eqn_tmp = eqn[:i] + eqn[i+1:j]+eqn[j+1:]
                if evaluate(eqn_tmp) == True:
                    return eqn_tmp
                else:
                    print("No solution")

def evaluate(eqn):
    """
    Evaluates a string of two sided equation and returns True if equal
    """
    lt = eqn[:eqn.find('=')]
    rt = eqn[eqn.find('=')+1:]
    if (compute(lt) == compute(rt)):
        return True
    else:
        return False

def main():
    print("22-11x4 =", compute("22-11x4"), " (expect 44)")
    print("+11x4 =",compute("+11x4"), "(expect None)")
    print("22-11x4=7x5+9", evaluate("22-11x4=7x5+9"),"(expect True)")
    print("solving 288/24x6=18x13x8: ", solve("288/24x6=18x13x8"))

main()

1 个答案:

答案 0 :(得分:1)

错误消息告诉您temp_num_str在您尝试将其转换为整数时不包含任何内容。

    temp_num_int = int(temp_num_str)
ValueError: invalid literal for int() with base 10: ''

解决这个问题的方法是将print语句放在您认为为temp_num_str分配值的每个位置,并找出它没有得到您期望值的位置,然后修复所发现的所有问题。

(实际上,阅读代码时,至少有一种方法可以解决这个问题:第一次进入循环

for ch in exp:
    if ch.isdigit():

ch可能不是数字。这导致

    else:
        if op == "":
            op = ch
            temp_num_int = int(temp_num_str)

在temp_num_str之前执行

赋予它的值
    if ch.isdigit():
        if temp_num_str == "":
            temp_num_str = ch
        else:
            temp_num_str += ch