본문 바로가기

TIL

[TIL 2024. 02. 23]

오늘 한 일

  • 개인과제 2 기본기능 완(추가기능:1,3완성)
  • 개인과제 3 기본기능 완
  • 오후 7시_파이썬 문법 특강
  • TIL 작성

 

오늘의 리뷰

개인과제1 (updown.py)

  1. 문제상황: 깃허브에 코드를 공유하고, 팀원들로부터 피드백을 받음. 추가기능 1번인 유효범위 제한을 구현했는데, 첫번째 유효범위 제한에서는 '유효한 입력이 아닙니다'라는 문구가 올바르게 출력되지만, 그 이후에도 계속 유효범위를 벗어나는 숫자를 입력할 경우에는 up, down 등으로 출력되는 오류를 확인함.
  2. 오류 원인: while 무한루프 안에 유효범위를 검사하는 ifelse문을 사용함. 여기서 무한 루프 안에 iput을 넣어주지 않아서맨 처음 한 번만 유효범위 검사가 되는 거였음.
  3. 문제 해결: input문을 while 무한루프 안에 넣어줌. //

 

 

개인과제2 (rsp_play.py)

  1. 문제상황: 기본기능 구현이 끝나고, 추가기능 구현을 시도함. 그런데 게임을 반복하고 싶은 경우에 게임을 재시작하는 것을 while 무한루프문을 그대로 끌고 와서 붙여넣기해서 기능은 구현함(처음에는 while 무한루프 구문만으로 기능을 구현했음). 하지만 매번 이렇게 하면 비효율적일 거라는 깨달음과 함께 함수를 사용하는 이유를 새삼 체감하게 됨. 함수로 다시 처음부터 기능을 구현해보기로 함.
  2. 문제 해결: check_winner() 함수를 새로 선언함. 그리고 재시작시에는 이 함수를 호출해서 활용함. //
import random


def check_winner():
    draw_cnt = 0
    win_cnt = 0
    lose_cnt = 0

    rsp = ['가위', '바위', '보']
    computer_pick = random.choice(rsp)

    while True:
        user_pick = input('가위, 바위, 보 중 하나를 선택하세요: ')
        if user_pick not in rsp:
            print('유효한 입력이 아닙니다')
            continue

        if user_pick == '가위':
            if computer_pick == '가위':
                print('비겼어요!')
                draw_cnt += 1
                break
            elif computer_pick == '바위':
                print('컴퓨터 승리!')
                lose_cnt += 1
            elif computer_pick == '보':
                print('사용자 승리!')
                win_cnt += 1
            print(f'사용자: {user_pick}, 컴퓨터: {computer_pick}')
        elif user_pick == '바위':
            if computer_pick == '가위':
                print('사용자 승리!')
                win_cnt += 1
            elif computer_pick == '바위':
                print('비겼어요!')
                draw_cnt += 1
                break
            elif computer_pick == '보':
                print('컴퓨터 승리!')
                lose_cnt += 1
            print(f'사용자: {user_pick}, 컴퓨터: {computer_pick}')
        elif user_pick == '보':
            if computer_pick == '가위':
                print('컴퓨터 승리!')
                lose_cnt += 1
            elif computer_pick == '바위':
                print('사용자 승리!')
                win_cnt += 1
            elif computer_pick == '보':
                print('비겼어요!')
                draw_cnt += 1
                break
            print(f'사용자: {user_pick}, 컴퓨터: {computer_pick}')
    return draw_cnt, win_cnt, lose_cnt

 

  1. 문제상황: input을 무한루프 안에 넣어줬음에도 유효범위 판단이 무한히 나타나는 오류가 나타남.
  2. 오류 원인:  처음에 if elif elif elif문으로 유효범위 판단과 승패를 판단하는 코드를 연달아 작성했음. 하지만 승패판단 코드가 복잡해지면서 코드가 꼬임.
  3. 문제 해결: 유효범위는 if문으로 별도로 판단하고, 승패 판단은 if elif elif문으로 따로 작성함. 즉, 무한루프 내에서 유효범위 판단과 승패 판단 부문을 구분해서 코드를 작성함. // 

 

개인과제3 (manage.py)

  1. 문제상황: Post 클래스의 인스턴스 변수인 author로 Member 클래스의 username을 저장되게 하는 것에서 어려움을 겪음. 그래서 처음에는 member.username을 for문으로 돌면서 새로운 변수인 username_value로 저장해서 사용하려고 함. 하지만 다른 기능의 구현에서 막힘
  2. 오류 원인: 클래스의 특성 이해 부족. 우리가 할 때마다 for문을 작성하지 않기 위해서 함수를 쓰는 것처럼. 함수의 절차지향적인 한계를 극복하기 위해 유연성을 갖춘 클래스를 사용하게 됨. 이래서 클래스를 쓰는구나!를 깨닫게 됨..
  3. 문제 해결 //

코드 수정 이전

 

코드 수정 이후

  1. 문제상황: 작성자별로 포스팅의 title를 print하고, content의 특정 단어를 포함한 포스팅의 title을 print하는 것에서 어려움을 겪음. 방향성 자체를 잡을 수가 없어서 어려웠음.
  2. 문제 원인: filter를 생각하지 못함. 기본적으로는 조건문을 통해서도 가능하며, 코드를 더 줄이고 싶다면 filter(lambda)식을 사용할 수 있음. 일단 정보를 filter해서, 이를 for문으로 반복할 수 있음.
  3. 문제 해결: //

'TIL' 카테고리의 다른 글

[TIL 2024. 02. 27]  (0) 2024.02.28
[TIL 2024. 02. 26]  (0) 2024.02.27
[TIL 2024. 02. 22]  (0) 2024.02.23
[TIL 2024. 02. 21]  (0) 2024.02.21
[TIL 2024. 02. 20]  (0) 2024.02.20