2017-08-17 79 views
-1

我想繪製這個代碼,但它進入我得到了一個IndexError:列表索引超出範圍在sys.argv中[1]

IndexError: list index out of range in the line: 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() 
+2

您是如何啓動該計劃的? –

+4

你是否用至少兩個命令行參數運行腳本?例如'python3 script.py arg1 arg2' –

+1

如果你用'python filename.py'啓動它,你會得到這個錯誤。例如,如果您使用'python filename.py 1 2'啓動它,則不會出現錯誤。我希望這是明確的原因。 – Michael

回答

2

它看起來像程序期待2浮動命令行參數。 `

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

`

所以你shuld可能的東西推出像

python main.py 100 200 

走多到細節,你的代碼讀取command line arguments,它的期望那裏是他們的2 ,也可以解析爲浮點值。 通常,第一個命令行參數是腳本文件本身,所以sys.argv總是至少有一個元素長。

這就是說,你可以按照上面的建議做,並且在啓動腳本時傳遞2個浮點數,或者編輯腳本和硬編碼2值而不是從命令行讀取的值,如

k1 = 100 
k2 = 200 
+0

非常感謝!這真的很有幫助。然後,我每次想運行代碼時都按了F5。現在我知道如何使用sys,argv。 –

相關問題