「Pythonでロボットプログラミング競技に参加していました!」
って言えた方が、
「スクラッチっぽいブロックでプログラミングしてました」
よりかっこよさそう。

そのくらいの認識だったのですが、とある筋から、
「Pythonの方が5倍速いらしい」
と、聞こえてきたので検証してみました。
(ド素人の思い付き実験なので間違ってたらごめんなさい。詳しい人教えてください。)

作ってみたのはこんなプログラム。

タイマーをリセットしてから、「カラーセンサーの値を変数Colに格納する」を2000回繰り返して、タイマーの値を変数Timeに格納。
「ちゃりーん!」って鳴らして、かかった時間を表示。スマイル挟んでもう一回表示です。
かかった時間は1.134秒でした。やるたびに少し違うけど、だいたいこんな感じ。

次はいよいよPythonです。
AIに「SpikePrimeのPythonで、~」してって、上記の内容をもう少しちゃんとかみ砕いて書いてもらったけど、全然動かない。そもそも自分自身よく分かってないので直せもしない。仕方ないのでSpikePrimeのナレッジベースを読みまくったけど、ものすごく調べにくい。何とかならないのかなぁ。これ。

で、検索しまくっていろいろ勉強してようやく動くようになったのがこれ。

time.time_ms()が何度やっても0しか返さないので、死にかけましたが、検索して見つけた以下のサイトでtime.time_ms()が整数しか返さないと分かったので、time.ticks_ms()を使って解決できました。
ありがとうございました!(WEB書く人は偉大!)
【SPIKE Prime×Python】時間が整数で発狂した @SASNEWS

time.tick_ms()がちゃんと正しい時間を返すのか不安だったので、time.sleep_ms(1)をループに入れて検証しています。1msを2000回待ったので2001。ちゃんと2秒かかっているので正しそう。カラーセンサーの読み取りサイクルは1msかかってないってこと?ちょっと不安な気がします。もしかしたら、読み取った値が更新されてようがどうしようが、とにかく値をもぎ取ってくるスタイルなのかも。

time.sleep_ms(1)の頭に#を付けてコメント行にすると、なんと0.046秒で完了しているって!
いくら何でも速すぎるのでは?って気がするけど、計算機で割り算したら、およそ24.6倍でした。

Python恐るべしじゃぁ。

ちなみにその過程でtime.sleep_ms(0)としたときは、以下のようになりました。

0.389秒だと!0秒待ちますよっていう命令が入るだけで、すでに影響が出てしまう。
CPUの中の処理って恐しい世界ですね。無駄なコードを書いてはいけないのだ。

面白かったのでワードブロックでも同じことをやってみました。

結果は2.034秒。
ワードブロックでも倍ほど時間がかかってしまっています。

微調整のために、ライントレースのループの中に「0秒待つ」とか残しておくと、予想以上に邪魔をしているかもしれませんねぇ。

勉強になりました!