-4

この機能の私の主な目的は、教授が2つのコースを同時に教えているかどうかを確認することです。

def FacultyMemberOnneClass(self):
    for P in ProfessorList:
        for CL in ClassRoomList:
            for CO in CourseList:
                if CO.ProfessorId  == P.ProfessorId: 
                    Start = CO.StartTime() 
                    End = CO.EndTime() 
                    TimeRange = range(Start, End, .25) 
                    TimeRangeSet = Set(TimeRange)
4

2 に答える 2

0

入力データがどのように見えるかは明確ではないため、いくつかの仮定を立てます。

最初に、週ごとの個別の教育期間のセットが['Monday 9am-10am', 'Monday 10am-11am', ...]あり、すべてのクラス スケジュールがこれらの教育期間のサブセットで構成されていると仮定します。

次に、各期間のセットが 1 学期全体 (部分的な学期ではありません) であり、一度に 1 学期のコースを検討していると仮定します。

第 3 に、すべてのクラスが別個のものであると仮定します。MATH101 と ARTMATH101 が同じ部屋と教授を共有することはできません。教師が 1 つのコースを教えている場合、(法的に) 同時に別のコースを教えることはできません。つまり、「一度に 1 つのクラスしか教えられない」という規則に例外はありません。

class Professor(object):
    def __init__(self, name, id):
        self.name = name
        self.id = id

class Course(object):
    def __init__(self, professor_ids, periods):
        self.professors = set(professor_ids)
        self.periods = periods  # where 'period' is an enum of all teaching periods in a week

from collections import Counter

def is_professor_double_booked(professor, all_courses):
    # find all courses taught by this professor
    pcourses = [course in all_courses if professor.id in course.professor_ids]
    # count how many times each period is booked
    period_bookings = Counter(p for course in pcourses for p in course.periods)
    # return (any period booked twice?)
    return len(period_bookings) and (period_bookings.most_common()[0][1] > 1)

def professors_who_are_double_booked(professors, courses):
    for prof in professors:
        if is_professor_double_booked(prof, courses):
            print(prof.name)
于 2012-07-06T14:56:16.133 に答える
0

コードのコンテキストが少しわかりませんが、python セットの時間を作成しようとしていると思います。

日時データ型をよく見てください。以下のコードは、タイプ datetime.time のセットを作成しようとしていることを前提としています。これを Python2.6 でテストしました。

import datetime

start = datetime.datetime(2012,1,1,9,0) # 09:00 
end = datetime.datetime(2012,1,1,17) # 17:00
intervalSeconds = (end-start).seconds # seconds between start and end time.
intervalBlocks = intervalSeconds / (60*15) # 15 minute blocks between start and end time.

timeRange = [(start + datetime.timedelta(minutes=15*i)).time()
    for i in range(intervalBlocks+1)]
timeRangeSet = set(timeRange)
于 2012-07-06T05:11:32.400 に答える