0

我想绘制这段代码,但它输入了

IndexError:列表索引超出行中的范围:k = float(sys.argv[1])

谁能帮我解决这个问题?

canWidth=500
canHeight=500
**strong text**
def setupWindow () :
    global win, canvas
    from tkinter import Tk, Canvas, Frame
    win = Tk()
    canvas = Canvas(win, height=canHeight, width=canWidth)
    f = Frame (win)    
    canvas.pack()
    f.pack()

def startApp () :
    global win, canvas
    import sys
    k1  = float(sys.argv[1])   # starting value of K
    k2  = float(sys.argv[2])   # ending   value of K
    x = .2                     # is somewhat arbitrary
    vrng = range(200)          # We'll do 200 horz steps
    for t in range(canWidth) :
        win.update()
        k = k1 + (k2-k1)*t/canWidth
        print ("K = %.04f" % k)
        for i in vrng :
            p = x*canHeight
            canvas.create_line(t,p,t,p+1)  # just makes a pixel dot
            x = x * (1-x) * k              # next x value
            if x <=0 or x >= 1.0 :
                print ("overflow at k", k)
                return

def main () :
    setupWindow()       # Create Canvas with Frame
    startApp()          # Start up the display  
    win.mainloop()      # Just wait for user to close graph

if __name__ == "__main__" : main()
4

1 回答 1

2

看起来程序需要 2 个浮点命令行参数。`

k1  = float(sys.argv[1])   # starting value of K
k2  = float(sys.argv[2])  

`

所以你可能应该用类似的东西来启动它

python main.py 100 200

更详细地说,您的代码正在读取命令行参数,并且预计其中有 2 个,也可以解析为浮点值。通常,第一个命令行参数是脚本文件本身,因此sys.argv总是至少有一个元素长。

话虽如此,您可以按照上面的建议进行操作,并在启动脚本时传递 2 个浮点数作为参数,或者只是编辑脚本并硬编码 2 个值而不是从命令行读取的值,就像这样

k1  = 100  
k2  = 200  
于 2017-08-17T16:37:40.497 回答