[내배캠 AI코스] TIL

내일배움캠프 12일차 TIL - 1, 2번 과제

띵제 2024. 2. 28. 23:06

 

1번 과제 

 

vs코드로 열심히 짰던 코드를 다시 바꿔준다.

파이썬 코드만 남도록.

간단해보였음에도 어려웠다. 코드의 세계는 정말 어렵다..

 

첫번째 시도

 

import random

 

answer = random.randint(1, 100)  # 1부터 100 사이의 정수를 랜덤으로

guess = int(input("숫자를 입력하세요: "))

tries = 0  # 시도횟수

n = 5  # 시도횟수 5번으로 제한

 

while tries <= n:  # n번까지(n과 같을때까지) 반복

    tries += 1

    if guess is not None:

        try:

            if guess == answer:

                result = "정답입니다."

                break

            elif guess > answer:

                result = "DOWN"

            elif guess < answer:

                result = "UP"

        except ValueError:

            result = "1부터 100까지의 숫자를 입력해주세요."

    else:

        result = "검색어를 입력하세요."

if tries > n:

    result = "땡! 정답은 %d입니다." % answer

 

숫자를 입력해도 아무런 변화가 일어나지 않는다.

 

잘못된 점 :

 

1. ‘tries’의 초기화 및 비교

’tries’가 5번까지 반복되도록 설정되었지만. ‘tries’를 초기화한 후에 ‘while’루프가 시작되므로

6번째 시도까지 허용됩니다. 즉, 사용자가 5번까지 시도할 수 없습니다.

while tries <= n: 을 ‘while tries < n: 으로 변경해야 합니다.

 

2. 사용자 입력의 위치

사용자 입력을 받기 전에 ‘guess’를 정의해야 합니다.

사용자 입력을 받는 코드 input을 while 루프 내부에 넣어야 합니다.

 

3. guess의 업데이트

while 루프 내부에서 매번 새로운 guess를 받아야 합니다.

 

 

그래서 2번째 시도

 

import random

 

answer = random.randint(1, 100)  # 1부터 100 사이의 정수를 랜덤으로

tries = 0  # 시도횟수

n = 5  # 시도횟수 5번으로 제한

 

while tries < n:  # n번까지(n과 같을때까지) 반복

    guess = int(input("숫자를 입력하세요: "))  # 사용자 입력을 받음

    tries += 1

    if guess is not None:

        try:

            if guess == answer:

                result = "정답입니다."

                break

            elif guess > answer:

                result = "DOWN"

            elif guess < answer:

                result = "UP"

        except ValueError:

            result = "1부터 100까지의 숫자를 입력해주세요."

    else:

        result = "검색어를 입력하세요."

 

if tries >= n:  # 시도 횟수가 제한을 초과하면

    result = "땡! 정답은 %d입니다." % answer

 

print(result)  # 결과 출력

 

 

사용자가 숫자를 어디에 입력하는 지를 물으니까

아 그럼 사용자가 숫자를 입력할 위치를 더 명확하게 지정해주겠다며 새로운 코드를 짜준다.

참고로 사용자에게 숫자를 입력하라는 프롬프트가 나타나는 적절한 위치는 while루프 내부라고 한다.

 

import random

 

answer = random.randint(1, 100)  # 1부터 100 사이의 정수를 랜덤으로

tries = 0  # 시도횟수

n = 5  # 시도횟수 5번으로 제한

 

while tries < n:  # n번까지(n과 같을때까지) 반복

    guess = input("숫자를 입력하세요: ")  # 사용자 입력을 받음

    tries += 1

    if guess.isdigit():  # 입력이 숫자인지 확인

        guess = int(guess)

        if guess == answer:

            result = "정답입니다."

            break

        elif guess > answer:

            result = "DOWN"

        elif guess < answer:

            result = "UP"

    else:

        result = "1부터 100까지의 숫자를 입력해주세요."

 

if tries >= n:  # 시도 횟수가 제한을 초과하면

    result = "땡! 정답은 %d입니다." % answer

 

print(result)  # 결과 출력

 

 

아니 나는 터미널에다가 입력을 하는지 어쩌는지를 물어본거였는데.

터미널에 숫자를 입력해 게임을 진행하면 된다길래 진행해보았다.

그런데 업다운이 표시되지 않고 자꾸 숫자를 입력하라는 말만 뜬다.

 

코드를 다시 살펴보니, 사용자가 숫자를 입력한 후에 결과를 출력하는 부분이 누락되어 있다고 한다. 업/다운 결과를 출력하도록 코드를 수정해준다.

 

import random

 

answer = random.randint(1, 100)  # 1부터 100 사이의 정수를 랜덤으로

tries = 0  # 시도횟수

n = 5  # 시도횟수 5번으로 제한

 

while tries < n:  # n번까지(n과 같을때까지) 반복

    guess = int(input("숫자를 입력하세요: "))  # 사용자 입력을 받음

    tries += 1

    if guess is not None:

        try:

            if guess == answer:

                result = "정답입니다."

                break

            elif guess > answer:

                result = "DOWN"

                print("DOWN")

            elif guess < answer:

                result = "UP"

                print("UP")

        except ValueError:

            result = "1부터 100까지의 숫자를 입력해주세요."

    else:

        result = "검색어를 입력하세요."

 

if tries >= n:  # 시도 횟수가 제한을 초과하면

    result = "땡! 정답은 %d입니다." % answer

 

print(result)  # 결과 출력

 

이렇게 하니 성공!

 

 

2번 과제 가위바위보 게임 만들기!

 

플레이어가 가위, 바위, 보 중 하나를 입력한다.

컴퓨터도 무작위로 가위, 바위, 보 중 하나를 선택한다.

플레이어와 컴퓨터의 선택을 비교하여 승패를 결정한다.

 

결과를 출력하여 누가 이겼는지 알려준다.

 

일단 여기까지 해보도록 한다.

 

import random

 

랜덤이겠지.. 가위, 바위, 보 중에 랜덤을 돌리니까

리스트 중에서 랜덤으로 추출하는 함수를 쓰면 되겠다.

 

choice = [“가위”, ”바위”, ”보”]

com = random.choice(choices)

 

사용자의 입력을 받기 위해서는 

업다운 게임을 할 때와 동일하게 input함수를 써주면 되겠다.

 

guess = int(input(“가위, 바위, 보! : "))

 

유저 = 컴 비김

유저 가위 컴 바위 짐

유저 가위 컴 보 이김

유저 바위 컴 가위 이김

유저 바위 컴 보 짐

유저 보 컴 가위 짐

유저 보 컴 바위 이김

 

이걸 하나하나 적지 않고 룰을 생각해봐야하나..?

아님 하나하나 적어야 하나..?

 

강의내용을 뒤져본다.

 

…모든 경우의 수를 정말 다 적어줘야 하는 건가..?

 

user = com   print(user, com)

user ‘가위’   com ‘바위’      print(‘lose’)

user ‘가위’   com ‘보’      print (‘win’)

user ‘바위’   com ‘가위’      print (‘win’)

user ‘바위’   com ‘보’      print(‘lose’)

user ‘보’   com ‘가위’      print(‘lose’)

user ‘보’   com ‘바위’      print (‘win’)

 

if, elif, else 세가지 조건에 맞춰서 

코드를 만들어 봐야 하는데..

어쨌든 이기거나 지거나 비기거나로

결과도 세 가지니까

print 기준으로 묶어서 생각해보자.

 

    if user == com:

        print("비겼습니다”)

    elif ((user == "가위" and com == "보")

          or (user == "바위" and com == "가위")

          or (user == "보" and com == "바위")):

        print(“WIN!”)

    else:

        print(“LOOSE”)

 

그런데 영원히 게임을 할 수는 없다.

그러니 게임 횟수를 막아줘야한다.

 

업다운 게임에서 썼던 내용을 그대로 가져와본다.

이번엔 횟수를 다섯번으로 제한하고,

5번을 초과하면 break를 써서 걍 막아버리도록 한다.

 

import random

 

choices = [“가위”, ”바위”, ”보”]

com = random.choice(choices)

 

tries = 0  # 시도횟수

n = 5  # 시도횟수 5번으로 제한

 

while tries < n:  # n번까지(n과 같을때까지) 반복

    user = int(input("가위, 바위, 보! : "))  # 사용자 입력을 받음

    tries += 1

    if user == com:

        print("비겼습니다")

    elif ((user == "가위" and com == "보")

          or (user == "바위" and com == "가위")

          or (user == "보" and com == "바위")):

        print("WIN!")

    else:

        print("LOOSE")

 

if tries >= n:  # 시도 횟수가 제한을 초과하면

   break

 

이러고 돌려보면 바로 에러가 뜬다.

예상했던 바다. 일단 이거저거 가져온것 뿐이니까.

다듬어본다.

 

에러1 오타

에러2 break 문이 루프 바깥에 쓰임

 

아래와 같이 수정한 뒤 실행시켜보니 어라? 게임 시작 문구가 나온다.

가위, 바위, 보! 

 

import random

 

choices = ["가위", "바위", "보"]

com = random.choice(choices)

 

tries = 0  # 시도횟수

n = 5  # 시도횟수 5번으로 제한

 

while tries < n:  # n번까지(n과 같을때까지) 반복

    user = input("가위, 바위, 보! : ")  # 사용자 입력을 받음

    tries += 1

    if user == com:

        print("비겼습니다")

    elif ((user == "가위" and com == "보")

          or (user == "바위" and com == "가위")

          or (user == "보" and com == "바위")):

        print("WIN!")

    else:

        print("LOOSE")

 

if tries >= n:  # 시도 횟수가 제한을 초과하면

   print("게임종료")

 

오예!