1. For loop
반복(iteration)은 다양한 데이터를 갖고 동일한 구조의 작업을 반복수행할 때 필요하다.
두가지 종류의 반복구조가 있는데 우선적으로 for loop을 확인해보려고 한다.
iterable objec에는 list, tuple, set, dict 등 원소를 내포하는 객체들이 있는데, 이중 가장 흥미로운 것은 문자열이다.
문자열 또한 원소, 즉 개별 문자를 포함하는 배열로 인식하기 떄문에 iterable obj로 대입시 개별 문자가 변수로 쓰인다.
name = "Albatross"
cnt = 0
for i in name:
if i in 'AEIOUaeiou":
cnt += 1
print(i)
print("모음의 개수", cnt)
위와 같이 문자열 내 특정 조건을 만족하는 개별문자를 조작하기 위해 for loop이 사용될 수 있다.
contacts = {'Kim':'010-123-4567', 'Park':'011-123-4567', 'Song':'016-123-4567'}
for k in contacts.key():
print(contacts[k])
물론 이와같이 dict의 key()나 vales() 혹은 indexing을 통해 원하는 값을 출력해낼 수도 있다.
혹은 이전챕터에서 확인했던 dict.items()를 통해 key와 value를 tuple의 형태로 묶어버리고,
묶여진 tuple 내 원소를 각각 c와 score라는 변수로 할당받는 방식도 있다. 동일한 형태로 반복되는 원소의 경우 이렇게 다른 변수로 나눠 할당받는 경우가 많다. 심지어 이경우엔 indexing을 통해 value값인 score 내부의 원소에 대해서 추가적인 접근을 하고 있다.
range함수는 반복문 사용에 있어서 필수적이다.
range(5)라는 range형태의 정수 sequence가 생성되면 이는 0,1,2,3,4로 구성된 5개의 정수의 연속형인 것이다.
range(0,5)는 range(5)와 동일하다. step의 default값은 1이고 end는 end-1까지를 포함하기 때문에 range(0,5)는 range(5)와 마찬가지로 0,1,2,3,4를 품는다. step이 -1일 경우 이는 end부터 시작하는 역순의 배열을 뜻한다.
2. While
While문은 조건을 충족할 경우 참일때 반복하는 구조를 가진다.
pwd = input("password?:")
while pwd !="1q2w3e4r!":
pwd = input("passwrod?:")
print("login confirmed")
이와 같이 password를 입력받고, input값이 "1q2w3e4r!"과 다르다면 맞을때까지 input을 받는거다.
만약 input값과 지정값이 일치하다면 while loop이 풀리면서 아래 명령문이 실행된다.
이는 사실상 if문과 별 다를바가 없지만, if문을 사용했다면 if문을 무한개 작성해야했을 것이다.
1) continue / break
반복문 실행 도중 continue문을 만나게되면 뒤의 코드를 skip하고 다시 다음 반복을 위해 loop의 처음으로 돌아가게 된다. continue나 break는 모두 보통 조건문과 같이 사용된다.
s = input("문자열을 입력하시오 : \n")
vowels = 'aeiouAEIOU'
result = ''
for letter in s:
if letter in vowels:
continue
result = result+letter
print(result)
이는 입력받은 문자열 중 모음을 제외한 새 문자열을 출력하는 코드다.
문자열을 문자 단위로 쪼갠 letter가 vowels에 포함되면 if문에 걸려 아래 명령문이 실행되지 못하고 다시 loop를 탄다.
break문은 이와 반대로 특정 조건이 충족될 때 바로 loop에서 탈출하게 만드는 명령문이다.
유한한 횟수로 돌아가는 반복문에서도 사용되지만 while(True)와 같은 무한루프에서 필수적으로 사용된다.
이 때 이중반복문의 경우엔 한번에 탈출해주기 위해 다른 방법을 취해 주어야하는데 이는 다른 글에서 다루겠다.
While True:
password = input("암호를 입력하시오:")
if password == 'pease':
break
print("accepted")
이와 같이 input값이 peace와 일치할 때까지 무한히 반복되는 while loop이 존재할 때, 이 반복문이 정지하기 위한 유일한 방법은 input이 제대로 들어와 if문이 충족되고, break가 걸리는 것 뿐이다.
total = 0
print("종료하려면 음수를 입력하시오")
while True:
score = int(input("성적을 입력하시오:"))
if score < 0:
break
total += score
print("합계는 %d입니다.", %total)
기초적인 예시들이다. break문의 위치에 따라 statement가 실행될지 말지가 결정되니 잘 설계해야한다.
2) prime number determinants
N=int(input())
primeChk = True
for k in range(2, N):
if N%k == 0:
primeChk = False
break
소수판별을 위한 알고리즘은 대략 세가지가 있는데 이들 전부는 C언어를 통해 다뤄보고 파이썬은 간략히 for loop을 공부하기 위해 살펴보겠다. 위 경우엔 N을 인수로 받는데 만약 7이라고 해보자. range(2,7)이니까 7%2,3,4,5,6까지 다 돌려보고 이 값이 0일 때 primeChk를 False로 바꾼후 break해주는 for loop이다. 7의 경우 조건문을 충족하지 않고 반복문이 끝나니 primeChk는 여전히 True다. 그러나 10의 경우 10%2가 0이기에 조건문에 걸려 break된다.
primeChk = True
k = 2
while k < N:
if N%k == 0:
primeChk = False
break
k = k+1
for loop과 결과는 같으나, while이기 때문에 k < N이라고 조건을 달아주었고, 다음 순번을 위해 k = k+1 해주었다.
'프로그래밍언어 > python' 카테고리의 다른 글
[파이썬문법] 11. Class(2) (0) | 2022.01.16 |
---|---|
[파이썬문법] 11. Class(1) (0) | 2022.01.15 |
[파이썬문법] 8. iterable variables (0) | 2021.12.15 |
[파이썬문법] 10. function (0) | 2021.12.10 |
[파이썬문법] 7. list (0) | 2021.12.03 |