[python] rubyとrangeが違うのね

RubyとPythonでは回数指定ループの挙動が違います。 ここに気づかないと、RubyのコードをPythonに変換しているときにハマります。 (実際小一時間ハマってました...) Pythonではrange(1,1)とかくと何もイテレートされませんが、Rubyの場合は(1..1)で1回イテレートされます。 同じにするには、Pythonの時に1を足す必要があります。 サンプルコードと結果を対比すれば一発でわかります。 ## Pythonの挙動 ```python `gutter:true; for i in range(1, 1): print(i) ``` ### 結果 ```text `gutter:false; # 何も表示されない... ``` ## Rubyの挙動 ```python `gutter:true; (1..1).each{|i| puts i } ``` ### 結果 ```text `gutter:false; 1 ``` ## PythonとRubyを一緒にするには Pythonでは+1します。 ```python `gutter:true; for i in range(1, 1 + 1): print(i) ``` ### 結果 ```text `gutter:false; 1 ``` ## 教訓 RubyをPythonで書く時にrangeを使う場合は+1しとこう。

0 件のコメント :

コメントを投稿