While 루프
아래의 코드를 살펴보면, while과 :(콜론) 사이에 오는 조건문이 참의 값을 가지는 경우에는 :(콜론) 이하의 코드가 반복해서 작동하게 됩니다. 통상적으로 while문을 자주 사용하게 된다면 자신의 코드를 되돌아볼 필요가 있습니다. 물론 while은 반복적으로 작업할 수 있도록 해주는 편리한 문법이지만 무한루프에 빠질 수 있는 단점도 내포하고 있기 때문입니다.
n=5
while n > 0:
print(n)
n=n-1
print('Blastoff!')
print(n)
루프(Loop) 제어하기
break
루프가 break를 만나게 되면 해당 루프는 실행이 종료되고 while문 바로 뒤의 코드를 실행하게 됩니다.
while True:
line=input('>')
if line =='done':
break
print(line)
print('Done!')
#>hello there로 입력
#hello there로 출력됨
#>finished로 입력
#>done로 입력
#Done!으로 출력됨
continue
루프가 continue를 만나게 되면 해당 루프는 실행이 종료되고 루프가 시작된 지점부터 다시 루프를 실행하게 됩니다.
while True:
line=input('>')
if line[0] == '#':
continue
if line =='done' :
break
print(line)
print('Done!')
#>hello there 입력
#hello there로 출력
##don't print this '#'을 입력하게 되면 continue를 만나게 되고 continue는 loop의 시작점으로 다시 돌아가서 loop를 실행합니다.
#>print this! 입력
#print this!로 출력
#> done 입력
#Done!으로 출력 done을 입력하게 되면 break를 만나게 되고 break는 loop 끝나는 점 바로 다음에 오는 코드를 실행하게 됩니다.
for 루프
하나의 파일에 들어있는 문장의 갯수와 리스트 안에 들어있는 항목들의 수는 유한개입니다. 유한개의 항목들에 대해 우리가 특정 조치들을 취하고 싶을 때 for루프를 사용합니다. 아래에 보시는 것처럼 순차적으로 항목들이 출력되는 것을 볼 수 있습니다.
for i in [5,4,3,2,1]:
print(i)
print('Blastoff!')
#5
#4
#3
#2
#1
#Blastoff!
물론 문자열 리스트에서도 동일한 방식으로 출력할 수 있습니다.
friends=['Connect','Korea','NHN']
for friend in friends:
print('Happy New Year!!',friend)
print('Done!')
#Happy New Year!! Connect
#Happy New Year!! Korea
#Happy New Year!! NHN
#Done!
루프의 응용
특정조건이 참인 경우에는 반복적으로 실행되는 불확정 루프의 종류인 while문과 유한개의 요소를 가지고 있으며, 개별 요소르 모두 순회하게 되면 종료되는 for 루프를 살펴보았습니다. 이것을 통해 우리는 무엇을 할 수 있을까요? 먼저, for 루프를 이용해 가장 큰 수를 찾아내는 코드를 만들어보도록 하겠습니다.
largest_so_far=-1 #값을 가지고 있는 변수를 선언해줍니다. 작은 수로 -1로 선언을 합니다.
print('Before', largest_so_far) #최초의 값과 루프 이후의 값을 비교하기 위해 print 함수로 현재의 값을 확인합니다.
numbers=[9,41,12,3,74,15]#강의와는 달리 numbers라는 int를 원소로 가지는 list를 선언하였습니다.
for the_num in numbers:
if the_num > largest_so_far : #iteration value의 현재의 값(the_num)이 현재 가장 큰 값이 할당되어 있는 largest_so_far보다 크다면 largest_so_far의 값을 the_num으로 바꿔줍니다.
largest_so_far=the_num
print('largest_so_far:', largest_so_far,'current number:',the_num)
print('After', largest_so_far)
#Before -1
#largest_so_far: 9 current number: 9
#largest_so_far: 41 current number: 41
#largest_so_far: 41 current number: 12
#largest_so_far: 41 current number: 3
#largest_so_far: 74 current number: 74
#largest_so_far: 74 current number: 15
#After 74
가장 큰 수를 찾는 문제에 대해서 인간이 해결하는 방식과 컴퓨터가 해결하는 방식에 있어서의 차이를 이해할 필요가 있습니다. 인간은 전체의 수가 펼쳐져 있는 상태에서 가장 큰 수를 찾기 위해 앞뒤로 유동적으로 비교를 할 수 있는 반면 컴퓨터는 순차적으로 인간이 입력한 코드에 따라 숫자를 비교하게 됩니다.
이것에 대한 이해가 프로그래밍에서 가장 중요한 부분입니다.
루프의 활용
몇가지 패턴을 통해서 우리는 루프를 활용해 다양한 작업들을 수행할 수 있습니다.
1. 루프를 사용하여 개수 세기
리스트에 몇 개의 원소가 있는 지를 알고자 할 때 우리는 루프를 사용할 수 있습니다.
zork=0
print('Before',zork)
numbers=[9,41,12,3,74,15] #강의와는 달리 numbers라는 int를 원소로 가지는 list를 선언하였습니다.
for thing in numbers :
zork = zork +1
print(zork,thing)
print('After', zork)
#Before 0
#1 9
#2 41
#3 12
#4 3
#5 74
#6 15
#After 6
2. 루프를 사용하여 합계 구하기
물론, 각 원소를 누적해서 더해 총합을 알아낼 수도 있습니다.
zork=0
print('Before',zork)
numbers=[9,41,12,3,74,15] #강의와는 달리 numbers라는 int를 원소로 가지는 list를 선언하였습니다.
for thing in numbers :
zork = zork + thing
print(zork,thing)
print('After', zork)
#Before 0
#9 9
#50 41
#62 12
#65 3
#139 74
#154 15
#After 154
3. 루프를 사용하여 평균 구하기
원소의 수와 총합을 활용하면 우리는 평균을 구할 수도 있습니다.
count=0 #평균을 전체 원소의 수로 나누기 위해 total number를 확인합니다.
sum=0
print('Before', count, sum)
numbers=[9,41,12,3,74,15]
for value in numbers:
count=count+1
sum=sum+value
print(count,sum,value)
print('After',count,sum,sum/count)
#Before 0 0
# 1 9 9
# 2 50 41
# 3 62 12
# 4 65 3
# 5 139 74
# 6 154 15
# After 6 154 25.66666666666666
4. 루프를 사용하여 필터링 하기
특정 값보다 큰 수를 print를 이용해 확인할 수 있습니다.
print('Before')
numbers=[9,41,12,3,74,15]
for value in numbers:
if value>20:
print('Large number', value)
print('After')
#Before
#Large number 41
#Large numver 74
#After
5. 부울값을 사용하여 특정 값을 검색하기
우리가 원하는 특정 값이 list에 있는지 확인할 수 있습니다. 부울 변수를 이용하게 됩니다. 부울 변수는 True(참) 또는 Flase(거짓)의 값을 가지게 됩니다.
found + False
print('Before', found)
numbers=[9, 41, 12, 3, 74, 15]
for value in numbers:
if value ==3:
found = True
print(found, value)
break #특정 값을 찾았을때 해당 루프를 종료하는 것이 더욱 적절해보입니다.
print('After', found)
#Before False
#True 3
#After True
6. 가장 작은 수를 찾는 코드 완성하기
가장 작은 수를 찾는 루프를 완성하기 위해서는 우리는 None 자료형에 대해서 알아야 합니다. None은 값이 없다는 것을 말합니다. 하나의 빈 상자에 이 상자는 비어있습니다라고 명시적으로 표시하고 있다고 생각하면 될 듯합니다.
또한 "is"와 "is not"의 연산자는 자료형과 값이 동일할 때 True를 반환하게 됩니다. 예를 들어, 0==0.0은 True이지만 0 is 0.0은 False입니다.
값은 동일하지만 자료형이 전자는 int이고 후자는 float이기 때문입니다.
smallest = None
print('Before')
numbers=[9,41,12,3,74,15]
for value in numbers:
if smallest is None:
smallest = value
elif value < smallest:
smallest = value
print(smallest, value)
print('After', smallest)
#9 9
#9 41
#9 12
#3 3
#3 74
#3 15
#After 3
연습문제
입력한 수를 계속해서 출력하는 프로그램
자료형이 다른 것을 입력하면 경고와 함께 첫 단계로 돌아가며 Done 입력시 종료
num = 0
tot = 0.0
while True :
sval =input('Enter a number: ')
if sval == 'done' :
break
try:
fval =float(sval)
except :
print('Invalid input')
continue
#print(fval)
num = num + 1
tot = tot + fval
#print('ALL DONE')
print(tot,num,tot/num)
'마케팅 > 데이터분석(파이썬)' 카테고리의 다른 글
(파이썬/python) 모두를 위한 프로그래밍 : 파이썬 챕터 7 / 파일 (0) | 2021.11.17 |
---|---|
(파이썬/python) 모두를 위한 프로그래밍 : 파이썬 챕터 6 / 문자열 (0) | 2021.11.16 |
(파이썬/python) 모두를 위한 프로그래밍 : 파이썬 챕터 4 / 함수 (0) | 2021.10.18 |
(파이썬/python) 모두를 위한 프로그래밍 : 파이썬 챕터 3 / 조건문 (0) | 2021.10.14 |
(파이썬/python) 모두를 위한 프로그래밍 : 파이썬 챕터 2 / 변수, 표현식, 문장 (0) | 2021.10.13 |