숫자야구 프로그램
조회수 809회
숫자야구프로그램 문제인데 저 정의된 함수를 써야하는데 저기 있는 def를 어떻게 하나요..
import random
c=["0","0","0"]
c[0] = str(random.randrange(1,9,1))
c[1] = c[0]
c[2] = c[0]
while (c[0] == c[1]):
c[1] = str(random.randrange(1, 9, 1))
while (c[0] == c[2] or c[1] == c[2]):
c[2] = str(random.randrange(1, 9, 1))
시도 = 1
strike = 0
ball = 0
print("I've chosen three numbers.")
print("Guess them!")
while ( strike < 3 ):
num = str(input("Enter three numbers: "))
strike = 0
ball = 0
for i in range(0, 3):
for j in range(0, 3):
if(num[i] == str(c[j]) and i == j):
strike += 1
elif(num[i] == str(c[j]) and i != j):
ball += 1
print(시도,"-th try: ", strike, " Strike ", ball, " Ball\n")
시도 += 1
print("Congratulations! You hit!")
저거 안쓰고는 이렇게 하는건 알겠는데..
-
(•́ ✖ •̀)
알 수 없는 사용자 - 〉
1 답변
-
질문자님의 코드는 '파이썬 야구 게임'이라고 구글에 쳐서 나오는 첫번째 문서의 코드와 좀 너무 심하게 비슷해서 걱정스럽긴 한데 일단 그건 지나가겠습니다. 남의 코드에서 시작점을 찾는 거 자체는 충분히 그럴 수 있으니까요.
함수란 입력을 규칙에 맞게 가공하여 출력하는 것입니다.
입력, 규칙, 출력만 정하면 함수를 만들 수 있습니다.이렇게 해도 되긴 된다는 거지요.
import random # 0개의 입력을 정의함 def getInitialRandomNumbers() : # 0줄의 규칙을 정의하여 1가지를 반환함 return ["0", "0", "0"] c = getInitialRandomNumbers() c[0] = str(random.randrange(1,9,1)) c[1] = c[0] c[2] = c[0] while (c[0] == c[1]): c[1] = str(random.randrange(1, 9, 1)) while (c[0] == c[2] or c[1] == c[2]): c[2] = str(random.randrange(1, 9, 1)) # 이하 생략
근데 이거만 추가해서 숙제를 내면 혼날 거 같군요.
좀더 잘라내기 해서 붙여넣기 해봅시다.import random # 0개의 입력을 정의함 def getInitialRandomNumbers() : # 여러 줄로 된 규칙을 정의함 rn = ["0", "0", "0"] rn[0] = str(random.randrange(1, 9, 1)) rn[1] = rn[0] rn[2] = rn[0] while (rn[0] == rn[1]): rn[1] = str(random.randrange(1, 9, 1)) while (rn[0] == rn[2] or rn[1] == rn[2]): rn[2] = str(random.randrange(1, 9, 1)) # 1가지를 반환함 return rn c = getInitialRandomNumbers() # 이하 생략
이런 식으로, 이 부분은 따로 잘라내서 쓰면 될 거 같은데? 싶으신 부분들을 조금씩 잘라서 따로 빼 보세요.
입력을 정의하는 것도 그냥 이렇게 하면 될 거 같은데? 하는 걸 한번 해보세요. 예컨대 이 야구 게임이 너무 어려워서 1부터 5까지의 숫자를 가지고 플레이하기로 한다고 하면:
# 1개의 입력을 정의함 def getInitialRandomNumbers(max) : # 앞전의 코드와 비교해 봅시다. # 참고로, 이 코드는 버그가 있습니다. max가 몇보다 작을 때 이 함수는 영원히 실행되게 될까요? 한번 연구해 보세요. rn = ["0", "0", "0"] rn[0] = str(random.randrange(1, max, 1)) rn[1] = rn[0] rn[2] = rn[0] while (rn[0] == rn[1]): rn[1] = str(random.randrange(1, max, 1)) while (rn[0] == rn[2] or rn[1] == rn[2]): rn[2] = str(random.randrange(1, max, 1)) return rn # 이제 이 함수에 입력을 주면 그 입력을 규칙대로 가공해서 정확한 출력을 함 c = getInitialRandomNumbers(5)
어렵지 않지요? 시도해 보세요.
PS. 여기 오시는 분들 중 일부는 자기가 급한 프로그래밍 숙제가 떨어졌으니 빨리 답 내놓으라는 식으로 노력의 흔적이 전혀 보이지 않는 질문글을 두 번 세 번 도배하고 답 달리기만 기다리는 경우가 있습니다. 어떤 사람들은 그런 (내용도 고만고만한) 질문글에 답을 하다가 질리는 경우가 있구요. "왜이러시는거에요" 한거는 그런 차원에서 나온 소리였습니다. 질문 올리라는 사이트에 와서 질문 올렸더니 왜 이래? 싶으셨지요? 그런 사연이 있습니다. 제가 이 사이트 주인도 아닌데 주제를 넘었습니다. 미안합니다.
댓글 입력