2024年6月22日土曜日

Python記述の仕組み

import sc3

for person in 非常勤:
    for day in 今月:
            if shift_schedules[person][day][0]=='':
                v=sc3.GetShiftVar(person,day,'その他')
                s='非常勤は予定入力がないときはその他 '+staffdef[person]+' '+daydef[day]
                sc3.AddHard(v,s)
                


Q. 「Pythonによる制約」で、ソースを見たところ、あまりの少なさに驚きました。上のような記述でよい理由を教えてください。

Ans.

確かに、私が書いたコードは、上記だけで、僅か10行程度です。「非常勤」やら、「今月」とか一体どこに書いてあるというと、「ソース全体」をご覧になってください。「ソース全体」の最後の方を見ると、上記コードが現れます。



スケジュールナースのGUIは、ほぼ表です。折角制約に関わる情報が表として書いてあるのですから、それをそのままPythonで利用できれば、手間が省けます。「ソース全体」は、GUIの表をPythonに変換したソースとユーザが書いたソースの合体になります。Pythnコンパイラに渡されるのは、この合体した「ソース全体」になります。

たとえば、shift_schedulesは、予定を2次元配列にしたものです。


これを読み込んで、予定が何もエントリされていないのならば(=’’)、その他シフトで埋めてしまう、ことで非常勤医師の自動アサインを防止、予定入力した予定しか勤務しない、を実装している訳です。

「非常勤医師」にしろ、「今月」にしろ、集合です。カレンダを想い浮かべてください、曜日集合を定義するのに、Pythonで記述するのとどちらが楽でしょうか? 集合の定義はGUIの方が楽に出来ます。マウスでカレンダ上の日を選択していくだけで行えます。ならば、それをPythonで利用可能にして、ソース記述量を出来る限り少なくしよう、という意図で設計しています。

ちなみにPython ポストプロセスでは、解も参照することが出来ます。これを利用してPywin32で解をEXCELに整形出力しているのは周知のとおりです。

Execel整形出力





 

0 件のコメント:

コメントを投稿