John Zelle关于Python编程的练习(8-13)的帮助

John Zelle关于Python编程的练习(8-13)的帮助,python,Python,该计划似乎工作,但线性回归线创建似乎不是真正的最佳拟合线 我认为问题在于等式的实现。我不确定我的理解是否正确,也不确定我是否在做练习最后一段应该做的事情 这是图形库:http://mcsp.wartburg.edu/zelle/python/ppics1/code/graphics.py 如果你想试试的话 以下是练习内容: 编写一个程序,以图形方式绘制回归线,即通过点集合获得最佳拟合的线。首先要求用户通过在图形窗口中单击数据点来指定数据点。要查找输入的结尾,请在窗口左下角放置一个标有“完成”的小

该计划似乎工作,但线性回归线创建似乎不是真正的最佳拟合线

我认为问题在于等式的实现。我不确定我的理解是否正确,也不确定我是否在做练习最后一段应该做的事情

这是图形库:
http://mcsp.wartburg.edu/zelle/python/ppics1/code/graphics.py
如果你想试试的话

以下是练习内容:

编写一个程序,以图形方式绘制回归线,即通过点集合获得最佳拟合的线。首先要求用户通过在图形窗口中单击数据点来指定数据点。要查找输入的结尾,请在窗口左下角放置一个标有“完成”的小矩形;当用户在该矩形内单击时,程序将停止收集点。回归线是具有以下等式的线:

以下是方程式: 我不能上传照片

x是x值的平均值,.y是y值的平均值。当用户单击点时,程序应在图形窗口中绘制点,并跟踪输入值的计数以及x、y、x2和xy值的运行总和。当用户在“完成”矩形内单击时,程序将计算y值(使用上述方程式)与窗口左右边缘的x值相对应,以计算跨越窗口的回归线的端点。绘制线后,程序将暂停以再次单击鼠标,然后关闭窗口并退出

我似乎无法正确格式化代码,所以我包含了这个


我认为问题在于,您的pointBuild例程将用户在“完成”框中单击的点添加到回归列表中,因此每个数据集的左下角都有一个点。您可以通过在pointBuild返回之前添加“print xList,yList”来确认这一点。我会将例程修改为:

while True: # (a common python idiom for "do forever until we break")
    tempPoint = win.getMouse()
    if (tempPoint is in the DONE rectangle):
        # get out, we're done: don't forget to handle the case where
        # there are no points in xList/yList!
        break
    else:
        # draw the point
        # add it to xList, yList
我想您可能还想看看“在完成的矩形中”逻辑。IIUC,您只想知道tempPoint.getX()是否介于-50和-40之间,.getY()是否介于-50和-45之间


祝您好运!

我认为问题在于,您的pointBuild例程将用户在“完成”框中单击的点添加到回归列表中,因此每个数据集的左下角都有一个点。您可以通过在pointBuild返回之前添加“print xList,yList”来确认这一点。我会将例程修改为:

while True: # (a common python idiom for "do forever until we break")
    tempPoint = win.getMouse()
    if (tempPoint is in the DONE rectangle):
        # get out, we're done: don't forget to handle the case where
        # there are no points in xList/yList!
        break
    else:
        # draw the point
        # add it to xList, yList
我想您可能还想看看“在完成的矩形中”逻辑。IIUC,您只想知道tempPoint.getX()是否介于-50和-40之间,.getY()是否介于-50和-45之间


祝你好运!

谢谢@DSM!x和y坐标被附加到了相应的列表中。pointBuild()现在看起来是这样的:
def pointBuild(xList,yList,win):而True:tempPoint=win.getMouse()如果-50谢谢@DSM!x和y坐标被附加到了相应的列表中。pointBuild()现在看起来是这样的:
defpointbuild(xList,yList,win):而True:tempPoint=win.getMouse()if-50