컴퓨터 0-9사이 3개 숫자 뽑기
사용자는 숫자의 값과 위치를 맞춰야함
입력한 숫자 3개 스트라이크와 볼 개수 알려줌
-숫자와 위치 모두 일치하면 S, 숫자만 맞으면 B
-기회는 무제한 , 3S가 나오면 숫자 끝납니다.
"0과 9 사이의 서로 다른 숫자 3개를 랜덤한 순서로 뽑았습니다."
가 출력됩니다."숫자 3개를 하나씩 차례대로 입력하세요."
가 출력됩니다."1번째 숫자를 입력하세요: "
가 출력되고, 사용자로부터 입력을 받습니다. 마찬가지로 "2번째 숫자를 입력하세요: "
와 "3번째 숫자를 입력하세요: "
가 출력되고, 사용자로부터 각각 입력을 받습니다. 만약 사용자가 중복되는 숫자를 입력하거나 범위에서 벗어나는 숫자를 입력하면, 사용자로부터 입력을 다시 받습니다."*S *B"
가 출력됩니다."축하합니다. *번 만에 숫자 3개의 값과 위치를 모두 맞추셨습니다."
가 출력됩니다. 그리고 게임은 종료됩니다.(리스트로 생성, random,randint사용, while문, if 사용)+ "0과 9 사이의 서로 다른 숫자 3개를 랜덤한 순서로 뽑았습니다.” 출력
import random
# 숫자야구 정답 추출 함수
def generate_numbers():
numbers = []
while len(numbers) <= 2:
number = random.randint(0, 9)
if number not in numbers:
numbers.append(number)
print("0과 9 사이의 서로 다른 숫자 3개를 랜덤한 순서로 뽑았습니다.\n")
return numbers
(input) 단, 0-9사이의 정수만 입력하도록!
→ 사용자의 입력 숫자 리스트에 저장(append) → S B 출력되도록
-3개의 input 조건식 xx 반복 넘 많음 → while 반복문으로 사용해서 쓰기
def take_guess():
user_numbers = []
print("숫자 3개를 하나씩 차례대로 입력하세요.\n")
while len(user_numbers) <=2:
answer = int(input("{}번째 숫자를 입력하세요: ".format(len(user_numbers) + 1)))
if 0 <= answer <= 9 and answer not in user_numbers:
user_numbers.append(answer)
elif 0 <= answer <= 9 and answer in user_numbers:
print("중복되는 숫자입니다. 다시 입력하세요.\n")
else:
print("범위를 벗어나는 숫자입니다. 다시 입력하세요.\n")
return user_numbers
<모범답안>
def take_guess():
print("숫자 3개를 하나씩 차례대로 입력하세요.")
new_guess = []
while len(new_guess) < 3:
new_num = int(input("{}번째 숫자를 입력하세요: ".format(len(new_guess) + 1)))
if new_num < 0 or new_num > 9:
print("범위를 벗어나는 숫자입니다. 다시 입력하세요.")
elif new_num in new_guess:
print("중복되는 숫자입니다. 다시 입력하세요.")
else:
new_guess.append(new_num)
return new_guess
스트레이크식 → 인덱스이용 1,2,3, 비교해서 S점수 내기, 볼점수 내기 for문 → in 이용(for문 )
def get_score(guesses, solution):
strike_count = 0
ball_count = 0
for i in range(3):
if guesses[i] == solution[i]:
strike_count += 1
for n in guesses:
if n in solution:
ball_count += 1
return strike_count, ball_count
# 테스트
s_1, b_1 = get_score([2, 7, 4], [2, 4, 7])
print(s_1, b_1)
s_2, b_2 = get_score([7, 2, 4], [2, 4, 7])
print(s_2, b_2)
<모범답안> 반복문 한번만 돌면 좋으니까~~
def get_score(guesses, solution):
strike_count = 0
ball_count = 0
for i in range(3):
if guesses[i] == solution[i]:
strike_count += 1
elif guesses[i] in solution:
ball_count += 1
return strike_count, ball_count
s_count, b_count = get_score(user_answer, ANSWER)
print("{}B {}S".format(s_count, b_count))
일단 답안 리스트, 입력리스트, 함수사용 확인 → while문 사용해서 계속 사용자가 다 맞을 때까지 반복할 수 있도록 ...완성!
import random
# 숫자야구 정답 추출 함수
def generate_numbers():
numbers = []
while len(numbers) <= 2:
number = random.randint(0, 9)
if number not in numbers:
numbers.append(number)
print("0과 9 사이의 서로 다른 숫자 3개를 랜덤한 순서로 뽑았습니다.\n")
return numbers
# 사용자 정답 입력 함수
def take_guess():
user_answer = []
print("숫자 3개를 하나씩 차례대로 입력하세요.\n")
while len(user_answer) <=2:
answer = int(input("{}번째 숫자를 입력하세요: ".format(len(user_answer) + 1)))
if 0 <= answer <= 9 and answer not in user_answer:
user_answer.append(answer)
elif 0 <= answer <= 9 and answer in user_answer:
print("중복되는 숫자입니다. 다시 입력하세요.\n")
else:
print("범위를 벗어나는 숫자입니다. 다시 입력하세요.\n")
return user_answer
# 점수 계산 함수
def get_score(guesses, solution):
strike_count = 0
ball_count = 0
for i in range(3):
if guesses[i] == solution[i]:
strike_count += 1
for n in guesses:
if n in solution:
ball_count += 1
ball_count -= strike_count
return strike_count, ball_count
# 여기서부터 게임 시작!
ANSWER = generate_numbers()
tries = 0
while True:
user_answer = take_guess()
s_count, b_count = get_score(user_answer, ANSWER)
print("{}S {}B".format(s_count, b_count))
tries += 1
if s_count == 3:
break
print("축하합니다. {}번 만에 숫자 3개의 값과 위치를 모두 맞추셨습니다.".format(tries))