코딩도장

숫자야구

0~9까지의 숫자를 한 번씩 사용하여 만든 세 자리 숫자를 맞추는 코드를 작성하시오. 숫자와 자리가 맞으면 S이고 숫자만 맞으면 B입니다.

컴퓨터가 세 자리 숫자를 설정하고 사용자에게 숫자를 입력받아 S와 B의 개수를 알려주십시오. 정답을 맞히면 정답이라고 알려주고 사용자가 숫자를 룰에 어긋나게 입력 시 경고문을 출력하고 다시 숫자를 입력할 수 있게 하십시오.

예) 정답이 123일 때 사용자가 234를 입력 시 0S2B, 사용자가 109를 입력 시 1S0B, 사용자가 327을 입력 시 1S1B입니다.

random

2022年07月15日 13:59

Tae Joo

(追記) (追記ここまで)
댓글 작성은 로그인이 필요합니다.
(注記) 상대에게 상처를 주기보다 서로에게 도움이 될 수 있는 댓글을 달아 주세요.

26개의 풀이가 있습니다. 1 / 3 Page

import random
# 숫자추출
nums=list(range(0,10))
random.shuffle(nums)
while nums[0]==0:
 random.shuffle(nums)
answer = str(nums[0]*100+nums[1]*10+nums[2]*1)
print(answer)
# 값 입력받기
while True:
 user_num = input("세자리 숫자를 입력하세요 : ")
 # 정답 확인
 if user_num == answer:
 print("정답을 맞추셨습니다. 게임을 종료합니다.")
 break
 # 입력값 확인
 if user_num.isdigit()==False or len(user_num) != 3:
 print("잘못된 입력을 하였습니다. 세자리 숫자를 입력하여 주세요.")
 continue
 #입력값과 정답비교
 strike=0
 ball=0
 for i in range(3):
 if answer[i]==user_num[i]:
 strike+=1
 elif user_num.count(answer[i])>0:
 ball+=1
 print("{0}S{1}B".format(strike,ball))
댓글 작성은 로그인이 필요합니다.
(注記) 상대에게 상처를 주기보다 서로에게 도움이 될 수 있는 댓글을 달아 주세요.
# 숫자야구 3자리 숫자
import random as rd
while 1:
 real_a = rd.sample(range(10), 3)
 real_b = (real_a[0] * 100) + (real_a[1] * 10) + (real_a[2])
 if real_b < 100:
 continue
 else:
 break
# print(real_b)
print('숫자야구 게임입니다. 0~9까지의 숫자를 한번씩 사용하여 만든 세자리 숫자를 맞추십시오.')
print('숫자와 자리가 맞으면 \'S\' 숫자만 맞으면 \'B\' 입니다.')
c = 0
while 1:
 s = b = 0
 input_n = int(input('세자리 숫자를 입력하십시오 : '))
 if not 100 <= input_n < 1000:
 continue
 input_a = [(input_n // 100) % 10, (input_n // 10) % 10, input_n % 10]
 if input_a[0] == input_a[1] or input_a[0] == input_a[2] or input_a[1] == input_a[2]:
 print('서로다른 세가지의 숫자로 입력해주세요.')
 continue
 for ii in range(3):
 if input_a[ii] == real_a[ii]:
 s += 1
 elif input_a[ii] in real_a:
 b += 1
 c += 1
 if s == 3:
 print('\'{}\'정답입니다. 정답을 \'{}\'번만에 맞추셨습니다. 축하드립니다.'.format(real_b, c))
 exit(0)
 print('{}S{}B'.format(s, b))
 pass

2022年07月15日 14:01

Tae Joo

댓글 작성은 로그인이 필요합니다.
(注記) 상대에게 상처를 주기보다 서로에게 도움이 될 수 있는 댓글을 달아 주세요.
import random
answer = [0,0,0]
answer[0]=str(random.randint(0,9))
i=1
while True: #중복 없는 랜덤값 설정
 if i==3:
 break
 tmp=str(random.randint(0,9))
 if tmp in answer:
 continue
 else:
 answer[i]=tmp
 i+=1 
print(answer)
while True:
 input1 = input('맞춰보시오:')
 if len(input1) != 3 or input1[0] in input1[1:] or input1[1] == input1[2]: #3자리가 아니거나 중복이면 continue
 print('조건에 맞게 입력하시오')
 continue
 if list(input1) == answer: #정답이면 프로그램 끝냄
 print("정답입니다.")
 break
 scnt=0
 bcnt=0
 for i in range(3):
 if answer[i] == input1[i]:
 scnt+=1
 elif answer[i]!=input1[i] and input1[i] in answer:
 bcnt+=1
 print(f'{scnt}S{bcnt}B')

2022年08月18日 21:09

kee

댓글 작성은 로그인이 필요합니다.
(注記) 상대에게 상처를 주기보다 서로에게 도움이 될 수 있는 댓글을 달아 주세요.
def main():
 given = input("Enter an integer with three positions")
 if len(str(given)) != 3:
 raise Exception("Please provide the number in the appropriate format")
 answer = 123
 # change to string to compare
 s_given = given
 s_answer = str(answer)
 # check S
 S = 0
 indices = []
 for idx, (g, a) in enumerate(zip(s_given, s_answer)):
 if g == a:
 S += 1
 indices.append(idx)
 # preparing for checking B
 for idx in indices:
 s_given = s_given.replace(s_given[idx], '*')
 s_answer = s_answer.replace(s_answer[idx], '*')
 # check B
 B = 0
 for c in set(s_given):
 try:
 int(c)
 B += s_answer.count(c)
 except:
 pass
 print(f"{S}S{B}B")
if __name__ == '__main__':
 main()

2022年08月26日 13:59

문덕종

댓글 작성은 로그인이 필요합니다.
(注記) 상대에게 상처를 주기보다 서로에게 도움이 될 수 있는 댓글을 달아 주세요.
import random
num = [random.randint(1, 9)] # 100의 자리는 0이 되면 안됨
for i in range(2): # 10의 자리나 1의 자리는 0이어도 상관 x
 num.append(random.randint(0, 9))
res = [] # 결과 리스트
while res.count('s') != 3: # s가 3개면 종료
 res = [] # 계속 초기화함
 ans = input("숫자 입력 : ") # 사용자가 입력한 숫자
 num_ans = [int(x) for x in ans] #리스트로 만듦
 for i in range(3):
 if num_ans[i] in num:
 if num_ans[i] == num[i]:
 res.append('s')
 else:
 res.append('b')
 print("%ds %db" % (res.count('s'), res.count('b')))
print("정답!")

파이썬입니다.

2022年09月03日 15:12

코딩재미

댓글 작성은 로그인이 필요합니다.
(注記) 상대에게 상처를 주기보다 서로에게 도움이 될 수 있는 댓글을 달아 주세요.
def num_baseball(answer, try_num):
 result = [0, 0, 0] # none, ball, strike count
 for i in range(3):
 if try_num[i] in answer:
 result[int(try_num[i] in answer) + int(answer.index(try_num[i]) == i)] += 1
 return result
def make_num3(): # 난수 3개를 만드는 함수
 num = [i for i in range(10)]
 random.shuffle(num)
 return num[:3]
print("숫자 야구게임입니다.")
answer, try_num = make_num3(), []
while try_num != answer:
 num = input('3자리 숫자를 입력하세요 : ')
 try_num = [int(i) for i in num]
 if len(try_num) != 3: continue
 result = num_baseball(answer, try_num)
 if result[2] == 3: break
 print(f'결과는 {result[2]}S{result[1]}B 입니다.')
print('정답입니다.')

2022年09月11日 19:51

고양이

댓글 작성은 로그인이 필요합니다.
(注記) 상대에게 상처를 주기보다 서로에게 도움이 될 수 있는 댓글을 달아 주세요.

Python 3.10

"""숫자야구"""
import random as rd
def main():
 game = Game(True)
class Game:
 def __init__(self, show_answer: bool = False):
 # 3자리 중복 없는 난수 생성
 self.answer = "".join(map(str, rd.sample(range(10), 3)))
 if show_answer:
 print(self.answer)
 while True:
 self.guess = Game.get_guess()
 (iscorrect, score) = Game.get_score(self.guess, self.answer)
 if not iscorrect:
 print(score)
 else:
 print("정답입니다. ")
 break
 @staticmethod
 def get_guess():
 while True:
 guess = input("중복없는 3자리 숫자를 입력하세요: ")
 if len(set(guess)) == 3 and guess.isdigit():
 break
 print("잘못된 입력입니다.")
 return guess
 @staticmethod
 def get_score(guess: str, answer: str) -> (bool, str):
 score = [0, 0] # [Strikes, Balls]
 for gidx, gchar in enumerate(guess):
 if gchar in answer:
 if gchar == answer[gidx]:
 score[0] += 1
 else:
 score[1] += 1
 iscorrect = True if score[0] == 3 and score[1] == 0 else False
 return iscorrect, f"{score[0]}S{score[1]}B"
if __name__ == '__main__':
 main()

2022年10月05日 10:54

mohenjo

댓글 작성은 로그인이 필요합니다.
(注記) 상대에게 상처를 주기보다 서로에게 도움이 될 수 있는 댓글을 달아 주세요.
import random
user = input("세자리 숫자를 입력하시오 : ")
user_num_list = list(user)
num = random.randint(0,9)
num_list = []
for i in range(3):
 while num in num_list:
 num = random.randint(0,9) 
 num_list.append(num)
s=0
b=0
for i in range(0, len(user_num_list)):
 for j in range(0,len(num_list)):
 if user_num_list[i] == num_list[j] and i == j:
 s += 1
 elif user_num_list[i] == num_list[j] and i != j:
 b += 1
print(f"{s}S{b}B")

2022年10月09日 14:19

정준호

댓글 작성은 로그인이 필요합니다.
(注記) 상대에게 상처를 주기보다 서로에게 도움이 될 수 있는 댓글을 달아 주세요.
import random
a = random.sample(range(10), 3)
#같은 숫자 및 앞자리가 0이 아니도록 셔플
while 1:
 if a[0]!=a[1]!=a[2]:
 a = random.sample(range(10), 3)
 if a[0]!=0: break
print("게임 시작!")
while 1:
 u = input("숫자를 입력하여주세요(ex=123)")
 # 3자리 숫자가 아닌경우 실행되지 않음
 if len(u)==3:
 #입력값 정답 비교문
 for i in range(3):
 if int(u[i]) == a[i]:
 s += 1
 elif int(u[i]) in a :
 b += 1
 # 정답 처리문
 if s ==3:
 print("{}S{}B".format(s,b))
 print("정답을 맞추셨습니다. 정답은{}입니다.".format(a))
 break
 print("{}S{}B".format(s,b))
 # 에러 처리 출력문
 else:
 print("3개의 숫자를 입력하여주세요")
 continue

2022年10月13日 17:18

Zikill_ Hide

댓글 작성은 로그인이 필요합니다.
(注記) 상대에게 상처를 주기보다 서로에게 도움이 될 수 있는 댓글을 달아 주세요.
# 코딩 도장 숫쟈야구
import random
# 정답 뽑기!
answer= ""
while len(answer) < 3:
 temp = str(random.randint(0,9))
 if temp not in answer:
 answer += temp
idx = 0
while True:
 idx += 1
 print(f"{idx}번째 도전!")
 user_submit = input("세자리 숫자를 입력해주세요 : ")
 if user_submit == answer:
 print("정답입니다!")
 break
 if len(user_submit) != 3:
 print("세 자리를 입력해주세요!")
 elif not user_submit.isdigit():
 print("숫자를 입력해주세요!")
 elif len(set(user_submit)) != 3:
 print("중복된 값은 입력할 수 없습니다.")
 else:
 s,b= 0,0
 for i in range(3):
 if user_submit[i] == answer[i]:
 s += 1
 elif user_submit[i] in answer:
 b += 1
 print(f"{s}S{b}B")

2022年10月23日 20:59

Tony Woo

댓글 작성은 로그인이 필요합니다.
(注記) 상대에게 상처를 주기보다 서로에게 도움이 될 수 있는 댓글을 달아 주세요.

풀이 작성

(注記) 풀이작성 안내
  • 본문에 코드를 삽입할 경우 에디터 우측 상단의 "코드삽입" 버튼을 이용 해 주세요.
  • 마크다운 문법으로 본문을 작성 해 주세요.
  • 풀이를 읽는 사람들을 위하여 풀이에 대한 설명도 부탁드려요. (아이디어나 사용한 알고리즘 또는 참고한 자료등)
  • 작성한 풀이는 다른 사람(빨간띠 이상)에 의해서 내용이 개선될 수 있습니다.
풀이 작성은 로그인이 필요합니다.
목록으로
코딩도장

코딩도장은 프로그래밍 문제풀이를 통해서 코딩 실력을 수련(Practice)하는 곳입니다.

random x 2
연관 문제

언어별 풀이 현황
전 체 x 41
python x 26
java x 8
기 타 x 5
cpp x 2
코딩도장 © 2014 · 문의 [email protected]
피드백 · 개인정보취급방침 · RSS

AltStyle によって変換されたページ (->オリジナル) /