출처 : 반크_세계유산 경복궁
참고풀이]
import random
board= [[' ' for x in range (3)] for y in range(3)]
def Show():
# 게임 보드를 그린다.
for r in range(3):
print(" " + board[r][0],end="")
print("| " + board[r][1],end="")
print("| " + board[r][2])
if (r != 2):
print("---|---|---")
#Main Part
N=0
while True:
N+=1
if N>4: break
# 게임 보드를 그린다.
Show()
# 사용자로부터 좌표를 입력받는다.
while True:
x = int(input("다음 수의 x좌표를 입력하시오(열): "))
y = int(input("다음 수의 y좌표를 입력하시오(행): "))
# 사용자가 입력한 좌표를 검사한다.
if board[y][x] != ' ':
print("잘못된 위치입니다. ")
continue
else:
board[y][x] = 'X'
break
#세번째, 직선, 대각선을 체크했을 때
#사용자 값이 2개라면 그 마지막 위치에 컴퓨터 값을 넣는다.
if N<2:
#컴퓨터가 놓을 위치를 결정한다.
#첫번째, 1행 1열이 비어있다면 그곳에 컴퓨터 값을 넣는다.
#아니면 임의의 곳에 컴퓨터 값을 넣는다.
if board[1][1]==' ':
board[1][1] = 'O'
else:
while True:
y=random.randint(0,2)
x=random.randint(0,2)
if board[y][x] != ' ':
continue
else:
board[y][x]='O'
break
else:
chk=False #True
while True:
#행별 사용자 값이 2이면 그행 빈칸에 컴퓨터 값을 넣는다.
for r in range(3):
cnt=0
for c in range(3):
if board[r][c]=='X':
cnt+=1
if cnt==2:
for c in range(3):
if board[r][c]==' ':
board[r][c]='O'
chk=True
break
elif cnt==3:
print("사용자가 이겼습니다.")
chk=True
break
ccnt=0
for c in range(3):
if board[r][c]=='X':
ccnt+=1
if ccnt==3:
print("컴퓨터가 이겼습니다.")
chk=True
if chk: break
#열별 사용자 값이 2이면 그열 빈칸에 컴퓨터 값을 넣는다.
for c in range(3):
cnt=0
for r in range(3):
if board[r][c]=='X':
cnt+=1
if cnt==2:
for r in range(3):
if board[r][c]==' ':
board[r][c]='O'
chk=True
break
elif cnt==3:
print("사용자가 이겼습니다.")
chk=True
break
ccnt=0
for r in range(3):
if board[r][c]=='X':
ccnt+=1
if ccnt==3:
print("컴퓨터가 이겼습니다.")
chk=True
if chk: break
#우방향 대각선의 사용자 값이 2이면 그 대각선 빈칸에 컴퓨터 값을 넣는다.
cnt=0
for r in range(3):
if board[r][r]=='X':
cnt+=1
if cnt==2:
for r in range(3):
if board[r][r]==' ':
board[r][c]='O'
chk=True
break
elif cnt==3:
print("사용자가 이겼습니다.")
chk=True
break
ccnt=0
for r in range(3):
if board[r][r]=='X':
ccnt+=1
if ccnt==3:
print("컴퓨터가 이겼습니다.")
chk=True
if chk: break
#좌방향 대각선의 사용자 값이 2이면 그 대각선 빈칸에 컴퓨터 값을 넣는다.
cnt=0
for r in range(3):
if board[r][2-r]=='X':
cnt+=1
if cnt==2:
for r in range(3):
if board[r][2-r]==' ':
board[r][c]='O'
chk=True
break
elif cnt==3:
print("사용자가 이겼습니다.")
chk=True
break
ccnt=0
for r in range(3):
if board[r][2-r]=='X':
ccnt+=1
if ccnt==3:
print("컴퓨터가 이겼습니다.")
chk=True
if chk: break
참고풀이 결과]
대한민국의 아름다운 영토, 독도
'프로그램 > Python 1000제' 카테고리의 다른 글
Python 105제] 파이썬 EXPRESS CHAPTER 4. Porgramming 03. p198 (0) | 2022.12.09 |
---|---|
Python 104제] 파이썬 EXPRESS CHAPTER 4. Programming 02. p198 (0) | 2022.12.09 |
Python 102제] 어파처! p278 도전문제 (0) | 2022.10.28 |
Python 101제] 어파처! p229 도전문제 (0) | 2022.10.21 |
Python 100제] 어파처! p209 응용문제 (0) | 2022.10.07 |
댓글