金宏和實です。Python入門の第4回です。今回はP制御のライントレースです。PはProportional(比例)の頭文字です。
 第3回の基本のライントレースでは次のようなif文でステアリングの値を変えました。

        if (color_sensor.reflection(port.B) < 50): # 黒い線の上
            # ステアリング30で右に。
            motor_pair.move(motor_pair.PAIR_1, 30, velocity = 300)  
        else: # 白いところの上
            # ステアリング-30で右に。
            motor_pair.move(motor_pair.PAIR_1, -30, velocity = 300)

 光センサーの返す値と50を比較して大きければ、黒い線側を向くようにステアリングを30にして、小さければ白いところを向くようにステアリングを-30にしました。

 P制御、比例制御というと難しそうに聞こえるかもしれませんが、暗いか明るいかを判断するしきい値である50と光センサーの返す値を引き算して、適当な係数を掛けてやれば、ステアリングの値として使えるんじゃないのという発想です。ですから、プログラムはよりシンプルになります。

from hub import port
import motor_pair, color_sensor, runloop

motor_pair.pair(motor_pair.PAIR_1, port.C, port.D)

async def line_follow_forever():
    while (True):
        err = 50 - color_sensor.reflection(port.B)
        corr = int(err * 0.5)
        motor_pair.move(motor_pair.PAIR_1, corr, velocity = 300)

async def main():
    await line_follow_forever()

runloop.run(main())

 変数errに50と光センサーが返す値の差を代入します。黒い線の上にいれば、errの値は正の値になり、白いところにいれば負の値になります。それに係数0.5を掛けた値をステアリングの値(corr)にします。係数0.5に意味はありません。ちょうど良い感じにライントレースしてくれるように値を調整すれば良いだけです。int(err * 0.5)のint()は計算結果を整数値に変換する関数です。
 if文を使うより、簡単なコードになるところがプログラミングの「おもしろみ」です。