首页 > 解决方案 > python:TypeError:无法解压不可迭代的NoneType对象

问题描述

嘿,所以我正在做一个项目,我为给定的线性方程绘制图表

我收到了这个错误:

TypeError:无法解压不可迭代的 NoneType 对象

完整的回溯错误:

回溯(最近一次通话最后):

第 116 行,在 run()

第 114 行,在运行 plot()

第 102 行,在 plot solx 中,soly = solve_eq()

TypeError:无法解压不可迭代的 NoneType 对象

代码:

import matplotlib.pyplot as plt
import sympy as simp
import re


'''
Linear Eq formula = y = ax + c 
'''

#eq1 = a1x + b1y + c1 = 0
#eq2 = a2x + b2y + c2 = 0

def a_inp_eq1():
    global a1
    a1 = input('Please specify the value of "a" for the first equation: ')
    a1 = simp.sympify(a1)

    global b1
    b1 = input('Please specify the value of "b" for the first equation: ')
    b1 = simp.sympify(b1)

    global c1
    c1 = input('Please specify the value of "c" for the first equation: ')
    c1 = simp.sympify(c1)

def a_inp_eq2():
    global a2
    a2 = input('Please specify the value of "a" for the second equation: ')
    a2 = simp.sympify(a2)

    global b2
    b2 = input('Please specify the value of "b" for the second equation: ')
    b2 = simp.sympify(b2)

    global c2
    c2 = input('Please specify the value of "c" for the second equation: ')
    c2 = simp.sympify(c2)

def check_errors_eq1():
    try:
        int(a1)
        int(b1)
        int(c1)
    except ValueError:
        try:
            float(a1)
            float(b1)
            float(c1)
        except ValueError:
            print('One of your inputs may not be a valid one please try again, this time with valid ones')
            a_inp_eq1()

def check_errors_eq2():
    try:
        int(a2)
        int(b2)
        int(c2)
    except ValueError:
        try:
            float(a2)
            float(b2)
            float(c2)
        except ValueError:
            print('One of your inputs may not be a valid one please try again, this time with valid ones')
            a_inp_eq2()



def conversion():
    global a_con1
    a_con1 = a1 * -1
    global c_con1
    c_con1 = c1 * -1

    global a_con2
    a_con2 = a2 * -1
    global c_con2
    c_con2 = c2 * -1


# equation solver
def solve_eq():
    x = simp.Symbol('x')
    y = simp.Symbol('y')
    eq = (a1 * x + b1 * y + c1 , a2 * x + b2 * y + c2)
    global sol
    sol = simp.solve(eq , x , y)
    print(sol)
    m = re.match(r'^{x: (\d+), y: (\d+)}' , str(sol))
    if m:
        return m.group(1) , m.group(2)


# defining the main plotting function
def Linear_eq(a,b,clr):
    x = list(range(0,11))
    y = [(a * ints + b) for ints in x]
    print(y)
    plt.plot(x , y ,label = 'linear' ,linestyle = '-' ,color= clr)

def plot():
    solx , soly = solve_eq()
    Linear_eq(a_con1,c_con2,'r')
    Linear_eq(a_con2,c_con2,'b')
    plt.annotate('(%s,%s)'%(solx,soly) , (float(solx),float(soly)))
    plt.show()

def run():
    a_inp_eq1()
    a_inp_eq2()
    check_errors_eq1()
    check_errors_eq2()
    conversion()
    plot()

run()

我认为问题出在我的正则表达式上,但我不知道如何解决它

这是我试图匹配的输出: {x: -3, y: -2}

这是这样做的功能:

def solve_eq():
    x = simp.Symbol('x')
    y = simp.Symbol('y')
    eq = (a1 * x + b1 * y + c1 , a2 * x + b2 * y + c2)
    global sol
    sol = simp.solve(eq , x , y)
    print(sol)
    m = re.match(r'^ {x: (\d+), y: (\d+)}' , str(sol))
    if m:
        return m.group(1) , m.group(2)

任何帮助将不胜感激,感谢您的时间!

标签: pythonmatplotlibsympy

解决方案


推荐阅读