2017-08-17 13 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

少なくとも2つのコマンドライン引数でスクリプトを実行しましたか?例えば'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]) 

`

だからあなたはおそらくあなたのコードがcommand line argumentsを読んでいると、それらの2があると期待しています、細部に多くを移動するには

python main.py 100 200 

ようなもので、それを起動shuld float値に解析することもできます。 通常、最初のコマンドライン引数はスクリプトファイル自体であるため、sys.argvは常に少なくとも1つの要素長です。

上記のように、スクリプトを起動するときに引数として2つの浮動小数点数を渡すか、コマンドラインから読み取られた値の代わりにスクリプトとハードコード2の値を編集するだけです(

など)。
k1 = 100 
k2 = 200 
+0

ありがとうございます!それは本当に役に立ちました。次に、コードを実行するたびにF5キーを押しただけです。今、私はsys、argvの使い方を知っています。 –

関連する問題