22.09.20(화) Today I Learned

정형빈·2022년 9월 21일
0

TIL

목록 보기
14/71

9/20 오늘의 시간표

09:00 ~ 10:00 [원격] 자료구조와 알고리즘
10:00 ~ 11:00 [원격] 자료구조와 알고리즘
11:00 ~ 12:00 [원격] 자료구조와 알고리즘
12:00 ~ 13:00 [원격] 자료구조와 알고리즘
13:00 ~ 14:00 점심식사
14:00 ~ 15:00 [원격] 자료구조와 알고리즘
15:00 ~ 16:00 [원격] 자료구조와 알고리즘
16:00 ~ 17:00 [원격] 자료구조와 알고리즘
17:00 ~ 18:00 [원격] 자료구조와 알고리즘
18:00 ~ 19:00 저녁식사
19:00 ~ 20:00 [실습] 실무적용 알고리즘 실습
20:00 ~ 21:00 [실습] 실무적용 알고리즘 실습

자료구조와 알고리즘 3일차이다. 3일차이고 내일 4일차까지 하면 사전 편성된 시간표에서의 이 강의는 끝이 나지만 1, 2일차에 총 5주짜리 강의의 1주차 내용만 시간을 엄청써가면서 겨우 끝내고 아! 지금은 아직 때가 아니구나 싶어서 2주차 이후의 강의는 다음에 듣는걸로 하고 오늘부터는 그 시간에 거북이반에서 배운내용 복습과 과제를 풀어보는 시간을 가지기로 했다.

자료구조와 알고리즘 원격강의

-> 파이썬 거북이반 과제 및 복습

그래서 오늘은 어제 거북이반에서 했던 내용인 가위바위보 게임 만들기에 대한 내용을 복습하며 다시 해보는 시간을 가져보았다.

import random
option = ["가위", "바위", "보"]
player_count = 0
computer_count = 0
while True:
    print(f'현재 스코어는 {player_count}:{computer_count}')
    if player_count == 2 or computer_count == 2:
        if player_count == 2:
            print("컴퓨터 상대로 승리하셨습니다.")
        else:
            print("컴퓨터 상대로 졌습니다.")
        break
    computer = random.randint(0, 2)
    computer_value = option[computer]
    while True:
        user_value = input("가위 바위 보?")
        if user_value in option:
            break
        else:
            print("값을 정확히 입력해주세요!")
    print(f'플레이어는 {user_value}를 선택, 컴퓨터는 {computer_value}를 선택했습니다')
    if computer_value == user_value:
        print("비겼습니다")
    elif user_value == "가위":
        if computer_value == "바위":
            print("졌습니다")
            computer_count += 1
        else:
            print("이겼습니다")
            player_count += 1
    elif user_value == "바위":
        if computer_value == "보":
            print("졌습니다")
            computer_count += 1
        else:
            print("이겼습니다")
            player_count += 1
    elif user_value == "보":
        if computer_value == "가위":
            print("졌습니다")
            computer_count += 1
        else:
            print("이겼습니다")
            player_count += 1
    else:
        print("예상치 못한 경우입니다")
print("게임이 끝났습니다.")

거북이반 첫날에 했던 가위바위보게임 만들기의 내용이다. 가위바위보 게임을 했을때 사용자의 input값과 컴퓨터의 랜덤값을 비교해 승패를 나누고 한쪽이 먼저 2승을 하면 종료하도록 되어있다. 해당 게임을 함수로 모듈화하는 것이 과제였는데

import random

def get_user_value():
    option = ["가위", "바위", "보"]
    player_count = 0
    computer_count = 0
    
    while True:
        print(f'현재 스코어는 {player_count}:{computer_count}')
        if player_count == 2 or computer_count == 2:
            if player_count == 2:
                print("컴퓨터 상대로 승리하셨습니다.")
            else:
                print("컴퓨터 상대로 졌습니다.")
            break
        
        computer = random.randint(0, 2)
        computer_value = option[computer]
        
        while True:
            user_value = input("가위 바위 보?")
            if user_value in option:
                break
            else:
                print("값을 정확히 입력해주세요!")
                
        print(f'플레이어는 {user_value}를 선택, 컴퓨터는 {computer_value}를 선택했습니다')
        
        if computer_value == user_value:
            print("비겼습니다")
        elif user_value == "가위":
            if computer_value == "바위":
                print("졌습니다")
                computer_count += 1
            else:
                print("이겼습니다")
                player_count += 1
        elif user_value == "바위":
            if computer_value == "보":
                print("졌습니다")
                computer_count += 1
            else:
                print("이겼습니다")
                player_count += 1
        elif user_value == "보":
            if computer_value == "가위":
                print("졌습니다")
                computer_count += 1
            else:
                print("이겼습니다")
                player_count += 1
        else:
            print("예상치 못한 경우입니다")
    return "게임이 끝났습니다."
    
user_value = get_user_value()
print(user_value)

def를 통해 get_user_value()라는 함수를 정의하고 그 내용은 위에서 만든 가위바위보 게임이 된다. 대신 게임 진행코드 뿐만 아니라 게임의 규칙에 해당하는 option과 player_count, computer_count의 값도 모두 함수안에 집어 넣어야 값이 계산된다. 그리고 마지막에 "게임이 끝났습니다"라는 문구를 print해버리면 user_value에서 함수를 실행시킨값을 print 할때 print라는 함수가 두번 중복되어 한번은 none으로 출력되므로 return "게임이 끝났습니다."로 바꿔주었다.

이제 여기서 사용된 while문 조건문 def등의 함수들의 사용법은 이제 거의 확실해져서 실전에서도 해당 구문을 사용하라고 한다면 잘 사용할 수 있을 것 같다. 대신 while문을 사용하여 문제를 풀어라, 조건문을 사용하시오.라는 설명없이 문제만 주어지고 이런문제는 조건문을 사용해야 풀 수 있겠구나라고 유추하는 것이 아직 좀 어려워서 경험을 더 쌓는것이 아무래도 우선인 것 같다.

파이썬 거북이반

파이썬 거북이반에서 이번에는 class에 대해 집중적으로 다루어주셨다.

class란?

  • 클래스를 선언하는것은 과자 틀을 만드는 것이고, 선언된 과자틀(class)로
    과자(instance)를 만든다고 생각하면 된다.
  • 선언 후 바로 사용되는 함수와 다르게 클래스는 인스턴스를 생성하여 사용하게 된다.
  • class 내부에 선언되는 메소드는 기본적으로 self라는 인자를 가지고 있다.
  • self는 클래스 내에서 전역 변수와 같이 사용된다.

용어 정리

- 인스턴스(instance) : class를 사용해 생성된 객체
- 메소드(method) : 메소드란 클래스 내에 선언된 함수이며, 클래스 함수라고도 한다.
- self : 메소드를 선언할 때에는 항상 첫번째 인자로 self를 넣어줘야 한다.
		 클래스 안에 있는 변수나 함수 정보를 담고 있다.
         

저번에도 정리한 내용이지만 클래스를 이보다 깔끔하고 확실하게 설명하는 방법은 없는 것 같아서 다시 한 번 정리내용을 가져왔다.
이 내용들을 머리속에 넣은 채 수업을 들으니 수업에 잘 따라갈 수 있었다. 아직도 클래스를 왜 사용해야 하는지 와닿지는 않지만 클래스를 함수를 통해 클래스 내의 메소드를 통해 인스턴스를 뽑아내는 것이 가능하다는 것 까지는 이해를 할 수있게 되었다.

class Person:
    def talk(self):
        print("안녕하세요 저는" + self.name + "입니다.")
        print("제 나이는" + self.age + "입니다.")
        print("제 취미는" + self.hobby + "입니다.")
        print()

    def __init__(self, name, age, hobby):
        print("이닛 함수 실행중")
        self.name = name
        self.age = age
        self.hobby = hobby


x = Person("권기현", "20", "피아노")
y = Person("오형석", "20", "기타")
z = Person("정형빈", "20", "캐스터넷츠")

x.talk()
y.talk()
z.talk()

# members = []

# members.append(x)
# members.append(y)
# members.append(z)

# for member in members:
#     print(member.name)
#     print(member.age)
#     print(member.hobby)

실제 수업에서 사용된 코드이고 여기서는 Person이라는 클래스를 통해 사람의 이름, 나이, 취미 등을 가져와 쉽게 자신을 소개하는 소개문을 쉽게 만들 수 있었다.

오늘 할 일을 마치며

점점 하루의 학습이 거북이반을 중점으로 이루어지고 있다. 덕분에 하루에 나가는 진도량은 줄었을지언정 그날 학습량에 대한 이해도가 눈에 띄게 올랐고 처음 캠프에서 미니 프로젝트를 할 때도 얘기한 것이지만 "다양한 것을 해보는 것도 물론 좋지만 우선 내가 할 수 있는 부분부터 차근차근 완벽하게" 라는 마인드를 가지고 임하는 것을 최우선적으로 생각하도록 하겠다.

profile
스파르타 내일배움캠프 3기 수강생 정형빈

0개의 댓글