如果嵌套的if语句不符合条件,如何继续使用外部if?例如。我有这个(非常不切实际)的例子:
a = 2
if( a > 1 ):
if( a == 3 ):
print "yes"
elif( a == 2 ):
print "yes"
我希望接下来检查== 2。我该怎么做?
(我在嵌套中有多个条件,如果我需要检查,所以我宁愿在那个外部 - 如果没有一个巨大的字符串和/或语句。我也有多个elif语句所以我不喜欢我想把那些嵌套的那些精灵混在一起。)
更深层的例子:
b = 8
if( a > 1 ):
if( b == 3 ):
doSomething()
elif( b == 4 ):
doSomethingElse()
elif( b == 5 ):
more()
elif( -1 <= a <= 1 ):
asd()
elif( a < -1 ):
if( b == 7 ):
asdfasdf()
elif( b == 8 ):
asasdf()
答案 0 :(得分:3)
结合条件并展平嵌套:
a = 2
if ( a > 1 and a == 3 ):
print "yes"
elif ( a == 2 ):
print "yes"
答案 1 :(得分:3)
考虑到这个例子只是指示性的,但你最初的问题是要理解嵌套if-else,关联,范围......
在Python中,与类似Algol的语言不同,我们没有划分的块(例如,在C中我们使用'{'来创建一个块。这里所有的块都是通过适当的空格缩进。它就像哲学一样,你读到的是你会得到的。这个课程是坚持“代码可读性”的设计理念。
在类似的上下文中,后续if/else
语句是否是外部或内部if语句的一部分取决于它是如何缩进的。
你的例子
a = 2
if( a > 1 ):
if( a == 3 ):
print "yes"
elif( a == 2 ):
print "yes"
此处elif
是外部if
的一部分,因为它是它所读取的内容,而不是它的缩进方式。而是代码的以下修改版本
a = 2
if( a > 1 ):
if( a == 3 ):
print "yes"
elif( a == 2 ):
print "yes"
会使逻辑明显不同。更多因为缩进的elif
块现在与内部if。
与以下C代码
相比,现在更加容易if (a > 1)
if (a == 3)
printf("Hello World\n");
else if (a == 2)
printf("Yes");
如果与else if
相关联,您能轻易说出来吗?
答案 2 :(得分:1)
您如何期望计算机清楚这一点?
if a > 1:
# ANYTHING
elif a == 2:
# ANYTHING
根据定义,永远不会在第二个块中执行任何操作。
我相信你的意图可能更多:
def action():
if a > 1:
if b == 2:
doSomething()
return
if b == 3:
doSomethingElse()
return
if a == 2: # Note: NO elif!
doDefaultForA2()
return
showError("Unknown command")
return
有多种方法可以实现此行为。我喜欢function+return
模式,因为它很好地构造了代码。另一种方法是使用handled
标志:
unhandled = True
if a > 1:
if b == 2:
doSomething()
unhandled = False
if unhandled and b == 3:
doSomethingElse()
unhandled = False
if unhandled and a == 2: # Note: NO elif!
doDefaultForA2()
unhandled = False
if unhandled:
showError("Unknown command")
(显然你可以使用elif在这里添加一些快捷方式。但是使用显式的“if nothandled”会使代码更加冗长,逻辑和更容易添加新选项。)
答案 3 :(得分:0)
a = 2
if a > 1:
if a == 3:
print "a is 3"
elif a == 2:
print "a is 2"
答案 4 :(得分:0)
您想要什么结果:
将其翻译成简单代码
if a in (2, 3):
print "yes"
“更深”的例子:你不需要你的一些嵌套。以下简单代码与您的代码相同:
if a == 1:
if b == 7:
print "yes 1, 7"
elif b == 8:
print "yes 1, 8"
elif a == 2:
print "yes 2"
elif a == 3:
print "yes 3"
elif a == 4:
print "yes 4"
elif a == 5:
print "yes 5"
顺便说一句,请阅读PEP 8并查看其他人编写的一些代码...... if( foo == 9 ):
是一种陌生的模式,会导致读者放慢速度,并且可能在将来避开这条路。
答案 5 :(得分:0)
另一种编写它的方法是使其更容易阅读并且可能更容易编写,将其中一个检查的选择放入字典中。这只有在您确实检查相等性时才有效,但可能适用于您。
#used when a>1
bchoices1 = {}
bchoices1[3] = doSomething
bchoices1[4] = doSomethingElse
bchoices1[5] = more
#used when a==1
bchoices2 = {}
bchoices2[7] = asdfasdf
bchoices2[8] = asdfas
if( a > 1 ):
bchoices1[b]()
elif( a == 2 ):
asd()
elif( a == 1 ):
bchoices2[b]()