내일배움캠프 TIL 23/08/17

김민재·2023년 8월 17일
0

이번 주차는 계속해서 파이썬 문법에 대해 배우는데
새로 지급된 강의에서는 다시 Vs코드로 진행했다.
가상환경을 설정하는 것은 기존과 동일한걸 복습했고, 새로이 코드 컨벤션에 대해 알게 되었다.
협업을 중요시하는 개발 환경에선 프로그래밍 언어를 동일하게할 필요성이 존재한다.
그래서 pep8 패키지를 설치하고 익숙해지려고 하고 있다.


또한 함수 내에서 변수를 설정하면 그곳에서만 변수로서 기능하는 지역변수와
함수 밖에서 설정하는 전역변수에 대해서 강의자료 주석에 달려있던
Why are global variables evil?에 대한 논의를 더 심층적으로 살펴봤다.
한 답변자의 말에 따르면

  • 전역변수를 공유하는 두 개의 데이터 중 어떤 하나가 공유 전역 상태의 값을 변경하는 부작용을 일으킨다면 다른 하나의 시작상태가 변경된 전역변수의 값을 받게 되었는지 알 수 없게 된다는 것이 그 이유 중 하나이고,
  • 가독성도 떨어지게 된다는 것이 두번째 이유이다.

물론 전역변수를 완전히 사용 안 할 수는 없지만, global variable를 감싸주는 single wrap을 이용해 전역변수를 잘 활용할 수도 있다고 한다.


그리고 깃북에서 Mission2 링크를 타고 들어간 문제에서 처음에 진행하다가 잘 안풀려서 해답을 찾아봤는데,

# 정답 하나씩 비교
    for i, answer in enumerate(answers):

        # 문제의 길이가 더 길수도 있으므로 학생의 패턴을 반복하기
        # 문제 정답 맞추면 1씩 더하기
        if student_1[i % len(student_1)] == answer:
            collects[0] += 1

이 구문이 해석이 안되어서 조금 고생했다.
우선 enumerate(answers) 값으로 (해답, 즉 answers 값이 예를 들어 [5,5,5,5,5,5,5,5,5,5,]일 때!)
0 5 // 1 5 // 2 5 // ...
이런식으로 10줄이 나온다.
그리고 여기서 student_1은 [1,2,3,4,5]순서대로 제출하는 학생으로
len(student_1) 값은 5이다.
그렇기에 i%5는 0,1,2,3,4,0(5%5),1(6%5)... 식으로 진행되어
student_1 리스트의 [], 각 순서를 뽑아낼 수 있게 된다.


다만 해석을 찾아보기 전에 내가 한 진행방식은

fir = [1,2,3,4,5]
answer_sheet = []
answers = fir * 200
for fir_answer in answers:
    if fir_answer == answer_sheet[0]:
        print('정답')
    else:
        print('오답')

여기서 answer sheet가 해답의 데이터를 받아온다고 하면
if 조건문에서 fir 리스트에서 뽑아낸 각 숫자를 answer sheet 리스트의 각 순서와 비교해서
예를 들어 정답,오답을 나누려고 했는데,
answer sheet의 리스트의 각 순서를 다시 뽑아내는 방법을 모르겠다.
다시금 반복문으로 할 수 있나 고민해보다가 해답을 찾아보게 되었는데, 내일 다시 진행해보려고 한다.

0개의 댓글