Day 3 Python 기본

가연·2024년 12월 9일

반복문, 제어문에서 사용되는 기능

for/while + if

  • pass/continue/break
    -> 원하는 대로 코드의 구조와 흐름을 작성할 수 있다.

Pass

아무것도 안 함 (형식상 맞춤)
코테에서는 주로 생략한다.
실무에서 error를 발생하지 않도록 빈 칸을 넣어주는 것 (의미는 X)

Continue

for/while 다음 순번으로 넘겨줄 때 사용한다. (아래 구문을 pass하고 다음 loop로 넘어간다.)

for i in 조건 :
 if 조건 :
 	continue
    print(a)
 print(a)
 #조건을 만족할 때 print(a)를 하지 않고 넘어간다. 

Break

for/while 에서 다음 순서가 남아 있어도 Stop한다. (loop 끝냄, 불필요한 반복문 멈추는 것)

리스트컴프리핸션(LC)

여러 개의 값을 돌려서 모은다.
[모을 값 for i in 여러개 (if 조건)]

#홀수 번째에 위치한 값들에 'h' 추가하는 코드

a = ["a","b","c","d","e","f","g","c","i"]
for i in range(len(a)): 
if i % 2 == 0:
    #print(i)
    print(a[i]+"h")

⬇️

[a[i]+"h" for i in range(len(a)) if i % 2 == 0]

or

[ v+"h" for i,v in enumerate(a) if i % 2 ==0]

#조건이 2개일 경우 (짝수 번째에 +'e', 홀수 번째에 +'o')
[모을값1 if 조건 else 모을값2 for 롤링]

[ v+"e" if i%2 ==0 else v+"o"  for i,v in enumerate(a) ]

함수

입력, 출력, 입출에 대한 관계를 지정하고 여러번 재사용 할 수 있다.
무엇을 기능할지에 대해 작성하는 것이 핵심!
코드를 정리하는 습관을 가지는 것이 좋다.

def 함수명(입력인자) : #입력 x에 대한 세팅
	무엇을 할지 구현 #입출에 대한 관계/기능 : f
    return 출력 #y출력에 대한 세팅

함수 내에서 만든 변수들은 특별한 조치가 없으면 함수 내에서만 사용된다.
함수 밖에서는 의미 X

*args

입력이 가변적으로 여러개가 들어올 경우
*args 는 list(실제는 tuple)처럼, **args는 dict처럼 사용된다.
**arg 의 경우 key=value로 입력, arg 대신 어느 단어도 사용 가능.
ex/ *name, **score.

#여러개의 숫자를 더하는 함수

def sumrandom(*args):
    temp = 0
    for i in args:
        temp += i
    return temp
sumrandom(10,20,50,75,91) 
# 출력 : 246
def sumscore(**sum_s):
    for name, score in sum_s.items(): 
        print(name, score)
    print("최소 점수:", min(sum_s.values()))
    print("최대 점수:", max(sum_s.values()))

sumscore(철수=40, 영희=80, 맹구=50)
# 출력 : 철수 40 / 영희 80 / 맹구 50 / 최소 점수: 40 / 최대 점수: 80

여러 개를 출력하는 경우

return a+b, a-b, a*b, a/b
여러개 출력 중 필요한 값이 있다면 index로,
출력 값들을 조작해서 써야 한다면 list로 변경해서 사용

lambda 함수

- 데이터 전처리 : apply + 어떤 일을 처리할 지에 대한 규칙 표현
- 코테 : 특이한 정렬 조건에 대한 규칙을 표현할 때

(lambda a,b:a+b)(10,20)
→ 30



문제 적용

List

List 변경

  • for & range
a = [ , , , ,]
b = []
for i in range(len(a)) :
    b.append(a[i]+str(i+1))
  • for & 값 자체 (직접 counting)
cnt = 1
for i in a:
    print(i+ str(cnt))
    cnt += 1
  • 리스트컴프리핸션
[a[i] + str(i+1) for i in range(len(a))]

List 필터링

값/ 조건에 대해 정리 - 규칙에 대해 판단

  • 규칙이 있다면
    > 규칙에 대해 코드화
#홀수 판별
a = [1,2,3,4,5]
b = []
for i in a:
    if i % 2 == 1:
        b.append(i)
b

or

[i for i in a if i % 2 == 1]
  • 규칙이 없다면 (ex 데이터를 수집할 때, 예외 처리)
    > 예외 사항을 전부 나열하기
for i in a:
if (i==1) or (i==3) or (i==5):
    print(i)

> 최소한의 리스트업으로 필터링 (in, not in)

b = [1,3,5,7]
for i in a:
    if i in b: #(i==1) or (i==3) or (i==5) or (i==7) // i%2 == 1
        print(i)
#1,3,5를 제외한 모든 원소에 +10
[i+10 for i in a if i not in [1,3,5]]

Dict

값

a[~~] : 값을 찾는 방법

a가 어떤 자료형이냐?
list - a[int], a[slicing]
dict - a[key값] (exact matching 필요)
numpy array - a[int], a[slicing], a[list]
pandas DF/series - a[int], a[slicing], a[여러개], a[내가만든인덱스]

Q. 최고점과 최저점 찾기

max(list) → 최고점
max(dict) → key값 기준 최댓값 (문자열의 경우 그에 따른 숫자 코드값(ord())에 따라..)
ㄴ 어떤 대상을 중심으로 할지 명시해야한다. ( dict.keys() dict.values() dict.items() ) → max(dict.values())

#누가 최고점/최소점을 받았는지?

for name, score in dict.items():
    if score == min(dict.values()) :
        print("최소점 학생:" , name)
    elif score == max(dict.values()) :  
        print("최고점 학생:", name)
    else :
        pass
#이 경우 min = max일 때 문제 -> elif 말고 if 로 쓰기 ??

범위(in_out)

범위에 대한 표현을 코드로 어떻게 할 것인가?
-> 수치화 하고 범위(부등식, 범위)화 조건을 작성한다.

Q. 4개의 꼭짓점이 주어졌을 때, 어떤 점(변수)이 그 점들로 이루어진 사각형 내부(in)에 있는지 외부(out)에 있는지 구별하기

: (x축 조건) and (y축 조건)

x = int(input("x 좌표값:")
y = int(input("y 좌표값:")
if (x>50 and x<100) and (y>40 and y<80) :
	print('사각형 내부')
else:
	print('경계 또는 외부')

0개의 댓글