我有一个while循环:
def setWorkDays(dayNameList):
workDays = []
while self.count > 0: #continue loop until all 5 work days have been filled or the loop breaks at the end
for day in dayNameList: #iterate over days, adding days to work days if they are not free days, AL days, preferred days, or free Saturdays
if day in self.freeDays or day in self.alDays or (day == 'Saturday' and self.satOff is True):
continue
elif day in self.programDays:
workDays.append(day)
self.count -= 1
elif self.preferredDay is not None and day in self.preferredDay:
continue
else:
workDays.append(day)
self.count -= 1
if self.preferredDay not in self.workDays: #if iteration completes, 5 work days have not been filled, and the preferred day has not been added, add the preferred day
workDays.append(self.preferredDay)
self.count -=1
return workDays
循环背后的想法是自我计数点击0,循环终止。这是唯一一个自我计数已修改。但是我得到了奇怪的结果,循环似乎持续了至少1个计数太长,因为程序在某些情况下输出-1自我计数. 这会发生吗?while循环不应该终止第二个循环吗自我计数命中0,还是必须先完成for循环?我应该在自我计数用于检查是否自我计数是零,如果是就断开?这似乎是while循环的目的。。。在
任何语言中的
while
循环的工作方式都不符合您的预期。在通常,
while
循环的格式为:while循环在每个循环中检查一次条件。它不经常检查状况。这意味着整个代码块将在每个条件检查之间执行,除非在代码块期间执行某些控制流语句(例如})。在
continue
、break
或{实际上,这种每循环一次的条件检查有性能上的好处(计算机不必不断地评估条件),同时也限制了程序的cyclomatic complexity。在
在你的
while
循环中,你的减量数倍self.count
。在循环只会在块的开始处中断。因此,可能发生的是
self.count
在块的开头是正的,然后在单个块中递减为负值。在当条件不再为真时,}到循环外的
while
循环不会在半循环中自动退出;它只是在每个循环开始时检查条件。如果你想早点离开,你需要显式地break
(或者做一些其他非本地的事情,比如从函数中return
,或者{except
处理程序)。在如果
self.count
命中0,那么您要做的似乎是尽早退出for
循环。真的没有办法直接这么做。你每次减量都要检查一下。在但是,您实际上根本不需要
self.count
。在append
到workDays
的相同位置,将其递减。所以,检查一下你是否有5个。换句话说,每个self.count -= 1
变成:实际上有一种方法可以在Python中实现您想要的功能:使用生成器而不是列表。如果您},那么一旦获得5个条目,就停止遍历生成器。在
yield
每个值,而不是将其附加到list
,然后在结尾返回{例如:
^{pr2}$通常,您甚至不需要
list
,您只需要遍历它。为此,您可以:或者:
很多生成器可以做的事情在你理解它们之前感觉就像魔法一样,这通常意味着在你了解生成器之前,你不应该做这些事情。所以,如果这对你来说没有意义,不要只是拿起它来使用它。但是如果它促使你学会如何编写和使用生成器功能,那太好了!在
相关问题 更多 >
编程相关推荐