0~9까지의 숫자를 한 번씩 사용하여 만든 세 자리 숫자를 맞추는 코드를 작성하시오. 숫자와 자리가 맞으면 S이고 숫자만 맞으면 B입니다.
컴퓨터가 세 자리 숫자를 설정하고 사용자에게 숫자를 입력받아 S와 B의 개수를 알려주십시오. 정답을 맞히면 정답이라고 알려주고 사용자가 숫자를 룰에 어긋나게 입력 시 경고문을 출력하고 다시 숫자를 입력할 수 있게 하십시오.
예) 정답이 123일 때 사용자가 234를 입력 시 0S2B, 사용자가 109를 입력 시 1S0B, 사용자가 327을 입력 시 1S1B입니다.
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))
2022年07月26日 16:40
# 숫자야구 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
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')
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()
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("정답!")
파이썬입니다.
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('정답입니다.')
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()
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")
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
# 코딩 도장 숫쟈야구
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")
풀이 작성