본문 바로가기
파이썬

[Python] 파이썬 제어문: 조건문과 반복문

by 책 읽는 개발자_테드 2022. 3. 21.
반응형

파이썬 프로그래밍를 읽고, 정리한 글입니다.

 

목차

· 조건 판단문 if

· 반복문 while 

· 반복문 for


조건 판단문 if


기본 if 문

· 사용법

if 조건식:
	수행문 1
    ...
    수행문 n

- 조건식이 참이면 수행문을 구행하고, 거짓이면 아무것도 수행하지 않는다.

- 조건식에는 조건의 결과가 참 또는 거짓이 될 수 있는 논리연산자비교연산자를 사용한다.

- 콜론(:)은 조건에 의해 수행될 명령 집단(블록)의 시작을 의미하므로 꼭 적어야 한다.

- if 문에 속한 모든 수행문은 들여쓰기가 같아야 한다. 한 칸이라도 틀리면 오류가 발생한다.

- 들여쓰기 공백문자의 간격은 정해져 있지 않지만, 일반적으로 4칸 들여쓰기를 한다.

 

· 예시 

a = 4
if a > 3: print('hello')

결과

- 블록 내의 수행문이 한 개일 경우 한 줄에 붙여 쓸 수 있다.

 

if ~ else 문

· 사용법

if 조건식:
	수행문 1
    ...
else:
    수행문 2
    ...

- if 문과 다르게 조건식이 거짓일 때 else문의 수행문을 수행한다.

 

· 예시1 - 기본 if문 사용하기

num = 3
if num > 2:
    print('크다')
else:
    print('작다')

결과

 

· 예시2 - in 사용하기

nums = 1, 2, 3  # 튜플에 숫자들을 기억
if 2 in nums:
    print('있음')
else:
    print('없음')

if 2 not in nums:
    print('없음')
else:
    print('있음')

names = ['Ted', 'Robin', 'Barney']
if 'Ted' in names:
    print('It is me.')
else:
    print('Who is this?')

결과

- in은 멤버 연산자로서 어떤 묶음 자료가 있을 때 그 자료에서 특정한 값이 있는가를 찾아서 있으면 True, 없으면 False를 반환한다.

 

· 예시3 - pass 사용하기

nums = 1, 2, 3
if 2 in nums:
    pass
else:
    print('없음')

- 수행문 블록에 pass를 적으면, 조건을 만족하더라도 해당 영역에서 아무것도 수행하지 않는다.

 

다중 if 문

· 사용법:

if 조건식 1:
	수행문 1
    ...
elif 조건식 2:
    수행문 2
    ...
elif 조건식 3:
    수행문 3
    ...
elif 조건식 n:
    수행문 n
    ...
else:
    수행문

- if~elif~else는 다중 if문의 형식으로 조건식 1이 참이면 수행문 1을 수행하고, 조건식 1이 거짓이고 조건식 2가 참이면 수행문 2를 수행한다. 이런 방식으로 계속해서 다음 조건이 참이면 해당 수행문을 수행한다. 어떤 조건도 만족하지 않으면, else 이후의 수행문을 수행한다.

 

· 예시

num = 10
if num >= 8:
    print('매우좋음')
elif num >= 6:
    print('좋음')
elif num >= 4:
    print('보통')
elif num >= 2:
    print('나쁨')
else:
    print('매우나쁨')

결과

 

삼항연산과 if문

· 파이썬에서는 삼항연산을 여러 가지 형태로 표현할 수 있다.

 

1. 참값 if 조건 else 거짓값

a = 5
res = '참' if a > 3 else '거짓'
print(res)

결과

2. (lambda:'거짓', lambda:'참')[조건]()

a = 5
res = (lambda:'거짓',lambda:'참')[a > 3]()
print(res)

결과

 

3. {True:'참', False:'거짓'}[조건]

a = 5
res = {True:'참', False:'거짓'}[a > 3]
print(res)

결과

 

4. (조건) and '참' or '거짓'

a = 5
res = (a > 3) and '참' or '거짓'
print(res)

결과

 

5. ((조건) and ['참'] or ['거짓'])[0]

a = 5
res = ((a > 3) and ['참'] or ['거짓'])[0]
print(res)

결과

 

반복문 while 


기본 while 문

· while 문은 블록 내에 반복 처리할 수행문을 적어 두고 주어진 조건을 만족하는 동안 수행문을 반복해서 처리한다. while 조건식이 거짓이 되면 반복 처리가 종료된다.

- 처음부터 조건이 거짓이면 반복할 수행문이 한 번도 실행하지 않는다. 블록을 실행하기 전 while 반복문의 조건을 검사하므로 사전시험 루프(pre-test loop)라고 불리기도 한다.

- while 반복문은 조건부터 검사하므로 조건식에 사용되는 변수는 반드시 초기화 작업을 해줘야 한다.

 

· 예시

a = 1
while a <= 5:
    print(a, end=' ')
    a += 1

print('\na:',a)

결과

 

while~else문, continue와 break

· 반복문의 수행 흐름을 변경하기 위해 continuebreak를 사용할 수 있다.

- while 블록 안에서 continue를 만나면 continue 다음에 있는 수행문을 무시하고 , continue를 포함하는 while문으로 수행이 옮겨진다.

- while 블록 안에서 break를 만나면 조건에 상관없이 while 블록을 벗어난다.

 

· 파이썬에서는 독특한 문법으로 while~else 문이 존재한다. while이 조건식에 의해 정상적으로 종료되면 else 절이 실행되고, break문에 의해 종료되면 실행되지 않는다.

· 예시 

 

a = 0

while a < 10:
    a += 1
    if a == 5: continue
    if a == 7: break
    print(a)
else:
    print('정상 종료하면 수행된다')

print('a:',a)

결과

 

반복문 for


기본 for 문

· for문의 형식:

· 예시 - for문을 통해 반복 가능한 여러 객체 반복하기

# 리스트에 저장된 숫자 요소 수만큼 반복 처리
for i in [1, 2, 3, 4, 5]:
    print(i, end=' ')
print()

# 리스트에 저장된 문자열 요소 수만큼 반복 처리
for c in ['red','green','blue']:
    print(c, end=' ')
print()

# 세트 요소 반복, 순서가 없으므로 출력 결과는 동적
for n in {'one', 'two', 'three'}:
    print(c, end=' ')
print()

# 튜플 요소 반복 처리
for t in ('house', 'mouse', 'horse'):
    print(t, end=' ')
print()

dictData = {'java':'제임스 고슬링', 'python':'귀도 반 로섬', 'javascript':'브랜던 아이크'}

# 딕셔너리 요소 반복 처리, 튜플로 반환된 값을 차례대로 출력
for i in dictData.items():
    print(i[0] + ', ' + i[1])

# 딕셔너리 형 자료의 key만 출력
for k in dictData.keys():
    print(k, end=' ')
print()

# 딕셔너리 형 자료의 value만 출력
for v in dictData.values():
    print(v, end=' ')

 

결과

 

· 예시 - for문으로 문자열을 각각의 낱개 문자로 반복하기

# 리스트 형 변수 선언
chars = []
sentence = '파이썬을 공부하자'

# sentence 변수에 문자열의 한 글자씩 차례대로 리스트에 저장
for k in sentence:
    chars.append(k)
print(chars)

# chars 요소 수만큼 반복 처리
for k in chars:
    if k != ' ':
        print(k, end='')

 

결과

- 문자열 자료형은 문자 한 개 한 개가 모여 이루어진 문자열 집합이므로 for 문으로 문자 단위로 분리할 수 있다.

 

for 반복문에서 continue와 break

· for 반복문도 선택적으로 continue와 break 문을 사용해 반복 수행 중에 진행 방향을 변경할 수 있다.

 

· 예시1 - continue, break문 사용

datas = [1, 2, 3, 4, 5]

for i in datas:
    if i == 3:
        continue
    if i == 4:
        break
    print(i)

print()

scores = [95, 70, 60, 50, 100]
num = 0

for score in scores:
    num += 1
    if score < 70:
        continue
    print('%d번째 응시자는 합격' %num)

 

결과

- datas 변수를 저장된 요소를 출력한다. 이때, continue에 3이 출력에서 제외되고, 요소가 4인 경우 break에 의해 for 반복문이 강제 종료된다.

 

· 예시2 - else 문 사용

datas = [1, 2, 3, 4, 5]

for i in datas:
    print(i)
else:
    print("정상적으로 종료")

print()

for i in datas:
    if i == 3:
        continue
    if i == 4:
        break
    print(i)
else:
    print("정상적으로 종료")

 

결과

- for 문이 정상적으로 종료되면 else문이 실행되고, break 문에 의해 비성장 종료되면 else문이 실행되지 않는다.

 

· 예시3 - for 문에 복수의 변수 사용

datas = ['a', 'b', 'c']
for i, d in enumerate(datas):
    print(i, d)

 

결과

- for 문에 복수 개의 변수를 사용할 수 있다.

- 반복문 사용 시 몇 번째 반복문인지 확인할 필요가 있을 떄 enumerate 함수를 사용한다. 인덱스 번호화 요소를 튜플  형태로 반환한다.

 

for 문의 여러 형식

· [반복문 for 변수 in 묶음 객체] 형식으로 반복 처릴르 할 수 있다.

- for문을 한 줄로 표기하는 방법이다.

 

· 예시 1 - for문으로 리스트 처리하기

 

· 예시 2 - for문으로 딕셔너리 처리하기

price = {'사과':2000, '감':500, '바나나':1000} # 판매 목록
my = {'사과':2, '감':3}    # 내가 구매한 과일 자료
for i in my:
    print('키:', i)
    print('값:{}, 개수{}'.format(price[i], my[i]))

bill = sum(price[f]*my[f] for f in my)
print('구매한 과일값은 {}원'.format(bill))

 

결과

 

· 예시 3 - for문으로 딕셔너리 처리하기2

import re
ss = """파이썬[3]은 1991년 발표(發表)한 파이썬 프로그래밍 언어다. 파이썬은 파이썬 소프트웨어 재단이 관리한다."""

# 정규표현식을 사용해 ss 문자열 중 한글과 공백을 제외한 나머지 문자를 모두 제거한다.
ss1 = re.sub(r'[^가-힣\s]','', ss)
print(ss1)

# 공백을 기준으로 문자열을 분리한다.
ss2 = ss1.split(' ')
print(ss2)

# 분리된 문자열을 ['문자열':개수] 형태의 딕셔너리 자료형으로 만든다.
cou = {}
for i in ss2:
    if i in cou:
        cou[i] += 1 # 이미 키에 등록된 문자열은 1을 누적한다.
    else:
        cou[i] = 1  # 키에 등록되지 않은 문자열은 '문자열':1으로 만든다.

print(cou)

 

결과

 

for와 함께하는 range 함수

· range 함수는 주어진 숫자 범위 안에서 순차적인 숫자 그룹을 만든다. 숫자 그룹을 만들 수 있는 객체를 반환하기 때문에 묶음 자료형 변수(range(숫자))처럼 range 함수가 처리하여 반환하는 결괏값의 자료형을 적어 주어야 한다.

 

· range 함수 사용법:

range(n)		# 0부터 n~1까지의 요소를 갖는 수열 반환
range(m, n)		# m부터 n~1까지의 요소를 갖는 수열 반환
range(m, n, s)	# m부터 n~1까지의 요소 중 s만큼 증가하는 요소를 갖는 수열 반환

 

· 예시1 - 다양한 range 함수 사용법 

 

· 예시2 - for문과 range 함수 함께 사용하기

- 반복문 for문에서 반복문의 수행 횟수를 결정할 때 range 함수를 이용하면 매우 효과적이다.

for i in range(6):
    print(i, end=' ')
print()

for _ in range(1, 3):
    print('Hi!')
print()

# 1~10까지 합 계산
total = 0
for i in range(1, 11):
    total += i
print('합은: ' + str(total))
print()

# 중첩 리스트 값(2행3열) 출력
matrix = [[1,2,3],[4,5,6]]
for m in range(2):
    for n in range(3):
        print(matrix[m][n], end= ' ')
    print()

 

결과

- range 반환값을 사용하지 않을 경우 for _라고 적는다.

반응형

댓글