2017-08-01 5 views
0

私は初心者であり、Pythonを学んでいます(2.7を使用しています)。 Pythonがさまざまなタイプのループをどのように処理するかをテストする簡単なスクリプトを試しています。範囲の変更は、各繰り返しのPython forループで開始されます。

私の質問は:開始点が変数に割り当てられている場合、各繰り返しで "範囲"関数の開始点を変更することができますか?ここに私のコードの例である:

def build(n, period): 
    n2 = n 
    for digit in range(int(n2), 20): 
     print "At the top i is %d" % n 
     digit += period 
     numbers.append(digit) 

     print "Numbers now:", numbers 
     print "At the bottom i is %d" % digit 

     print "The Numbers:" 
     n2 += period 

     for num in numbers: 
      print num 


key = raw_input("Press 1 to call function \"build\", press any other key to quit.") 
if key == "1": 
    i = raw_input("What integer is our start value?") 
    amt = raw_input("What is the common difference?") 
    numbers = [int(i)] 
    build(int(i),int(amt)) 

else: 
    quit() 

私は私は「N」定数の初期値を保つことができる機能の内側第二のローカル変数「N2」を使用し、各反復のために範囲を再定義しようとしました。追加されたリストの最初の数字は共通の違いによって移動しますが、その後は常に+1の整数でステップします。私はこれを 'while'ループで簡単に行うことができますが、 'for'ループがこれを達成するために使用できるのか不思議です。

+0

あなたは他のループを探しているときに 'while'ループを使うことができます - ' while n2 <20:n2 + = period'です。また、関数に 'numbers'配列を渡さなければなりません。それ以外の場合は、グローバル変数として呼び出すことができます。 –

答えて

0

期待どおりに動作しません。式range(int(n2), 20)は、for-loopの先頭で1回だけ評価されます。 for-loopのスコープを変更することはできません。

stepのパラメータはrangeの関数にありますが、開始点は変更されません。開始点は変更されません。これは、繰り返し処理の次の要素のみを定義します。

+0

範囲外のインデックスを取得するにはどうすればよいですか? –

1

rangeは、あなたのforループの始めにその関数を呼び出す瞬間に固定リストを作成します。 forループの先頭は、ループ内で何をしても、リストの次の要素にn2を代入すると考えることができます。あなたが範囲の期間を変更したい場合は、第三引数を使用します。

range(n, 20, period) 

ではなく、大きさ1のステップの範囲でサイズperiodのステップに移動します。

関連する問題