Sparta Coding Club/Today I Learned [TIL]

[TIL] #DAY - 008 - list, set, tuple ... 어지럽다.. (내일배움캠프AI 3기, 파이썬 실시간 강의 3일차, 로또자동번호, 숫자야구!)

양한마리 2022. 9. 7. 20:19
728x90



til..til....틸...틸....티아이엘....

오늘은 좀 정신이 집중이 안되네 ..

싶었는데.. 100시간 공부.. 오....


오늘 대충 시간표

 

시작 시간 ~ 종료 시간 교과명
09:00 ~ 13:00 [실시간] 파이썬 문법
14:00 ~ 18:00 [과제] 숫자 야구 만들기
19:00 ~ 21:00 [실습] 실무적용 알고리즘 실습

Python 강의 3일차

  1. Python 언어의 이해
  2. Python 기초
  3. Python 활용
    • 자료형 활용하기
    • 자료형 변환
    • 함수
    • 다른 파일에 있는 코드 import해서 사용하기
    • 값 비교하기
    • 조건문
      • ↑ 2일차 수업 끝
      • ↓ 3일차 수업 시작
    • 반복문
      • while 혹은 for문을 사용해 반복문을 사용할 수 있습니다.
      • for 문
        • list, tuple, set 자료형의 요소들로 반복문을 사용 가능
        • enumerate() 를 사용해 반복되는 요소가 몇번째인지 확인할 수 있다.
        • dictionary 자료형의 key 혹은 value 로 반목문을 사용 가능
        • range() 함수를 활용하여 원하는 만큼 반복문을 사용 가능
        • continue 를 활용해 특정 상황에서 아무런 동작도 하지 않고 넘어갈 수 있다.
        • break 를 활용해 특정 상황에 반복문을 중지
      • while 문
        • for 문과 크게 다르지 않지만, 조건을 다루는 방식에 차이가 있다.
        • 대부분의 경우 while 문은 반복 할 횟수가 정해져 있지 않을 때 사용함
    • 자주 사용되는 모듈 및 패턴
      • type() # 값의 자료형 확인 해보기
      • split() # string 을 list 로 변환하기
      • join() # list 에서 string 로 변환하기
      • replace() # 문자 바꾸기
      • pprint() # 코드 예쁘게 출력하기
      • random # 랜덤한 로직이 필요할 경우 사용
      • time # 시간 다루기
      • datetime # 날짜 다루기
    • 지금까지 배운 문법들을 활용해 로또 번호를 뽑는 코드 작성하기
import random
lotto = set() # lotto 변수를 set 자료형으로 선언

def get_lotto_number(count):
    result = []
    if count < 1:
        print("1 이상의 값을 입력해주세요")
    
    for _ in range(count): # count만큼 반복해서 실행
        lotto = set()

        while len(lotto) < 6: # lotto의 요소 갯수가 8 이하일 경우 계속해서 반복
            lotto.add(random.randint(1, 45)) # lotto에 1~45 사이의 랜덤 값을 입력
            
        result.append(lotto)
        
    return result

lotto_numbers = get_lotto_number(10)
print(lotto_numbers)

# result print
"""
[
    {3, 4, 6, 9, 22, 26},
    {5, 9, 11, 44, 45, 28},
    {4, 39, 41, 16, 18, 27},
    {5, 8, 9, 14, 20, 22},
    {37, 6, 40, 41, 42, 19},
    {1, 36, 8, 41, 9, 17},
    {39, 41, 10, 12, 16, 23},
    {35, 37, 11, 14, 17, 19},
    {35, 3, 11, 43, 15, 16},
    {36, 38, 6, 43, 24, 25}
]
"""
# 랜덤 값을 사용하기 때문에 코드를 실행할 때마다 결과는 달라집니다.

숫자 야구 만들기

문제)

숫자야구 게임 만들어보기

사용자의 입력을 받아 숫자야구 게임을 만들어주세요

요구조건

  • 프로그램이 시작되면 슷자야구 게임을 몇 자리 숫자로 할 건지 입력 받아 주세요
    • 3을 입력할 경우 해당 숫자야구 게임은 3자릿수로 진행, 최대 10자리
  • 첫 번째 입력을 받은 자릿수 만큼 후 파이썬으로 중복 없는 랜덤한 수를 생성해 주세요
  • 사용자가 숫자를 입력 했을 때 숫자야구 게임의 규칙에 맞게 ball / out count를 출력해 주세요
  • 사용자가 정답을 맞춘 경우 아래 항목들을 출력해 주세요
    • 사용자가 정답을 맞추기까지 입력 한 횟수
    • 사용자가 게임을 시작해서 정답을 맞추기까지 소요된 시간
    • 정답을 맞춘 시점의 날짜/시간
  • 게임을 진행하던 도중, “exit”을 입력할 경우 프로그램을 종료해 주세요
  •  

코드 풀이)  num_baseball.py (2022/09/07)

from datetime import datetime
import random, time, sys

# 사용자가 정답을 맞추기까지 입력 한 횟수
# 사용자가 게임을 시작해서 정답을 맞추기까지 소요된 시간
# 정답을 맞춘 시점의 날짜/시간

start_time = time.time()
end_time = 0
now = datetime.now()
str_date = datetime.strftime(now, "%y/%m/%d %H:%M")

num_list = []
check_list = []
strike = 0
ball = 0
exit_ = "exit"

def ball_count() :
    ball = 0
    for i in num_list :
        for j in check_list :
            if i == j :
                ball += 1
    ball = ball - strike_count()
    return ball

def strike_count() :
    strike = 0
    for stk in num_list :
        if stk in check_list :
            if num_list.index(stk) == check_list.index(stk):
                strike += 1

    return strike

print("게임을 시작합니다.")
print("0 입력시 게임 종료")
N = int(input("숫자 입력 : "))
if N > 10 :
    while True :
        print("10 이하의 숫자를 입력하세요.")
        N = int(input("숫자 입력 : "))
        if N <= 10 and N != 0 :
            break
elif N == 0 :
    print("게임을 종료합니다.")
    sys.exit(0)
else :
    print("문제 생성 완료.")
numbers = set()


# 문제의 난수 생성
while len(numbers) < N :
    numbers.add(random.randint(0, 9))
num_list = list(numbers)
random.shuffle(num_list)
# print(num_list) # 정답 유출

result = 0
print(num_list)
count = 1
while True :
    print(f"{count}회차")
    result = str(input(f"{N}개의 숫자 입력 : "))
    check = map(int, result.split())
    if result == exit_ :
        print("게임을 종료합니다.")
        sys.exit(0)
    for i in check :
        check_list.append(i)
    print(f"{strike_count()}S {ball_count()}B")
    if strike_count() == N :
        print("OUT!")
        print(num_list)
        end_time = time.time()
        print(f"소요된 시간 : {end_time-start_time:.1f}초")
        print(str_date)
        break
    else :
        check_list = []
        strike = 0
        ball = 0
        count += 1
        continue

 

아직 예외 처리가 부족한거 같다.

좀 더 업데이트해서 다시 해석이랑 같이 올려야지!

728x90
반응형