2024年9月3日火曜日

論理式で表現できないPython変数が必要な場合

Python記述では、全く新しい変数は記述できません。例えば

v=w&z

で、新しい変数vは、記述出来ますが、それは、wとzが

w=sc3.GetShiftVar(person,day,"半日")

z=sc3.GetShiftVar(person,day+1,"半日")

のように、元になるシフトが定義されていることが要件です。つまり、論理演算を基にした変数しか定義できないようにしています。

では、論理演算で表現できない変数が必要なときは、どのようにすれば良いでしょうか?

苦肉の策として、次を考えました。

一般に先月部は、過ぎ去った過去です。先頭のday=0の日は、「制約表示日」です。通常、5日分を取っていますが、これをー1日にしてそれを借用します。

通常先月の予定で埋められているので、そこは選択して空白にしてもらいます。空白でないと、エラーとなるように記述します。表示開始日は、全部空白にしないと始められないようにしています。


import sc3

def work_check():
    for person in 半日:
        v=shift_schedules[person][0][0]
        if v !="":
            print("予定エラー "+staffdef[person]+":"+v)
            print("!!!!!\t ERROR 本プロジェクトは、表示開始日をWorkとして使用します。\n予定を全てブランクにしてください。\n")
            raise Exception

 


ここで、-1した表示開始日は、行制約は効いていません。通常、連続休み制約等で、制約開始日を入れて6日間、効きますがその範囲外です。
列制約も制約していません。従い、そのpersonのシフト変数でありながら、
自由に使える変数となります。
            

0 件のコメント:

コメントを投稿