2015-11-11 165 views
2

有简化的方式这个if语句:简化if语句的Python

if self[by1,bx1]=='A' or self[by1,bx1+1]=='A' or self[by1,bx1+2]=='A' or self[by1,bx1+3]=='A': 

从一个类来这里自我[Y,X]在一个表中提取数据。

原始代码是:

for i in range(4): 
       if self[by1,bx1]=='A' or self[by1,bx1+1]=='A' or self[by1,bx1+2]=='A' or self[by1,bx1+3]=='A': 
        print('There is already a ship here') 
        by1=0 
        bx1=0 
        self.placing_Battleship_p1() 
       elif by1==0 or by1==0: 
        pass 
       else: 
        self[by1,bx1+i]='B' 

我想它来检查我的表中的每一位置改变他们的“B”之前不等于“A”。

+0

如果一个下面的答案解决了您的问题,您应该接受它(点击相应答案旁边的复选标记)。这有两件事。它让每个人都知道你的问题已经得到解决,让你满意,并且它可以帮助你帮助你。 [见这里](http://meta.stackexchange.com/a/5235)的完整说明。 –

回答

7

当然,你可以使用any这个。这应该是等同的。

if any(self[by1,bx1+x]=='A' for x in range(4)): 
+0

谢谢,那正是我一直在寻找的! –

+0

@GleyakiHope太棒了!很高兴我能帮上忙! –

2

您可以使用any,正如Morgan Thrapp所建议的那样。或者你可以使用in

if 'A' in {self[by1,bx1+i] for i in range(4)}: 
1

你可以把数组的一个子集,因为它是连续的,并使用在:

if 'A' in self[by1,[bx1:bx1+3]]: 

例如:

by1=0 
bx1=3 
a=[[2, 3, 4, 5, 6, 7], [10, 10, 10, 10]] 
print (6 in a[by1][bx1:bx1+2]) 
>>> True