31919


Python3(3.5.2)で引数を1つとり、その引数に応じてfor文のステップ数を変更する方法をご教示ください。  
具体的には以下動作です。(以下は考えの説明をするための疑似コードです。実際には機能しません)

コマンドラインにて  
python ./test.py 100  
と実行した場合

引数が50までは以下のような1ずつ増分するfor文処理を実施します。

[code]

    for i in range(0, args[0], 1): #50まで
        *hogehoge*
    
[/code]

50からは以下のような0.5ずつ増分するfor文処理を実施します。

[code]

    for i in range(50, args[0], 0.5):
        *hogehoge*
    
[/code]

つまりこの例では、 _hogehoge_ 処理は、全部で150回実施されます。  
(0から50が50回、50から100が100回)  
このとき、 _hogehoge_ 部分の処理は同じです。

if文で分割すれば処理可能ですが、 _hogehoge_ 部分の処理が同じであり、  
可能ならば1つのfor文で簡潔に表現したいと考えております。  
ご教示ください。

以上


CC BY-SA 3.0
2017-01-17T14:57:36.640
31918
2017-01-17T15:55:23.913
20259
question
python python3
for文のステップを途中で変更したい


hogehoge部分の処理が共通しているからといって，異なるステップ幅のfor文をひとつにまとめるのはお勧めしません．なぜならfor文は共通した処理をまとめるためのものではないからです．  
共通した処理をまとめるPythonの機能として関数があります．  
なので，二つのfor文でhogehogeを実行する関数を呼び出すようにするのがこの場合は適切でしょう．  
次のようにします．

[code]

    def do_hogehoge():
        *hogehoge*
    for i in range(0, 50, 1):
        do_hogehoge()
    for i in range(50, args[0], 0.5):
        do_hogehoge()
    
[/code]

[追記]  
`range`のステップ幅はintegerである必要がありました．なので上のコードは動きません．

[code]

    range(50, args[0], 0.5)
    
[/code]

を

[code]

    [0.1*t for t in range(500, args[0]*10, 5)]
    
[/code]

などとするか，`numpy.arange`を使って

[code]

    numpy.arange(50, args[0], 0.5)
    
[/code]

などとする必要があります．ただし`args[0]`はintegerと仮定しています．


CC BY-SA 3.0
2017-01-17T15:08:44.343
31919
2017-01-17T15:55:23.913
2017-01-17T15:55:23.913
4548
4548
31918
answer