[python] rubyとrangeが違うのね

RubyとPythonでは回数指定ループの挙動が違います。
ここに気づかないと、RubyのコードをPythonに変換しているときにハマります。
(実際小一時間ハマってました...)
Pythonではrange(1,1)とかくと何もイテレートされませんが、Rubyの場合は(1..1)で1回イテレートされます。
同じにするには、Pythonの時に1を足す必要があります。
サンプルコードと結果を対比すれば一発でわかります。

Pythonの挙動

1
2
for i in range(1, 1):
    print(i)

結果

# 何も表示されない...

Rubyの挙動

1
2
3
(1..1).each{|i|
    puts i
}

結果

1

PythonとRubyを一緒にするには

Pythonでは+1します。

1
2
for i in range(1, 1 + 1):
    print(i)

結果

1

教訓

RubyをPythonで書く時にrangeを使う場合は+1しとこう。

0 件のコメント :

コメントを投稿