본문 바로가기
TTL/1주차 ~ 4주차 TIL (8.29 ~ 9.23)

2022-09-07 TIL

by dev_junseok 2022. 9. 7.

오늘은 파이썬 기본 강의 3일차이다.

오늘은 반복문을 배웠는데 반복문은 whlie 혹은 for문을 이용해 사용할 수 있다.

그리고 자주 사용되는 모듈 및 패턴을 배워보았다.

type(), split(), join(), replace(), pprint(), random, time, datetime 등이 있다.

일단 random 부터 살펴보면

# 난수 생성, 임의의 번호 생성 등 랜덤한 동작이 필요할 때 사용된다.
import random

numbers = [1, 2, 3, 4, 5, 6, 7, 8]
random.shuffle(numbers) # numbers를 무작위하게 섞기
print(numbers) # [2, 8, 6, 4, 3, 7, 1, 5]

random_number = random.randint(1, 10) # 1 ~ 10 사이의 무작위 번호 생성
print(random_number) # 4

random라이브러리를 import하여 랜덤으로 숫자를 뽑는 기능이다.

 

# 함수의 실행 시간을 측정하는 등 시간을 다룰 때 사용되는 모듈이다.
import time

start_time = time.time() # 현재 시간 저장

time.sleep(1) # 1초간 대기

end_time = time.time()

# 코드가 종료된 시간 - 코드가 시작된 시간으로 실행 시간 구하기 (단위 : 초)
print(f"코드 실행 시간 : {end_time-start_time:.5f}") # 코드 실행 시간 : 1.00100

다음은 프로그램 시작 시간부터 프로그램이 종료되는 시간까지 시간을 측정해주는 time 모듈이다.

 

오늘 배운 것들을 사용해서 간단한 숫자야구 프로그램을 제작해보았다.

 

먼저 요구조건은

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

 

from random import randint
from datetime import datetime
import time



print("게임의 자리수를 설정합니다")
n = int(input()) #자리수 설정


# 랜덤하게 입력되는 3자리수
numbers = []
print("0과 9 사이의 서로 다른 숫자를 설정한 자리수 만큼 랜덤한 순서로 뽑았습니다.")
while len(numbers) < n:
    new_numbers = randint(0,9)
    if new_numbers in numbers:
        new_numbers = randint(0, 9)
    numbers.append(new_numbers)
    print(numbers)

# 사용자가 값을 정확하게 맞출때까지 무한반복
start = time.time()
count = 0
while True:

    # 사용자가 입력하는 3자리수
   
    user = []
    print("숫자를 하나씩 차례대로 입력하세요.")
    while len(user) < n:
        # try:
            user_input = input()
            if user_input == "exit":
                print("프로그램을 종료합니다")
                quit()
    
            user_numbers = int(user_input)
               
            if user_numbers in user:
                print("중복되는 수 입니다. 다시 입력해주세요.")
            elif user_numbers > 9:
                print("범위를 벗어나는 수입니다.다시 입력해주세요.")
            user.append(user_numbers)
            print(user)
              
    i = 0
    s = 0
    b = 0
    o = 0
    while i < len(numbers):
        if numbers[i] == user[i]:
            s = s + 1
        elif user[i] in numbers:
            b = b + 1
        else:
            o = o + 1
        i += 1
    print("%d Strike %d Ball %d Out \n" % (s, b, o))
    count += 1
    if s == n:
        print("축하합니다. %d번만에 세 숫자의 갑과 위치를 모두 맞추셨습니다." % count)
        break
end = time.time()

print(f"게임 시작 후 걸린 시간: {end-start:.2f} 초")
print( f"게임 종료 시간: {datetime.now()}")

이렇게 구성해 보았다.

잘 작동한다.

 

살짝 어려운 과제였지만 구글링과 팀원들의 도움을 받아서 어렵지 않게 완성할 수 있었다.

'TTL > 1주차 ~ 4주차 TIL (8.29 ~ 9.23)' 카테고리의 다른 글

2022-09-13 TIL  (0) 2022.09.14
2022-09-08 TIL  (0) 2022.09.12
2022-09-06 TIL  (0) 2022.09.06
2022-09-05 TIL  (0) 2022.09.05
2022-09-02 TIL  (0) 2022.09.04