| 일 | 월 | 화 | 수 | 목 | 금 | 토 |
|---|---|---|---|---|---|---|
| 1 | 2 | 3 | 4 | |||
| 5 | 6 | 7 | 8 | 9 | 10 | 11 |
| 12 | 13 | 14 | 15 | 16 | 17 | 18 |
| 19 | 20 | 21 | 22 | 23 | 24 | 25 |
| 26 | 27 | 28 | 29 | 30 |
Tags
- 문제풀이
- 순열
- DataFrame
- 조합
- 스터디노트
- INSERT
- 자료구조
- 재귀함수
- 파이썬
- 등차수열
- barh
- MacOS
- numpy
- tree.fit
- pandas filter
- Folium
- SQL
- 기계학습
- python
- plt
- 등비수열
- matplotlib
- 머신러닝
- maplotlib
- pandas
- 리스트
- 통계학
- pandas 메소드
- Slicing
- Machine Learning
Archives
- Today
- Total
코딩하는 타코야끼
[Python] 4강_제어문, 컴프리헨션 본문
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
- 반복을 중단한다.
- 특정 조건에서 반복문을 중간에 중지할때 사용한다.
🌓 continue와 break는 특정 조건에서 실행되야 하는 경우가 대부분이므로 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개: 멈춤값.
- 0 ~ (멈춤값-1)까지 1씩 증가하는 정수를 제공
- 전달값이 2개: 시작값, 멈춤값.
- 시작값 ~ (멈춤값-1) 까지 1씩 증가하는 정수 제공
- 전달값이 3개: 시작값, 멈춤값, 증감값(간격).
- 시작값 ~ (멈춤값-1)까지 증감값만큼 증가하는 정수를 제공.
- range([시작값], 멈춤값, [증감값])
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부터 시작한다.
- enumerate(Iterable, [, start=정수])
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개이상.전달한다.
- zip(Iterable1, Iterable2, Iterable3 [, .......])
- 각 자료구조 객체의 크기가 다를 경우 크기가 작은 것의 개수에 맞춰 반복한다.
# 세명의 정보를 이름, 나이, 주소별로 따로 저장.
# 같은 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 |