【发布时间】:2020-07-25 08:32:35
【问题描述】:
我正在尝试制定一个计划,该计划是一个课程列表,只有在完成必修课程或在同一学期参加必修课程时才能添加这些课程。
下面我的代码几乎可以工作,但它总是重用这些类,即使它们已经完成/使用。我试图用and (class_list[i][0] not in classes_done) 阻止这种情况,我希望它不会进入 if 语句,但它似乎被忽略了。
这个 if 语句的其余部分似乎工作正常。 (class_list[i][3] == '' or class_list[i][3] in classes_done) 如果是的话,这门课是否有必修课?
(class_list[i][2] in classes_for_semester or class_list[i][2] == '')如果是的话,这门课有共修课吗?是在class_for_semester中还是已经完成?
class_list 变量的组织方式如下['name', 'credit', 'co-requisite', 'required completed classes', 'empty']。我将其他变量添加为 cmets 以显示它们的外观。
class PlanGenerator:
def generator(max_credit_allowed, min_credit_allowed, classes_done, class_list):
classes_for_semester = []
credits_for_semester = 0
semester = 0
full_plan = []
# class_list = [['MA 241 ', '4', '', '', ''], ['PS 150 ', '3', 'MA 241 ', '', ''], ['UNIV 101', '1', '', '', ''], ['COM 122', '3', '', '', ''], ...]
# max_credit_allowed = 16
# min_credit_allowed = 12
# classes_done=['UNIV 101']
while len(classes_done) != len(class_list): # keep going until all classes are used
while int(min_credit_allowed) > credits_for_semester: # keep going until at least the minimum credits are in the semester
semester += 1
for i in range(len(class_list)): # looping over the class list
if int(class_list[i][1]) + credits_for_semester < max_credit_allowed: #if this class was to be added would it go over the max credit for semester if yes go to next class
if (class_list[i][3] == '' or class_list[i][3] in classes_done) and (class_list[i][2] in classes_for_semester or class_list[i][2] in classes_done or class_list[i][2] == '') and (class_list[i][0] not in classes_done):
classes_for_semester.append(class_list[i][0])
credits_for_semester += int(class_list[i][1])
print('classes for semester', classes_for_semester)
print('semester credits', credits_for_semester)
classes_done.append(classes_for_semester)
full_plan.append(semester)
full_plan.append(classes_for_semester)
print('full plan', full_plan)
classes_for_semester = []
credits_for_semester = 0
print('done')
print(full_plan)
我希望我的解释是有道理的。 也许有人可以理解我的错误并帮助我找到一个好的解决方案。 另外,如果您看到任何可以使此代码更简单的内容,请告诉我。
非常感谢
【问题讨论】:
-
根据您的评论部分(我假设这是此函数的示例输入),
while len(classes_done) == len(class_list)将阻止它运行,因为len(classes_done)为 1,len(class_list)为 4+。跨度> -
是的,你是对的。我的意思是把!=,现在应该在帖子中修复。
标签: python list for-loop if-statement while-loop