반응형
SMALL

이 프로그램 만들려고 이틀은 고민을 해봤던거 같다. 총 62스텝정도 나왔는데 자바나 C로 짤라고 하면 100스텝은 족히 넘어간다;; 앞서 공부했던거 전부 응용해야 하는 꽤 난이도 있는 프로그램이었다.(좀 똑똑한 교수님들은 코딩의 기초를 다진다고 이거 한 번 짜보라고 분명 과제 내줬을 것이다.) 난수, 반복문, 변수들의 적절한 조화가 이루어져야 나오는 프로그램이라고 볼 수 있다. 컴퓨터가 생각한 숫자를 맞추는 건데 숫자가 맞으면 스트라이크, 숫자가 맞긴한데 위치가 틀린거면 볼이라고 판정되어 나온다. 그래서 짤 때 숫자가 저장될 공간등을 잘 생각해서 코딩해줘야 한다. 코드는 아래와 같다.


from random import randint

def generate_numbers():
# 숫자 3개를 보관할 리스트 생성
numbers = []

# 3개의 요소가 있을때까지 반복
while len(numbers) < 3:
# 새로 뽑은 수가 numbers에 없을 경우에만 추가
new_number = randint(0,9)
if new_number not in numbers:
numbers.append(new_number)


# 리스트 리턴
return numbers

# 정답 뽑기
ANSWER = generate_numbers()

# 변수 초기값 설정
tries = 0 # 시도 횟수
strike_count = 0 # 스트라이크 개수
ball_count = 0 # 볼 개수

# 번호를 모두 맞출때까지 반복
while strike_count < 3:
# 번호 3개 입력 받기
guess = []
while len(guess) < 3:
# 새로 입력한 수가 guess에 없을 경우에만 추가
new_number = int(input("%d번째 수를 입력하세요: " % (len(guess) + 1)))

# 범위를 벗어나면 설명메시지 출력
if new_number < 0 or new_number > 9:
print("0에서 9까지의 수를 입력해주세요!")
# 중복된 수를 입력하면 설명 메시지 출력
elif new_number in guess:
print("새로운 수를 입력해주세요!")
# 타당한 값이면 guess에 추가!
else:
guess.append(new_number)

# 스트라이크 볼 개수 세기
strike_count = 0 # 스트라이크 개수
ball_count = 0 # 볼 개수
i = 0 # 인덱싱 변수

while i < 3:
if guess[i] == ANSWER[i]:
strike_count = strike_count + 1
elif guess[i] in ANSWER:
ball_count = ball_count + 1
i = i + 1

print("%dS %dB" % (strike_count, ball_count))

# 시도 횟수 추가
tries = tries + 1

# 축하 메시지
print("축하합니다 %d번 만에 세 숫자의 값과 위치를 모두 맞추셨습니다." % (tries))

ㅋㅋ 친절하게 주석까지 달아놨다. 저거 짜다 종이 2장은 썼던 것 같다.(코딩의 기본은 설계) 저 코드를 실행시키면 다음과 같은 화면이 나온다.


나는 운좋게 3번만에 맞춰서 저렇게 나왔지만 안나오면 계속 입력해봐야한다-_-;; 20번만에 맞추면 20번만에 맞췄다고 아래 메시지가 뜨게 된다. 그리고 중복된 값을 입력하게 되면 중복된값이라고 다시 입력하라는 메시지가 뜰 것이다. 애초에 설계할때 그렇게 해놨다. 파이참에 저 코드 그대로 입력하면 저대로 잘 나올것이다. 난수의 활용, while문, elif문 사용법에 대해 많이 익히게 될 프로그램 일 것이다.

반응형
LIST

'프로그래밍언어 > PYTHON' 카테고리의 다른 글

자리수의 합 구하기  (0) 2017.08.13
피타고라스 수  (0) 2017.08.13
환전 프로그램  (0) 2017.07.23
온도변환프로그램  (0) 2017.07.23
구구단 프로그램  (0) 2017.07.12
블로그 이미지

만년필석사

,