2013-11-28 3 views
0

내 문제는 가능한 조합의 목록 (각 조합의 목록 포함)을 통해 확인하고 있으며,이 방법은 당첨 목록의 첫 번째 목록을 통해 확인하고 모든 그것에있는 요소들. 이 한 문으로 모든 요소를 ​​검사하도록하려면 어떻게해야합니까? 예컨대 그래서 0은 승리의 목록에있는 모든 다른 목록을 나타내며 승리에 X를 위해 그들에게 모든this with connect 4 win

을 확인 :

if 'x' in wins[0] and wins[0][0] and wins[0][1] and wins[0][2] and wins[0][3] == 'x': 
     print("\nWell done! You've won!") 
     menu(
+0

나는 이것을 대답 할 수 있도록 더 많은 프로그램을 볼 필요가 있다고 생각한다. 시작을 위해 무엇이 승리의 내용입니까? – ChrisProsser

+0

승리의 내용은 내 6 x 7 격자 내에서 4 개의 다른 조합입니다. 또한 '격자'라는 목록 내에서 6 개의 목록입니다. – Peter

답변

0

이 확인 각 하위 목록에있는 모든 항목 == X 그.

wins = [['x', 'x', 0, 'x'], ['x', 0, 0, 'x'], ['x', 'x', 'x', 'x']] 

# Iterate over all sublists 
for win in wins: 
    # Iterate over all elements in list, and check if all equals x 
    if all(i == 'x' for i in win): 
     # If this is the case - write a message and break out of the loop 
     print("Well done! You've won!") 
     break 

원한다면 원래 코드의 일부 문제를 해결해야합니다. if a and b and c and d == 'x'이라고 말할 수는 없습니다. 이것은 다음과 같이 파이썬 interpereted된다

if wins[0][0] == 'x' and wins[0][1] == 'x' and wins[0][2] == 'x' and wins[0][3] == 'x': 

다음 루프 안에이 모든 것을 넣어 :

for sublist in wins: 
    if sublist[0] == 'x' and sublist[1] == 'x' and sublist[2] == 'x' and sublist[3] == 'x': 
     print("Well done! You've won!") 
     break 

if a is not False and 
    b is not False and 
    c is not False and 
    d == 'x' 

당신과 같은 각 개별 항목을 확인하려면 그러나 이것은 정말로 성가신 일입니다. 대신 for 루프를 사용해야합니다. 하위 목록의 모든 항목을 통해 모든 하위 목록을 통해

for sublist in wins: 
    for item in sublist: 
     if item != 'x' 
      break 
    else: 
     print("Well done! You've won!") 
     break 

이 코드 의지 루프, 다음 루프 : 이것은 더 명확 할 수있다 예입니다. 'x'와 같지 않은 항목이 있으면 내부 루프가 손상됩니다.

내부 for 루프 끝에는 else 절이 있습니다. 이것은 파이썬에서 거의 사용되지 않는 기능이지만 실제로 가지고 있으면 좋을 수 있습니다. else 절의 코드는 루프가 손상되지 않은 경우에만 실행됩니다.

우리의 경우 모든 항목은 'x'와 같습니다.

+0

'x'가 나오는대로 게임을로드했습니다. 잘 돌아와서 그리드에 배치하면, 당신이 이겼습니다. 4 개의 연결된 요소를 감지 할 수 있어야합니다. – Peter

+0

그게 효과가 있었지만, 당연히 조합에 대해서만 (0) 40 개의 이상한 조합으로 이루어집니다. – Peter

+0

정말 고마워요! 그건 완벽하게 작동합니다. 나를 괴롭혀왔다. – Peter