[Python] 파이썬 문제풀기
파이썬을 공부하고 있던중에.. 아는 건축학과 다니시는 형님이 학부과제를 하나 부탁하셨다..
어떤 언어로 짜도 상관없다고 하셔서 파이썬 공부도 할 겸 짜본 코드.
문제(과제를 누가 검색할 수 있으므로 이름은 바꿈..)
진주를 잡아라
- 10 x 10의 공간, 임의이 자리에 진주와 병진이 위치 지정
- 진주: 1칸 랜덤
- 병진: 진주가 있는 방향의 최단거리. 3턴을 2,1,0 칸씩 움직일 수 있음 (반복)
1) 진주가 병진이를 잡는데 걸리는 횟수 산정
2) Simulation 수행 및 보여주기
C에 익숙했던 난 당연히 이차원배열을 생각했고, 금방할 줄 알았는데 파이썬이라 생각보다 오래걸렸다...ㅠㅠ
막상 다 짜놓고 보니 파이썬이 조금 더 쉬웠던거 같긴하다.
정답(이라고 할 순 없지만 어거지로 짠 코드)
# 모듈은 최대한 사용하지않았음.. 사용할것도 없엇지만,
import random
import time
import os
# 지형 만들기
def ground(rabbit_loc, wolf_loc,num):
a=[0,10,20,30,40,50,60,70,80,90]
b=[0,1,2,3,4,5,6,7,8,9]
print ("=========%d 번째 Turn==========" % num)
for x in range(0,10):
for y in range(0,10):
map = a[x] + b[y]
if map == wolf_loc:
print('^<',end=" ") #늑대
elif map == rabbit_loc:
print('@',end=" ") #토끼
else:
print('*', end=" ") # Map
print(' ')
time.sleep(2)
os.system('cls') #콘솔창 clear
# 토끼 random 으로 1칸 움직임
def rabbit_move(rabbit_loc):
forward = random.randrange(0,4)
# 오른쪽 한칸
if forward == 0:
current_loc = rabbit_loc + 1
# Map 밖으로 벗어나지 않도록 설정 / 현재 오른쪽 끝에서 왼쪽 끝으로 가는것도 방지
if current_loc > 100 or (current_loc % 10 == 10):
rabbit_move(rabbit_loc)
else:
return current_loc
# 왼쪽 한칸
elif forward == 1:
current_loc = rabbit_loc - 1
if current_loc < 0 or (current_loc % 10 == 9) : # 왼쪽 끝에서 오른쪽 끝으로 가는것 방지
rabbit_move(rabbit_loc)
else:
return current_loc
# 아래로 한칸
elif forward == 2:
current_loc = rabbit_loc + 10
if current_loc > 100:
rabbit_move(rabbit_loc)
else:
return current_loc
#위로 한칸
elif forward == 3:
current_loc = rabbit_loc - 10
if current_loc < 0:
rabbit_move(rabbit_loc)
else:
return current_loc
elif forward == 4:
return rabbit_loc
# 토끼한테 가는 늑대 움직임 ( 행 먼저 맞추고 열 맞춤)
def wolf_move(wolf_loc, rabbit_loc):
wolf_1 = int(wolf_loc % 10)
wolf_10 = int(wolf_loc / 10)
rabbit_1 = int(rabbit_loc % 10)
rabbit_10 = int(rabbit_loc / 10)
if (rabbit_10 > wolf_10):
wolf_loc = wolf_loc + 10
return wolf_loc
elif (rabbit_10 < wolf_10):
wolf_loc = wolf_loc - 10
return wolf_loc
elif( rabbit_10 == wolf_10 ):
if (rabbit_1 > wolf_1):
wolf_loc = wolf_loc + 1
return wolf_loc
elif (rabbit_1 < wolf_1):
wolf_loc = wolf_loc - 1
return wolf_loc
else:
return wolf_loc
# 동작 함수
def simulate():
num = 0
rabbit_loc = random.randrange(0,100)
wolf_loc = random.randrange(0,100)
print("Start!")
print(rabbit_loc, wolf_loc)
while(1):
if rabbit_loc == wolf_loc :
print("finish!")
break
else:
ground(rabbit_loc, wolf_loc, num)
for i in range(0,3):
if(i == 0):
num = num + 1
rabbit_loc = rabbit_move(rabbit_loc)
ground(rabbit_loc, wolf_loc, num)
elif(i==1):
num = num + 1
rabbit_loc =rabbit_move(rabbit_loc)
wolf_loc = wolf_move(wolf_loc, rabbit_loc)
ground(rabbit_loc, wolf_loc, num)
else:
num = num + 1
rabbit_loc =rabbit_move(rabbit_loc)
wolf_loc = wolf_move(wolf_loc, rabbit_loc)
wolf_loc = wolf_move(wolf_loc, rabbit_loc)
ground(rabbit_loc, wolf_loc, num)
실행 결과
주피터노트북으로 코딩해서 콘솔이 안날아갔지만 실제 콘솔로 돌리면 깔끔할듯 싶다..
'공부 > Python' 카테고리의 다른 글
[Python] vsCode 가상환경에서 bp(Breakpoint) 무시 Error (2) | 2020.07.07 |
---|---|
[Python] 파이썬 defaultdict() 함수 ? (0) | 2017.11.03 |
[Python] IndentationError: unindent does not match any outer indentation level 처리 (1) | 2017.08.30 |
[Python] 파이썬에서 pymysql모듈 사용하기② (0) | 2017.08.30 |
[Python] 파이썬에서 pymysql모듈 사용하기① (0) | 2017.08.30 |
댓글