While문
while 조건식 :
파이썬 문장1
continue(while문 다시 시작)
break(반복문 탈출)
else:
파이썬 문장2
While문의 일반적인 구조는 위와 같다. 조건식이 만족하는 한 계속 반복문 while 내부에서 loop를 돌며 코드를 수행한다. 그리고 조건식이 false가 될 때 반복문을 탈출한다.
else는 옵션이기 때문에 굳이 사용하지 않아도 된다. else문은 반복문의 조건식이 false가 될 때 분기를 하며 break인 경우에는 else로 분기하지 않는다.
a = 0
while a < 5:
print('a= ', a)
a += 1
print('hello')
예제 코드의 경우 while문을 통해 a의 값을 출력하게 되는데 a가 1씩 증가하며 5가 되는 순간 조건식이 false가 되어 반복문을 탈출한다.
a = 0
while a < 5:
print('a= ', a)
if a == 3:
break
a += 1
print('hello')
만약 if 조건문을 쓴다면 a의 값이 3이 되었을 때 break문이 실행되어 while문을 벗어나게 된다.
a = 0
while a < 5:
print('a= ', a)
a += 1
else:
print('else..')
print('hello')
위의 예제 코드에서 else는 옵션이며 while문 조건식이 false인 경우만 실행된다. 따라서 실행 결과를 보면 a는 5까지 출력한 후 while문 조건식이 false가 되어 else구문이 실행된다.
# 1부터 10까지 덧셈
n = 1
sum = 0
while n <= 10:
print(n)
sum += n
n += 1
print('덧셈 결과:', sum)
반복문을 사용하여 간단한 덧셈 연산을 수행하는 예제 코드도 만들 수 있다. 1부터 10까지 덧셈을 수행하는 코드이며 n을 계속 1씩 증가시켜주며 sum 변수에 n을 누적에서 덧셈한다. 그리고 n이 10이 넘는 순간(n=11) 반복문을 탈출하고 덧셈 결과 (sum = 55)를 출력한다.
for문, break문, pass문
for 변수 in 반복가능데이터 :
파이썬 문장1
continue
break
else :
파이썬 문장2
파이썬의 for문의 일반적인 구조는 위와 같다. 여기서 반복가능데이터란 sequence type을 의미하며 문자열, 튜플, 리스트, 사전, 세트 타입이 속한다. 그리고 C, Java와는 다르게 파이썬에서의 for문은 문장 구조가 완전히 다르다.
s = 'abcdefg'
for n in s:
print(n)
예제 코드를 실행하면 참조 변수 's'에 넣어준 문자열 길이만큼 반복하여 출력하는 것을 확인할 수 있다. 그리고 변수 n에는 a부터 g까지 개별 문자가 할당된다.
s = 'abcdefg'
myList = [10, 20, 30, 40, 50]
myT = (100, 200, 300, 400)
myS = {1, 2, 3, 4}
myD = {10:'aa', 20:'bb', 30:'cc'}
for n in myD:
print(n)
for n in myS:
print(n)
for n in myT:
print(n)
for n in myList:
print(n)
for n in s:
print(n)
예제 코드를 통해 리스트, 튜플, 세트, 사전 타입에 대한 for문 수행 결과를 확인할 수 있다. 그리고 사전에 대해 for문을 실행하면 값이 아닌 key가 출력되는 것을 확인 가능하다.
myD = {10:'aa', 20:'bb', 30:'cc'}
for n in myD.keys():
print(n)
for n in myD.values():
print(n)
for n in myD.items():
print(n)
for k, v in myD.items():
print(k, v)
사전 타입의 경우 연결된 함수를 통해 key 뿐만 아니라 값도 for문을 통해 출력 가능하다. keys는 key들의 리스트를 출력해주며 values는 값들의 리스트를 출력해준다. 그리고 items는 key 및 값에 대한 리스트 튜플형태로 출력해준다. 또한 items를 사용했을 때 변수를 k, v로 받게 되면 자동으로 unpacking이 발생하여 개별 요소를 출력해준다.
stdData1 = [{'name':'홍길동', 'age':20}, {'name':'이순신', 'age':30}, {'name':'임꺽정', 'age':40}]
stdData2 = [('홍길동', 20), ('이순신', 30), ('임꺽정', 40)]
for n in stdData1:
print(n)
for n, m in stdData1:
print(n, m)
for n in stdData2:
print(n)
for n, m in stdData2:
print(n, m)
리스트의 사전 타입, 리스트의 튜플 타입으로 구성된 예제 코드이다. 모두 unpacking을 사용할 수 있으며 출력 결과는 위와 같다.
a = 10
b = 3.14
c = 'aa'
print('a = %d b = %f c = %s' % (a, b, c))
d = {'name':'홍길동', 'age':20}
print('이름:%(name)s 나이:%(age)d' % (d))
문자열 타입에 대해 % 연산자를 사용하여 포맷과 포맷을 서로 연결하는 방법이 있다. 이러한 방법을 사전 타입도 동일하게 사용할 수 있으며 예제 코드처럼 name과 age의 key 및 값들을 연결 시켜줘서 출력할 수 있다.
Range 함수
range 함수는 파이썬의 내장 함수이며 형식은 range(초기값, 끝값, 증가치)로 구성된다. 초기값과 증가치는 생략 가능하다. 만약 생략한다면 초기 값은 0, 증가치는 1로 설정된다.
r = range(0, 10, 1)
print(list(r))
위의 예제 코드를 출력해보면 0부터 9까지 출력하며 마지막 인덱스인 10은 포함되지 않는다. 따라서 range를 사용하였을 때 끝값은 포함되지 않으므로 주의해야 한다.
for n in range(1, 10):
print(n)
range는 for문으로도 이용할 수 있으며 위의 출력 결과처럼 1~9까지 순차적으로 출력 가능하다.
# 1부터 10까지 덧셈
sum = 0
for n in range(1, 11):
sum += n
print(sum)
range를 응용한 예제 코드이며 1부터 10까지의 덧셈 예제를 만들었다. range 함수를 사용하면 간편하게 for문을 사용하여 덧셈을 할 수 있다.
sum = 0
for n in range(1, 11):
print(n)
if n==3:
break
else:
print('else')
else구문을 사용 가능하며 위의 예제 코드에서는 n이 3이 될 때 break문에 의해 반복문을 탈출한다.
sum = 0
for n in range(1, 11):
if n==3:
continue
print(n)
else:
print('else')
continue를 사용할 경우 바로 for문의 조건식으로 분기하기 때문에 위의 출력 결과에서 n이 3일 경우는 출력하지 않고 분기하는 것을 확인할 수 있다.
축약형 문법
[변수 for .. in .. if]
내장 리스트를 반복해서 구성하는 방법이다.
my = [n for n in range(1, 6)]
print(my)
맨 앞의 n이 리스트로 구성되는 최종 데이터이다. 예제 코드의 결과를 보면 알겠지만 for문을 통해 두 번째 n이 1~5의 값을 할당 받고, 첫 번째 n으로 값을 넘겨준다. 그리고 리스트가 구성된다.
# 3.3%를 제외한 실수령액
# 실수령액 = 급여 - 급여 * 0.033
salary = [10000, 25000, 31000, 42000, 7000]
money = [n - n * 0.033 for n in salary]
print(money)
축약형 문법을 사용하여 급여의 실수령액을 계산하는 예제 코드이다. if문 축약형 외에도 리스트 축약형을 사용하여 코드 라인의 수를 획기적으로 줄일 수 있다. 이는 파이썬의 강력한 기능 중 하나이다.
data = [n for n in range(1, 11) if n % 2 == 0]
print(data)
만약 if문이 있을 경우에는 어떻게 동작할까? 예제 코드 기준으로 두 번째 n이 if문으로 분기하여 계산된다. 그리고 if 조건식 값이 반드시 true가 되어야만 첫 번째 n으로 값을 할당한다. 따라서 위의 결과처럼 값이 출력된다.
'언어 > Python' 카테고리의 다른 글
[Python] Python(파이썬) 함수 (2) - 메모리 구조와 LGB 규칙 (0) | 2020.04.05 |
---|---|
[Python] Python(파이썬) 함수 (1) - 구조 및 특징 (0) | 2020.04.02 |
[Python] Python(파이썬) shallow copy(얕은 복사) 그리고 deep copy(깊은 복사) (0) | 2020.03.31 |
[Python] Python(파이썬) 구성원/식별 연산자 (0) | 2020.03.31 |
[Python] Python(파이썬) 관계/논리/비트 연산자 (0) | 2020.03.30 |