这是在循环内发生的3向条件过滤。在这里,n必须满足三个条件中的一个;它必须是零,负数或正数。函数* dothis()*在代码中重复两次(零或负)。由于一个需要继续循环而另一个需要打破它,我们也不能对这些条件进行分组。第三个是最后过滤的,也需要在执行不同的函数* dothat()*后打破循环。
我找不到另一种方法,这样做会更优雅。这些函数调用,如果被一系列语句取代,会使它看起来更糟(这在我的实际代码中发生)。有没有可能的解决方法?
while True:
if n == 0:
dothis()
continue
if n < 0:
dothis()
break
dothat()
break
注意:所有这些必须在循环中必不可少。
答案 0 :(得分:1)
while True:
if n <= 0:
dothis()
if n == 0: continue
dothat()
break
假设dothis()
在两种情况下实际上都是相同的功能。
这将产生相同的结果。
答案 1 :(得分:1)
你可能会得到很多风格/偏好推荐(而且一个人会指出你的平等测试是有缺陷的 - 你使用的是赋值而不是相等)。我认为从长远来看,这是你感觉更容易理解的东西。
我个人最喜欢的是:
while n == 0:
dothis()
if n < 0:
dothis()
elif n:
dothat()
答案 2 :(得分:0)
分离你的决策点可能更好:1)我是这样做还是那样,2)我是否会在这里停止?
while True:
if n > 0:
dothat()
else:
dothis()
if n:
break
答案 3 :(得分:0)
我个人更喜欢将代码分成逻辑部分。如果它只能发生一次,那么只写一次。虽然这种方式并不紧凑/看起来不漂亮,但我发现更明显的是会发生什么。当我(或其他人)浏览代码时我可以说.. “好吧它会dothis()
或dothat()
然后break
或continue
。”< / em>
假设在这种情况下n
或dothis()
dothat()
while True:
# How to call
if n <= 0:
dothis()
else:
dothat()
# How to end
if n == 0:
continue
else:
break