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 件のコメント:
コメントを投稿