2014-05-02 34 views
1
list1 = [] 

elective = [] 
prereq = [] 

someNumber = 1 

dict2 = { 
1: SEM2period1, 2: SEM2period2, 
2: SEM2period3, 4: SEM2period4, 
5: SEM2period5, 6: SEM2period6, 
7: SEM2period7, 8: SEM2period8 
} 


for key, dlist in dict2.items(): 
    if not dlist: 
     list1.append("Free Period") 
     someNumber += 1 
     continue 
    for item in dlist: 
     if item in list1: 
      continue 
     elif item in elective: 
      elecStorage.append(item) 
     elif item in prereq: 
      list1.append(item) 
      someNumber += 1 
      break 
     if someNumber > len(list1): 
      for index in elecStorage: 
       if index in list1: 
        break 
       else: 
        list1.append(index) 
        someNumber += 1 
        elecStorage[:] = [] 
        break 

注:(选修),选修和前提条件都包含字符串,如“微积分1”(为前提条件),或“天文学”中dict2的变量是包含函数较早调用的类(如教室中)名称的列表。Python代码不附加“免费时代”时,我希望它

以“for key,dlist in dict2.items()”开头的片段应该搜索第一个列表的元素,首先检查是否存在列表,如果没有列表,在列表中追加“Free Period”。然后它应该检查prereq中是否存在列表中的任何元素,最后如果没有,则将选项中的某些内容添加到它中。 (因为如果它超过了第一个条件,可以肯定至少有一个选修课是安全的),然后循环回去并对下一个元素列表执行相同的操作。

问题是,除非所有的列表都不包含任何内容,否则它不会追加'Free Period',我不知道为什么。

想法?

+0

什么类型的对象SEM2periodX特别是没有时名单。这是否像“无”? – DanGar

+0

这将是无,是的。 – LukeG

+0

你能证实SEM吗?在至少有一个非空列表的情况下,它真的是None,而不是一个空列表吗? '[print x for x in dict2.values()]'应该有助于调试。 – clemej

回答

0

您的SEM *期*中的某些内容可能会返回空列表,而不是无。对空列表'[]'的正确检查是'if list1 == []'或'if len(list1)== 0'。

无是占位符,表示不存在的对象。 []是一个有效的列表对象,它只是没有在列表中的条目。 '如果不是foo'只是检查None,而不是空的列表。

0

您应该验证SEM2period变量的内容,如果没有它们,这很难诊断。我没有遵循你的逻辑的其余部分,但它只是你感兴趣的第一个循环块,是吗?也许你可能有一个包含空列表的列表?这会弄乱你的逻辑:

d2 = {1:['elec'], 2:[]} 

for key, dlist in d2.items(): 
    if not dlist: 
     print 'empty!' 
    else: 
     print dlist 

给你

['elec'] 
empty! 

d2 = {1:['elec'], 2:[[]]} 

for key, dlist in d2.items(): 
    if not dlist: 
     print 'empty!' 
    else: 
     print dlist 

给你

['elec'] 
[[]]