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

김민재·2023년 8월 18일
0


오늘은 강의 진행에 앞서 어제 찝찝했던 부분을 튜터님께 개인적으로 질문했다.
질문이 또다른 질문은 낳다보니 첫 질문이 뭐였는지 알 수 없게 된 적도 있었지만, 그래도 해결해나가는 과정에서 조금은 성장했기를 기대해본다.


우선 생각나는 질문은

car_brands = ["Tesla", "BMW", "Audi", "Hyundai", "Ferrari", "Kia"]

car_list = []

for car in car_brands:

    if car == 'Tesla' or 'BMW':
        car_list.append(car.upper())
    if car == 'Ferrari':
        car_list.append(car.lower())
        #출력: ['TESLA', 'BMW', 'AUDI', 'HYUNDAI', 'FERRARI', 'ferrari', 'KIA']

사실 머리로는 이렇게 코드를 짜면 안되는 것을 알고 있었는데,
for문을 돌렸음에도 출력값이 왜 전체가 다 나오는지에 대한 의문이 있었다.

확실히 말할 수 있는 것은 위의 조건문은 True이기 때문에
True or False 이든 True or True 이든 값은 항상 True이다.
항상 참이기에 리스트의 모든 값이 도출되어 나온것이다.

그래서 내가 생각하기엔,
if (car == 'Tesla') or 'BMW':
컴퓨터는 이렇게 묶어서 car안에 테슬라가 있다는 것이 항상 참이기에
모든 값을 도출해내는 것이 아닌가 생각해본다.
이렇든 저렇든 가장 중요한 것은
if car == 'Tesla or 'BMW' 와 if car == 'Tesla' or car == 'BMW'가
작동방식도 출력값도 전혀 다르다는 것이다.


다음으로 깃북 Mission2의 해설에 나와있던
rank라는 딕셔너리를 cnt 변수로 구성하라는 문구
rank={}
랭크는 미리 빈 딕셔너리로 설정해두었으나, cnt 값을 딕셔너리에 넣는 것에 대한 질문이었다.
우선 답은

rank[1]=cnt_one
rank[2]=cnt_two
rank[3]=cnt_three

이렇게 1이라는 key값에 cnt_one이라는 value 값을 집어넣는걸 반복하는 것이다.
강의에서도 봤던 내용인 것 같은데 막상 해보려니 기억도 안나거니와 푸는 방식도 떠오르지 않았다.
그래서 만들어진 rank 딕셔너리를
all_rank_values = rank.values()를 통해
value만 뽑아주면 출력은 [2, 1, 2]로 나와서
이걸 max값으로 뽑아주는 방식이 해설이었다.

참고로 내가 처음 진행했던 방식은 두 리스트가 주어진다는 가정하에
첫번째 친구의 답안 형식 리스트를 뽑아서 곱해주고

fir = [1, 2, 3, 4, 5]
answer_sheet = [2, 5, 3, 4, 5, 5, 2, 3, 3, 3]
answers = fir * 2

for i, ai in enumerate(answers):

    if ai == answer_sheet[i]:
        cnt_correct += 1
        
    else:
        cnt_wrong += 1

enumerate 한 i값 (0 , 1, 2, ... ,10)을
answer_sheet의 리스트 순번을 뽑는데 사용해주는 것으로 활용해주는 방식을 사용했다.

0개의 댓글