본문 바로가기
파이썬/기초

[파이썬] 반복문과 제어문/ 함수

by nemonemonemo 2025. 8. 4.

반복문과 제어문

.반복문 + 제어문 같이 사용되는 몇 가지 기능

  • continue, pass, break (최근의 코테의 앞 문제 유형 → 지식적인 내용보다는 복잡한 상황을 코드로) (case by case에 대한 유형들이 많아지는 추세.. 꼼꼼하게 파악해야함)
    • pass
      • 그냥 아무것도 안 하고 문법적인 구조만 맞춰줄때
      • 동일 범주 아래 작성된 코드 내용 skip
    • continue
      • for/while에서 다음 순번으로 강제로 넘길 때

        • break
          • for/while 다음 순번들이 아무리 많이 남아있어도 완전히 stop

 

⇒ 코테에서 효율적으로 반복문/제어문을 잘 사용해야함

 


 

리스트컴프리헨션

  • 파이썬틱하게 코드를 작성하는 방법 중 하나
  • 여러개의 값을 돌리면서 + 원하는 값을 모을 때 
  • ----------------------------------------------------------------
  • 장점
    • 코드가 간결
  • 단점
    • 너무 중첩하면 가독성 꼬임
    • 보통은 1~2개 정도로 for 중첩에서만 주로
  • 기능
    • 값을 돌려가면서 (for), 원하는 값을 모은다(list)
  • 형식
    • 모을 값 for i in 여러개 ++++ 
    • a = ["a", "b", "c", "d", "e", "f", "g", "c", "i"] #ex) a의 리스트에서 c인 원소가 없는 리스트를 만들어 보세요 b = [] for i in a: #-> 정수인덱스도 가능한데.. 굳이 싶음/ 값 자체로 롤링 if i != "c": #개별 원소가 c가 아닐 때 무슨 일을 할지 b.append(i) #else: #pass print(b) ​
  • 위의 코드를 리스트컴프리헨션 형태로
    # 잘 생각 : 전체를 롤링하면서 c가 아닌 것을 모으자
    [i for i in a if i != "c"]
    ​
  • 예제
    #ex) 위의 있는 리스트에서
    #홀수번째 위한 값들만 추출해서 뒤에 'h'라는 문자를 추가해주세요
    a = ['a', 'b', 'c'. 'd', 'e', 'f', 'g', 'c', 'i']
    
    #일반적인 스타일
    for i in range(len(a)):
    	if i % 2 == 0:
    		print(a[i] + "h") 
    		
    #LC
    #전체 데이터를 필터링
    [a[i] + "h" for i in range(len(a)) if i % 2 == 0]
    
    #참고) 한번에 다 사용할 enumerate
    # -> 정수 인덱스: 필터링 조건
    #-> 값 자체: 조작해서 모을 값
    for i, v in enumerate(a): #[(i,v), (i,v)]
    	if i % 2 == 0:
    		print(v + "h")
    		
    #LC
    [v + "h" for i, v in enumerate(a) if i % 2 == 0]		
    ​
#ex) a의 원소들 중에서
#짝수번째 값은 e를 붙이고(0,2,4...)
#홀수번째 값은 o를 붙이고(1,3,5...)
#=> ["ae","bo","ce","do",...]
#참고) 앞의 문제와 차이점 : case by case

for i,v enumerate(a) :
	if i % 2 == 0 :
		print(v + "e")
	elif i % 2 == 1 :
		print(v + "o")
	else:
		print("입력이 이상해요")

for i,v enumerate(a) :
	if i % 2 == 0 :
		print(v + "e")
	else:
		print(v + "o")
			
			
#위와 결과는 같은 경우인데 매번 돌아가니까
#비효율성... 코드가 조건을 2번 체크하니까
for i,v enumerate(a) :
	if i % 2 == 0 :
		print(v + "e")
	if i % 2 == 1 : # vs elif와 구분
		print(v + "o")
[v + "e" if i % 2 == 0 else v + "o" for i,v in enumerate(a)]

 

  • 정리
    • 리스트컴프리핸션은 파이썬으로 할 때 자유롭게 하면 됨
    • 돌리는 것은 다양하게 함
      • a
      • range()
      • items()
      • enumerate()
      • etc…
    • 조건이 있다면
      • [모을 값 for 롤링 (if 조건)]
      • [(모을 값1 ← 조건 만족시) if 조건 else (모을 값 2 ← else에 대한) for 롤링]

 


함수

  • 어리 중심의 코드 작성!!!!
    • ==> 코드 for ---> 함수 ---> 클래스 ---> 패키지!!!

  • 가장 기본적인 구조화: 함수! (y=f(x))
    • 3가지 요소
      • 입력(x)
      • 출력(y)
      • 입출에 대한 관계(f) → 무엇을 입력 받아서 어떤 일을 처리해서 뭘 내보낼까
    • 코드 쓰면서 유의할 것
      • 코드를 읽을 때 기능 중심으로 읽거나 흐름 파악하고, 작성하는게 유용 +한 번만 만들어주면 여러번 재사용이 가능
      • 플젝/팀플 ==> 시간이 급급해서,,,코드,,,줄줄줄~~~~~~~
      • => 코드를 정리하시는 습관!!!!
      • 포폴 + github ==> 코드만 봐도,,,잘 하는 못하는지 대충 파악이 됨!!!
  • 함수를 파이썬으로 만드는 구조 : y = f(x)
    • def 함수명(입력1, 입력2,,,,,,):
          무엇을 할지 기술 --> 기본 코드,,알고리즘........
          return 출력1, 출력2
      
      # 예) 파이썬의 더하는 함수 : sum()
      # ---> 불편한 점 : sum( [10,20] )
      # ---> 내가 원하는 더하는 함수 : sum2(10,20) --> 30
      
      # 입력 : 숫자 2개
      # 기능 : 입력 숫자 2개를 더해서,,,출력으로 전달!!!
      # 출력 : 입력 2개에 대한 더한 값..
      #-> 이런 기능 여러번 쓸 것 같다. ..(재활용!)
      
      def sum2(a,b):
      	# 입력으로 대표화를 한 a,b를 가지고,,무엇을 할지 기술!!!
        # + 파이썬 문법 + 코테 같은 경우 알고리즘 + 문제 상황....
        # + 입력 데이터,,,X Feature!!!
      	result = a + b
      	return result
      
      # 참고) 함수 내에서 만든 변수들은,,,,특별한 조치를 하지 않는 이상...
      #       함수 내에서만 사용이 됨!! 생존이 됨!!!!
      
      sum([10,20]) #30
      
      sum(10,20) #오류남, 리스트로 안 감싸면 안 됨
      
      def sum2(a,b):
      	result = a + b
      	return result
      
      a=999
      
      sum2(10,20) #sum2 안의 a와 밖의 a는 영향 없음 # 30
      
      • 더하는 것을,,,,여러개에 대해서도 대응이 가능한 함수로 업그레이드!!!
      # 더하는 것을,,,,여러개에 대해서도 대응이 가능한 함수로 업그레이드!!!
      sumrandom(10) : 10
      sumrandom(10,20) : 10+20=30
      sumrandom(10,20,30,40) : 10+20+30+40
      .....
      # ==> 입력을 몇 개를 주던간에,,,,입력들을 다 더해주는 함수를 만들면 좋겠다
      # 핵심 : 입력이 가변적으로 여러개가 들어와도 처리를 할 수 있도록 설계
      #        가변적인 입력을 처리 : *args  --> 파이썬의 리스트처럼
      #                               **args
      
      def sumdandom( *args):
          # *args : args는 파이썬의 리스트처럼 생각!!!
          # args = [10,20,30]. args=[1,1,2,3,3,3,3,4]
          #  --> 할 일 : 입력으로 들어오는거 싹 다 더하기!!
      
          # 개별 원소들을 다 꺼내가면서,,,누적합( 변수 생성!!!)
          temp = 0
          #입력에 대한 모든 것을 롤링 !! for --> 값 자체
          for i in args:
      	    temp += i
      	  #######
      	  return temp
      
      • 참고) 출력이 여러개일 수 있음
        • 입력 2개 숫자
        • 출력: 2개 입력 숫자를 가지고 +,-,*,/ 4개 사칙연산 결과
        def mutiple(a,b):
        	return a+b, a-b, a*b, a/b
        
        multiple(10,20)
        # --> 여러개 출력인 경우 : 자료형---> tuple 묶어서 return!!!
        
    • def 함수명(입력인자들) : # x =0, (돈=2000, 음료=코카콜라) 무엇을 할지 # f: x~~~ y return 출력들 # y :
    • 여기까지는 FM적인 함수에 대한 이야기
    • 대충적인 AM 함수도 존재
      • 뭔가 기능적인 룰/규칙을 표현하는 것으로 사용!!!!!!
      • 한 번 정도,,,사용하고 땡...…
      • 언제?
        • *** 데이터 전처리를 할 때
        • ***코테에서 정렬에 대한 내가 구현!!! → 주어진 정렬 조건을 작성할 때
        ⇒ lambda 함수 : 코테 + 데이터 전처리
        • ex) 데이터 전처리 : id_00001, id_00002, id_00003 ==> 1,2,3
          • 규칙!!! id_ 문자 제거 하고 ---> 000001을 1로 숫자화!!!!
          • 규칙에 대한 것을 간단히 람다함수로 표현!!!!
        • ex) 두 숫자 더하기
          • 정석으로
          def sum2(a,b):
              temp = a+b
              return temp
              
          sum2(10,20) #30  
          
          • 람다함수
          # --> 간단하게 기능 중심/규칙 중심으로 "표현" : lambda 함수,,,,
          (lambda a,b : a+b)(10,20) #30
          
          (lambda a,b : a+b)(30,90) #90
          

'파이썬 > 기초' 카테고리의 다른 글

[파이썬] 변수 / 자료형 / 연산자 / 조건문_반복문  (3) 2025.08.01