我正在编写一个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()
答案 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
)