본문 바로가기
Django

8일차 오늘은 뭔가 깨달았다.

by 승현0604 2022. 9. 7.

오늘도 역시 파이썬 강의와 함께 백준의 알고리즘 문제풀기와 튜터님이 내어주신 과제를 진행하는 날이였다.

첫번째는 파이썬 강의이다. 

 

오늘은 유난히 생소하고 처음보는 언어들이 많았다. 그 중에서도 오늘 반복문에 대한 강의를 해주셨는데 반복문은 유난히 백준 알고리즘에서 많이 어려워했던 부분이라 꼼꼼히 봤다. 반복문의 가장 기본적인 형태이다

numbers = [1, 2, 3, 4]

for number in numbers:
    print(number)

for문을 사용하여 안에있는 리스트요소들이 끝날때까지 계속 반복이 된다 그리고 변수는 새로이 적용할 부분을 찾아서 변수처리도 깔끔하게 해준다. 사실 변수처리가 제일 어렵더라...

 

그러나 저렇게 리스트를 많이 쓰면 데이터가 많아져서 효율적이지 못한 코드가 될 수도 있다. 그래서 range함수를 쓰면 조금더 줄이고 효율적으로 쓸 수 있다. 

for i in range(5):
   print(i)

정말 간단하다 i라는 변수안에 1~5까지 계속 반복해서 쓸수 잇게끔해주는 함수가 범위(range)함수이다. 

그다음에 배운 부분이 진짜 오늘 하면서 가장 어려웠던 부분인데 바로 '변환'이다. 기초는 정말 쉬운데 실제로 적용하기가 정말로 힘들었다. 

 

그 어려워했던 부분은 바로 오늘 과제였던 '숫자 야구게임'에서 나왔다. 

import random
import time
from datetime import datetime, timedelta

C = 0
N = int(input())  # 몇자리 숫자인지
M = [0, 1, 2, 3, 4, 5, 6, 7, 8, 9]

start_time = time.time()

random.shuffle(M)
r_list = M[:N]
print(r_list)

while True:

    A = (input("정답을 입력해 주세요"))
    if A == 'exit':
        break

    A_list = []
    for i in A:
        A_list.append(int(i))
    A = A_list

    C = C + 1

    strike_count = 0
    ball_count = 0
    out_count = 0
    out = 0

    time.sleep(1)

    for i in range(0, N):

        print
        if r_list[i] == A[0]:
            if i == 0:
                strike_count += 1
            else:
                ball_count += 1
        elif r_list[i] == A[1]:
            if i == 1:
                strike_count += 1
            else:
                ball_count += 1
        elif r_list[i] == A[2]:
            if i == 2:
                strike_count += 1
            else:
                ball_count += 1
        elif r_list[i] != (A[0] and A[1] and A[2]):
            out += 1
            if out == 3:
                out_count += 1
            else:
                continue

    print(f"{strike_count} strike {ball_count} ball {out_count} out")

    end_time = time.time()

    if strike_count == 3:
        print(f"{C}번만에 맞추셨습니다")
        print(f"기록 : {end_time - start_time:.2f}초")
        print(datetime.now())
        break
    elif A == "exit":
        break

이 코드를 만들면서 조건이 있었다. 바로 'exit'를 쓰면 게임이 종료가 되어야 한다는 점이다. 사실 보다시피 A부분을 리스트로 입력을 받아서 exit를 입력하면 문자열로 뜨기때문에 오류가 나와서 곤혹을 치르고 있던 상황이여서 튜터님한테 찾아가기로 했다. 

 

너무나 간단히 해결해 주셨다.  일단

A = (input("정답을 입력해 주세요"))

이부분에서 기존코드에서는 A = map(int, input().split()) 처럼 int가 붙어서 나왔었는데 그부분을 전부 빼라고 하셨다.

그리고

if A == 'exit':
    break

A_list = []
for i in A:
    A_list.append(int(i))
A = A_list

입력된 A의 값을 exit로 가져왔을 경우에는 게임을 break시키고 숫자가 들어간다면 밑에 a_list와 같이 리스트를 선언하여

반복문을 써서 리스트를 하나씩하나씩 추가하면 되는거였다.

 

진짜...간단하지만 머릿속으로 생각하기는 정말 어려웠을 문제였다. 

 

오늘 배운점은 변환이다. 저렇게 리스트와 문자열 그리고 숫자열로 맘껏 변환하면서 사용자가 입력할 수 있는 다양성을 높여줬다는 부분에서 많이 깨달았다. 튜터님한테 어떻게하면 저렇게 생각할 수 있냐고 하니까 경험이라고 하셨다. 역시...기초보다는 경험인가? 생각해보면 저부분도 기초는 다 아는 내용이다. 반복문이 아직 조금 미흡해서 그렇지. 근데 오늘 튜터님이 가르쳐주신부분처럼 하니 머릿속에 더 많이 남는 것 같았다. 

 

아쉬웠던점. 

 

역시나 오늘도 센스가 부족했다. 아닌가...사실 는게 없다는것처럼 느껴지지만 솔직히 많이 늘은것같긴하다. 그러나 하면서 느끼는 것은 기초가 아직도 많이 부족하고 순간순간마다 적용해야 하는 함수, 변환, 반복, 조건문 등 들이 아직은 미흡하다는 것을 느꼈다. 내일도 아자아자!