오늘은 본격적으로 파이썬 기초 문법 진도를 나간 첫날
아침에 앞으로 뭐 할지 이야기해주고 새로운 팀원분들을 만났다. 다들 두번째 팀이라 그런지 분위기를 풀어내는데 어느정도 익숙해진 것 같다.
저번주 미니프로젝트 때 같은 팀했던 분이랑 또 같은 팀이 됐다. 열심히 공부하시던 분이라 또 만나니까 너무 반가웠다!!
파이썬 문법 기초 1주차
print(a & b) # 교집합
print(a | b) # 합집합
분명 예전에 배웠던 건데 오랜만에 봐서 살짝 헷갈려
f-string
for s in scores:
name = s['name']
score = str(s['score'])
print(name+'는 '+score+'점 입니다')
print(f'{name}은 {score}점입니다')
파일 불러오기
from main_func import *
삼항연산자
참일때 if 조건 else 거짓일때
ex)
if num%2 == 0:
result = "짝수"
else:
result = "홀수"
👇👇👇
result = "짝수" if num%2 == 0 else "홀수"
b_list = []
for a in a_list:
b_list.append(a*2)
👇👇👇
b_list = [a*2 for a in a_list]
map
def check_adult(person):
if person['age'] > 20:
return '성인'
else:
return '청소년'
result = map(check_adult, people)
print(list(result))
result = map(lambda x: ('성인' if x['age'] > 20 else '청소년'), people)
print(list(result))
filter
result = filter(lambda x: x['age'] > 20, people)
print(list(result))
매개변수
def call_names(*args):
for name in args:
print(f'{name}야 밥먹어라~')
call_names('철수','영수','희재')
def get_kwargs(**kwargs):
print(kwargs)
get_kwargs(name='bob')
get_kwargs(name='john', age='27')
클래스
class Monster():
hp = 100
alive = True
def damage(self, attack):
self.hp = self.hp - attack
if self.hp < 0:
self.alive = False
def status_check(self):
#~~~
m = Monster()
m.damage(120)
m2 = Monster()
m2.damage(90)
m.status_check()
m2.status_check()
코딩테스트 연습
문제👇
수포자는 수학을 포기한 사람의 준말입니다. 수포자 삼인방은 모의고사에 수학 문제를 전부 찍으려 합니다. 수포자는 1번 문제부터 마지막 문제까지 다음과 같이 찍습니다.
1번 수포자가 찍는 방식: 1, 2, 3, 4, 5, 1, 2, 3, 4, 5, ...
2번 수포자가 찍는 방식: 2, 1, 2, 3, 2, 4, 2, 5, 2, 1, 2, 3, 2, 4, 2, 5, ...
3번 수포자가 찍는 방식: 3, 3, 1, 1, 2, 2, 4, 4, 5, 5, 3, 3, 1, 1, 2, 2, 4, 4, 5, 5, ...
1번 문제부터 마지막 문제까지의 정답이 순서대로 들은 배열 answers가 주어졌을 때, 가장 많은 문제를 맞힌 사람이 누구인지 배열에 담아 return 하도록 solution 함수를 작성해주세요.
제한 조건
시험은 최대 10,000 문제로 구성되어있습니다.
문제의 정답은 1, 2, 3, 4, 5중 하나입니다.
가장 높은 점수를 받은 사람이 여럿일 경우, return하는 값을 오름차순 정렬해주세요.
입출력 예
answers return
[1,2,3,4,5] [1]
[1,3,2,4,2] [1,2,3]
입출력 예 설명
입출력 예 #1
수포자 1은 모든 문제를 맞혔습니다.
수포자 2는 모든 문제를 틀렸습니다.
수포자 3은 모든 문제를 틀렸습니다.
따라서 가장 문제를 많이 맞힌 사람은 수포자 1입니다.
입출력 예 #2
모든 사람이 2문제씩을 맞췄습니다.
처음에는 1,2,3번 사람 따로따로 list
만들어서
전체 문제수에 %5
, %8
, %10
하는 방식으로 답 넣고 비교했는데
뭐 정석이기도 하고 가장 쉽고 단순한 방법이라
너무 답지 아닌가 하는 게 또 괜히 맘에 안 들고 ㅎ 이걸 좀 줄일 방법이 없을까 싶었다.
그러다가 수업 듣는데 이것저것 힌트가 됐다. enumerate
쓰면 되겠다! 생각했는데 알고보니 힌트에 그거 쓰라고 돼있다더라... 몰랐넹
그리고 삼항연산자로 줄일 수 있을 것 같았는데
for문이 들어가야 해서 이거 어떻게해야하지... 하다가 구글 검색
삼항연산자에 for문 사용하기
for문 + if문 형태 : else 사용 --> SyntaxError
👉 for 참 if 조건
if문 + for문 형태 : else 없으면 --> SyntaxError
👉 참 if 조건 else 거짓 for
아무튼 그래서 각각 찍는 패턴도 리스트 하나에 넣어버리고 결국 완성
def solution(answers):
answer_put = [[1, 2, 3, 4, 5],
[2, 1, 2, 3, 2, 4, 2, 5],
[3, 3, 1, 1, 2, 2, 4, 4, 5, 5]]
score = [0]*len(answer_put)
for answersIdx,ans in enumerate(answers):
for i, eachPut in enumerate(answer_put): #i = index
if ans == eachPut[answersIdx%len(eachPut)]:
score[i] += 1
return [eachPut + 1 for eachPut, ans in enumerate(score) if ans == max(score)]
GitHub 댓글