2015-11-11 3 views
2

Есть ли способ, чтобы упростить это Условный оператор:упрощать, если заявление Python

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

исходя из класса, где сами [у, х] принести данные в таблице.

Оригинальный код:

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».

+0

Если один из ответы ниже исправляют вашу проблему, вы должны принять ее (щелкните галочку рядом с соответствующим ответом). Это делает две вещи. Это позволяет всем знать, что ваша проблема решена до вашего уровня удовлетворенности, и это дает человеку, который помогает вам кредитовать помощь. [См. Здесь] (http://meta.stackexchange.com/a/5235) для полного объяснения. –

ответ

7

Конечно, вы можете использовать any для этого. Это должно быть эквивалентно.

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

Спасибо, это было именно то, что я искал! –

+0

@GleyakiHope Great! Рад, что смог помочь! –

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 
Смежные вопросы