코딩하는 타코야끼

[Python] 4강_제어문, 컴프리헨션 본문

[T.I.L] : Today I Learned/Python

[Python] 4강_제어문, 컴프리헨션

가스오부시 2023. 4. 4. 19:58
728x90
반응형

1. 제어문(Control flow statement)

  • 기본적으로 프로그램은 순차구조를 가진다. 즉 작성한 순서대로 실행이 된다.이런 실행흐름을 다른 순서로 제어하기 위한 구문을 만드는 문법이 제어문이다.제어문은 조건문 과 반복문 두가지 문법이 있다.
  • 조건문
    • if 문
  • 반복문
    • while 문
    • for in 문

2. 조건문/분기문 (conditional statement)

📍개요

  • 프로그램이 명령문들을 실행하는 도중 특정 순서에서 조건에 따라 흐름의 나눠져야 하는 경우 사용한다
  • 파이썬은 조건문으로 if문이 있다.

📍구문

 🌓  조건이 True일 경우만 특정 구문들을 실행 하는 조건문.

파이썬의 코드블록(code block)코드블록이란 여러개의 실행명령문들을 묶어놓은 것을 말한다. 파이썬에서는 코드블록을 작성할 때 들여쓰기를 이용해 묶어준다. 같은 칸만큼 들여쓰기를 한 명령문들이 같은 블록으로 묶인다. 들여쓰기는 관례적으로 공백 4칸을 사용한다.

# 1. 정수를 입력받는다.
num = int(input("정수: "))
# 2. 입력받은 정수가 0이면 "영입니다." 라고 출력을 한다.
if num == 0:
    print("'0'입니다.")
    print("Zero")
# 3. "종료"를 출력한다.
print("종료")
>>>
정수: 0
'0'입니다.
Zero
종료

🌓  조건이 True일때 실행할 구문과 False일때 실행하는 조건문.

# 정수를 입력받는다.
num = int(input("정수: "))
# 2-1. 만약에 정수가 0이면 "영 입니다." 를 출력
if num == 0:
    print("'0' 입니다.")
    print("Zero")
# 2-2 0이 아니면 "영이 아닙니다." 를 출력
else:
    print("'0' 이 아닙니다.")
    print("Not Zero")
# 3. 종료
print("종료")
>>>
정수: -1
'0' 이 아닙니다.
Not Zero
종료

🌓  조건이 여러개인 조건문.

# 1. 정수를 입력받는다.
num = int(input("정수: "))
# 2-1. 입력받은 정수가 0초과이면 "양수입니다." 출력.
if num > 0:
    print("양수 입니다.")
    
# 2-2. 입력받은 정수가 0이면 "0입니다." 출력
elif num == 0: # not num 입력 가능.
    print("'0'입니다.")
    
# 2-3. 입력받은 정수가 0 미만이면 "음수입니다." 를 출력.
elif num < 0: # else: 도 가능
    print("음수 입니다.") 
# 3. 종료
print("종료")
>>>
정수: 1
양수 입니다.
종료

3. 반복문 (Loop statement)

📍개요

  • 특정 구문들을 반복해서 실행할 때 사용한다. 동일한 코드를 여러번 반복하거나 값이 일정하게 변하는 코드를 반복할 경우 사용한다.단순 반복을 처리하는 while문과 iterable객체가 제공하는 값들을 반복 조회하는 for in문 두가지 문법이 있다.
  • count의 값이 limit의 값보다 크거나 같을때 까지 count의 값을 1증가 후 출력하는 구문을 반복한다.

📍while문

  • 조건이 True인 동안 구문을 반복해서 실행한다.

🌓  구문

limit = int(input("반복횟수: "))
count = 0 # 몇번째 반복인지를 저장하는 변수
while count < limit:
    count += 1 # 조건을 변경하는 구문이 있어야 반복을 멈춘다.
    print(count)
print("끝")
>>>
반복횟수: 5
1
2
3
4
5
끝

📍for in 문

  • for in문은 Iterable 타입의 객체가 가지고 있는 값들을 각가 모두 조회하여 처리하는 구문을 작성할 때 사용한다.

Iterable반복가능한 객체. 반복문(for in)을 이용해 일련의 값들을 반복적으로 각각 제공하는 객체를 말한다.대표적으로 List, Tuple, Dictionary, Set, 문자열 등이 있다.

🌓  구문

for v in (1,2,3,4,5):
    print(v, end=", ")
>>>
1, 2, 3, 4, 5,

📍continue와 break를 이용한 반복문 제어

🌓 continue

  • 현재 반복을 중단하고 다음 반복을 진행한다.
  • 특정 조건에서 처리를 멈추고 다음 처리를 반복할 때 사용한다.

🌓  break

  • 반복을 중단한다.
  • 특정 조건에서 반복문을 중간에 중지할때 사용한다.

🌓 continuebreak는 특정 조건에서 실행되야 하는 경우가 대부분이므로 if문 안에 작성한다.

for v in l:
    if v % 3 !=0: # 3의 배수가 아니라면
        continue # 다음 원소를 반복 조회하라.
    print(v)
>>>
3
6
9

# list의 값이 7이 있을 경우 더이상 출력하지 않는다.
for v in l:
    if v == 7: # False 이면 계속 하다 True 가 될때 break.
        break
    print(v)
>>>
1
2
3
4
5
6
# 중첩 반복문의 안쪽 반복문에서 전체 반복문을 멈추게(break) 하기 위한 로직.
l = [[1,2,3], [10,20,30], [100,200,300]]
# 20이 있으면 전체 반복을 멈춘다.
is_finish = False # 전체 반복을 멈출지 여부 (True: 멈춤, False: 안멈춤)
for v in l:
    
    for value in v:
        print(value, end=", ")
        if value == 20:
            is_finish = True
            break
    if is_finish:
        break            
    print()
>>>
1, 2, 3, 
10, 20,

📍for in 문 연관 내장 함수

🌓  range( )

  • 일정한 간격의 연속된 정수를 제공하는 반복가능 객체 생성한다.
  • 구문
    • range([시작값], 멈춤값, [증감값])
      • 시작값, 멈춤값, 증감값 모두 정수만 가능하다.
      • 시작값 > 멈춤값 이고 증감값이 음수이면 내림차순으로 값을 제공한다.
      1. 전달값이 1개: 멈춤값.
        • 0 ~ (멈춤값-1)까지 1씩 증가하는 정수를 제공
      2. 전달값이 2개: 시작값, 멈춤값.
        • 시작값 ~ (멈춤값-1) 까지 1씩 증가하는 정수 제공
      3. 전달값이 3개: 시작값, 멈춤값, 증감값(간격).
        • 시작값 ~ (멈춤값-1)까지 증감값만큼 증가하는 정수를 제공.
r = range(10, 101, 10) # 10 ~ 100 까지, 10씩 증가
print(r)
list(r)
>>>
range(10, 101, 10)
[10, 20, 30, 40, 50, 60, 70, 80, 90, 100]

🌓  enumerate()

  • 구문
    • enumerate(Iterable, [, start=정수])
      • 현재 몇번째 값을 제공하는 지(현재 몇번째 반복인지)를 나타내는 index와 제공하는 원소를 tuple로 묶어서 반환
      • Iterable
        • 값을 제공할 Iterable객체
      • start: 정수
        • index 시작 값. 생략하면 0부터 시작한다.
nums = [10, 20, 30, 40, 50]
for value in enumerate(nums):
    print(value)
print("*"*20)
for value in enumerate(nums, start=100): # 100번째 부터 시작한다.(시작값 설정)
    print(value)
>>>
(0, 10)
(1, 20)
(2, 30)
(3, 40)
(4, 50)
********************
(100, 10)
(101, 20)
(102, 30)
(103, 40)
(104, 50)
for index, data in enumerate(range(10000)):
    # 처리
    # 처리에  대한 기록(log)을 저장 -> 1000번에 한번씩
    if index % 1000 == 0:
        print(f"{index}, 기록남기기")
>>>
0, 기록남기기
1000, 기록남기기
2000, 기록남기기
3000, 기록남기기
4000, 기록남기기
5000, 기록남기기
6000, 기록남기기
7000, 기록남기기
8000, 기록남기기
9000, 기록남기기

🌓  zip( )

  • 여러 개의 Iterable 객체를 받아 반복시 같은 index의 값끼리 튜플로 묶어 반환한다.
  • 구문
    • zip(Iterable1, Iterable2, Iterable3 [, .......])
      • Iterable 2개이상.전달한다.
  • 각 자료구조 객체의 크기가 다를 경우 크기가 작은 것의 개수에 맞춰 반복한다.
# 세명의 정보를 이름, 나이, 주소별로 따로 저장.
# 같은 index의 값들이 한사람의 정보.
names = ["홍길동", "나", "너"] # 3
ages = [30, 20, 10] # 3
addresses = ["서울", "인천", "광주", "세종", "경기"] # 5개여도 값이 있는 개채들만 적용.
# 같은 index의 값들을 튜플로 묶어서 제공.
for value in zip(names, ages, addresses):
    print(type(value), value)
>>>
<class 'tuple'> ('홍길동', 30, '서울')
<class 'tuple'> ('나', 20, '인천')
<class 'tuple'> ('너', 10, '광주')
for name, age, address in zip(names, ages, addresses):
    print(f"이름: {name}, 나이: {age}, 주소: {address}")
>>>
이름: 홍길동, 나이: 30, 주소: 서울
이름: 나, 나이: 20, 주소: 인천
이름: 너, 나이: 10, 주소: 광주

4. 컴프리헨션(Comprehension)

  • 기존 Iterable의 원소들을 이용해서 새로운 자료구조(List, Dictionary, Set)를 생성하는 구문.
    • 기존 Iterable의 원소들을 처리한 결과나 특정 조건이 True인 값들을 새로운 자료구조에 넣을때 사용.
    • 결과를 넣을 새로운 자료구조에 따라 다음 세가지 구문이 있다.
      • 리스트 컴프리헨션
      • 딕셔너리 컴프리헨션
      • 셋 컴프리헨션
  • 튜플 컴프리헨션은 없다.
  • 딕셔너리 컴프리헨션과 셋 컴프리헨션은 파이썬 3 에 새로 추가되었다.

 

🌓  리스트 컴프리헨션

[value*10 for value in l1]
>>>
[10, 20, 30, 40, 50, 60, 70, 10, 20, 30]

🌓  셋 컴프리헨션

{value*10 for value in l1}
>>>
{10, 20, 30, 40, 50, 60, 70}

🌓  딕셔너리 컴프리헨션

# key:value
{f"key-{index}":value*10  for index, value in enumerate(l1)}
>>>
{'key-0': 10,
 'key-1': 20,
 'key-2': 30,
 'key-3': 40,
 'key-4': 50,
 'key-5': 60,
 'key-6': 70,
 'key-7': 10,
 'key-8': 20,
 'key-9': 30}
-------
l3 = ("Abc", "aBBB", "DDDfddd", "Dadcdef")
# l3의 문자열의 글자수를 문자열:글자수 형식의 딕셔너리로 생성
{txt:len(txt) for txt in l3}
>>>
{'Abc': 3, 'aBBB': 4, 'DDDfddd': 7, 'Dadcdef': 7}

 

반응형

'[T.I.L] : Today I Learned > Python' 카테고리의 다른 글

[Python] 6강_객체지향 프로그  (0) 2023.04.05
[Python] 5강_함수  (0) 2023.04.04
[Python] 3강_자료구조  (0) 2023.04.04
[Python] 2강_데이터타입  (0) 2023.04.02
[Python] 1강_프로그래밍 개요  (0) 2023.04.02