코딩 개발일지

TIL 9일차 - class의 이해 / 1~100숫자맞추기, 가위바위보 게임 과제 본문

AI 본 교육/AI 3주차

TIL 9일차 - class의 이해 / 1~100숫자맞추기, 가위바위보 게임 과제

호기호 2023. 8. 21. 20:45

예비군이 2번이나 있어서 따라가기 좀 힘든데 화이팅!!!!!!!


주말동안 class를 이해하는데 많은 시간을 보냈다.

class Monster():
    def __init__(self, hp):
        self.hp = hp
       
    def attack(self, damage):
        self.damage = damage

    def status_check(self):
        print(f"monster's hp : {self.hp}")

class와 def __init__ 은 아마 왠만하면 같이 쓰지 않을까 싶다.

자기자신을 표현하는 함수라고 생각하면 된다. 이걸 생성자 함수라고 하는 것 같다.

 

class의 method에서 self 또한 무조건 들어간다고 생각해도 될 것 같다.

(class내의 함수를 method라고 함)

 

나도 class를 이해하는데 오래걸렸고, 용어도 많이 헷갈렸는데, 아래 유튜브 영상을 천천히 돌려보니 이해하기 수월했다.

https://www.youtube.com/watch?v=FRHGtAvU03Q&t=121s


첫 번째 과제 내용은

내용:

  1. 플레이어와 컴퓨터가 참여하는 업다운 게임을 만드세요.
  2. 프로그램은 다음과 같은 기능을 포함해야 합니다.
    • 컴퓨터는 1부터 100 사이의 랜덤한 숫자를 생성합니다.
    • 플레이어는 숫자를 입력하고, 입력한 숫자와 컴퓨터의 숫자를 비교하여 "업" 또는 "다운" 힌트를 제공합니다.
    • 플레이어가 컴퓨터의 숫자를 정확히 맞히면 시도한 횟수를 알려줍니다.
    • 플레이어가 숫자를 맞힐 때까지 위 과정을 반복합니다.

추가 도전 과제:

  1. 플레이어가 입력한 숫자가 범위를 벗어날 경우, 적절한 안내 메시지를 출력하여 유효한 범위 내의 숫자를 입력하도록 유도하세요.
  2. 플레이어가 게임을 반복하고 싶을 경우, 게임 재시작 여부를 묻고 그에 따라 게임을 초기화하거나 종료하는 기능을 추가하세요.
  3. 게임이 종료될 때 플레이어의 최고 시도 횟수를 기록하고, 다음 게임에서 이를 표시하는 기능을 구현하세요.

차근차근 위에서부터 시작했는데, 처음엔 너무 막막햇다. 역시 실전은 다른가..? 그래도 최대한 혼자힘으로 해보자!!!!

처음 할때는 while을 여러개 써서 뒤죽박죽되서 망했다. 구글링해서 하나씩 하다보니 완료했다.

추가 도전과제 2번은 구현못했다. break로 끝내고 '재시작하시겠습니까? yes'하면 다시 시작하는걸 만들면 될것같은데 모르겠음.

import random

random_number = random.randint(1, 100)
# print(random_number)

num = int(input("1~100사이의 숫자를 입력해 주세요."))
count = 0

while True:

    if 1 > num or num > 100:
        print(f'{num}은 1~100사이의 숫자가 아닙니다. 다시 입력해 주세요.')
        num = int(input(""))

    elif num < random_number:
        print(f'{num}보다 큽니다. 다시 입력해 주세요.')
        num = int(input(""))
        count = count+1

    elif num > random_number:
        print(f'{num}보다 작습니다. 다시 입력해 주세요.')
        num = int(input(""))
        count = count+1

    elif num == random_number:
        count = count+1
        print(f'정답입니다. 총 {count}번 시도했습니다.')
        break

while 쓸 때, 처음엔 count <100 이런식으로 적었는데, while은 True False로 만들어지다보니, while True로 만들면 된다는것을 알았다. 근데 아직도 살짝 헷갈림.


두 번째 과제는 시작만(?) 살짝 했음. 내일 과제 끝마칠 예정..!! 인데 생각해보니 예비군 가야해서 오늘 2번째까지 끝내야겠다..

과제 내용:

  1. 플레이어와 컴퓨터가 참여하는 가위바위보 게임을 만드세요.
  2. 게임은 다음 순서로 진행됩니다.
    • 플레이어가 가위, 바위, 보 중 하나를 입력합니다.
    • 컴퓨터도 무작위로 가위, 바위, 보 중 하나를 선택합니다.
    • 플레이어와 컴퓨터의 선택을 비교하여 승패를 판정합니다.
    • 결과를 출력하여 플레이어가 이겼는지, 컴퓨터가 이겼는지, 비겼는지를 알려줍니다.
    • 게임을 반복하거나 종료할 수 있는 기능을 추가하세요.

추가 도전 과제:

  1. 게임의 승, 패, 무승부 횟수를 기록하고, 게임 종료 시에 플레이어에게 통계를 제공하세요.
  2. 플레이어가 입력할 때 대소문자를 구분하지 않도록 프로그램을 개선하세요.
  3. 플레이어가 게임을 반복하고 싶을 경우, 게임 재시작 여부를 묻고 그에 따라 게임을 초기화하거나 종료하는 기능을 추가하세요.
import random

computer = random.choice(['가위', '바위', '보'])
print(computer)

user = input("가위 바위 보 !!! (입력해주세요.)")

if user == computer:
    print(f'컴퓨터는 {computer}를 냈습니다.')
    print("무승부")

elif computer == '가위':
    print(f'컴퓨터는 {computer}를 냈습니다.')
    if user == '바위':
        print("승리")
    elif user == '보':
        print("패배")

elif computer == '바위':
    print(f'컴퓨터는 {computer}를 냈습니다.')
    if user == '보':
        print("승리")
    elif user == '가위':
        print("패배")

elif computer == '보':
    print(f'컴퓨터는 {computer}를 냈습니다.')
    if user == '가위':
        print("승리")
    elif user == '바위':
        print("패배")

과제1과 마찬가지로 게임 반복/종료 기능만 추가하면 될 것 같고, 추가 도전과제 추가하면 될듯!! 기본 틀만 잡아놨다.