[python] 제어문 컴프리헨션 01. 제어문(08.14 -16)

0

제어문

기본적으로 프로그램은 순차구조를 가지는데 그 실행흐름을 제어하는 구문을 만드는 문법이 제어문

logic - 순차적으로 적은 코드
알고리즘 - 해결해야하는 문제에 대한 문제풀이, logic에 따라 순차적으로 작성됨
제어문 : 알고리즘 안에서 실행됨. 순차적으로 작성되는 구조

#순차 구조 - 순차적으로 실행되어야만 함
n1 = input()
num1 = int(n1)
n2 = input()
num2 = int(n2)
oper = input("연산자")
result = num2 + num1
print("결과:",result)

제어문의 종류

1) 조건문(if문) : 연산자로 입력된 값이 무엇이냐에 따라 해야할 일이 달라지는 것
2) 반복문 : 하나의 코드로 여러번의 실행을 하는 것
- while문 : 조건이 True인 동안 반복하는 것, 목표를 달성하기 전까지 무한 반복
- for in 문 : 횟수가 정해진 만큼 반복하는 것, 자료구조와 관련이 있음

1) 조건문/분기문(conditional statement)

순서도에서 <조건> 에 따라서 다른 흐름이 발생

  1. (if~)조건이 True일 경우에만 특정 구문을 실행
  • 코드블록 : 코드블록은 열개의 실행 명령문을 묶어놓은 것, 같은 들여쓰기 = 같은 코드블록, 공백4칸=tab 사용
if 조건 : #조건은 bool표현식
	명령문1 #조건이 True일 때 실행할 구문
    명령문2)
# 1.정수를 입력받는다
num = int(input("정수:"))
# 2. 정수가 0이면 "Zero"를 출력한다.(아니면 아무것도 안한다.)
if num == 0 :
    print("Zero")
    print("영입니다.")
    # 2개의 명령문이 하나로 묶음
    # if문이 False일 경우, 실행되지 않음
# 3."종료"를 출력
print("종료")
  1. ( if~esle )조건이 True일 때 실행하는 구문과 False일 때 실행하는 구문
if 조건:     
    명령문1_1 # 조건이 True일 경우 실행할 구문들
    명령문1_2
    ...
else:
    명령문2_1 # 조건이 False일 경우 실행할 구문들
    명령문2_2
    ...
   

예)
    #1. 정수를 입력받는다.
    num = int(input("정수 :"))

    #2. 2-1: 정수가 0이면 "Zero"를 출력
    #   2-2: 정수가 0이 아니면 "Not Zero"를 출력
    if num == 0 :
        print("Zero")
        print("영입니다.")
    else :
        print("Not Zero")
        print("영이 아님")

    # 3. 종료 출력
    print("종료")
   
  1. 여러 조건이 있는 문장 - 조건의 순서를 유의
    • 조건을 포함한 조건은 '나중에' 물어야한다. 명령은 순차적으로 인식되기 때문이다. 앞의 조건이 True면 이후 elif 조건은 실행되지 않는다.
    • elif 사용
    	if 조건 :
     		명령문
        elif 조건 : #조건2 - 조건1이 False일 때 실행
        	명령문
        elif 조건 : #조건3 - 조건1,2가 모두 False일 때 실행
        	명령문
    • if 조건을 여러개 쓰는 것은, 쓴 순서대로 실행되긴하지만 각 if문은 독립적이다(!=elif, elif문은 조건문들 사이의 관계있음)
#조건이 중첩되는 경우
num = int(input("양수입력:"))

if num >= 10000 : 
    print("아주 큰수")
elif num >= 1000 : 
    print("큰수")
elif num >= 100 : 
    print("보통")
elif num >= 0 : #가장 큰 범위를 포함하는 조건 - 마지막
    print("양수")

2) 반복문

  • 동일한 코드를 여러번 반복

While 문

  • 조건이 True인 동안 반복하는 것, 목표를 달성하기 전까지 무한 반복
  • bool 표현식인 조건식을 사용
while 조건:       # 조건은 bool 표현식
    반복할 구문1  # 반복할 구문을 코드블록으로 작성한다.  
    반복할 구문2
    
예)
limit = int(input("반복횟수:")
count = 0 #몇 번째 반복일지 저장할 변수 초기화

while count < limit :
	#True -> False로 바뀌는 구문 필요 ex. 증감식(없을 시, 무한 반복)
	count = count +1 
    print(f"{count}번째 실행.")
    

    
    

for in문

  • 횟수가 정해진 만큼 반복하는 것, 자료구조와 관련이 있음
  • iterable 객체를 순환조회하는 구문
    = iterable 타입의 객체(대표적으로 List, Tuple, Dictionary, Set, 문자열 등)가 가지고 있는 값들을 각각 조회하여 처리
for 변수 in Iterable: 
    반복구문          
    반복구문
    
예) 
<while문으로 작성할 >
l = [1, 2, 3, 4, 5] # 리스트 원소들의 값 +10 한 것을 출력

cnt = len(l) # 원소의 개수를 센다 -> 기준값을 원소의 개수로 설정
idx = 0 # index 역할 초기값 설정
while idx < cnt :
    value = l[idx] #원소 한개 조회
    print(value + 10) #조회한 원소를 처리(+10 값을 출력)
    idx += 1 #index를 증가
    
<for in  이용>
#iterable 객체를 순차적으로 순환하면서 반복적으로 진행할 명령문을 작성한다.
#for 변수 in에서 변수를 설정하고 그 변수의 반복문을 작성하면 된다.
l = [1, 2, 3, 4, 5] 

for v in l : #변수  v
    print(v+10) #변수 v를 이용한 반복문 작성
#for value in list:



예)
#   print(value)

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

for value in l:#for 변수 in 리스트 : => 변수 : 원소를 저장할 변수명
# list안의 원소를 전부 처리할 때 까지 반복
    print(value) 
 
참고)
#리스트를 도는 것이 아니라 리스트의 원소의 개수 -> while문의 조건에 들어감
l = [1, 2, 3, 4, 5] # 리스트 원소들의 값 +10 한 것을 출력

cnt = len(l) # 원소의 개수
idx = 0 # index 변수 초기화
while idx < cnt :
    value - l[idx] #원소 한개 조회
    print(value + 10) #조회한 원소를 처리(+10 값을 출력)
    idx += 1 #index를 증가
   
   
예)
# l의 원소 중 2의 배수만 출력
l = [1,2,3,4,5,6,10,3,4,12,20,102,111]
for value in l:
    if value % 2 == 0:
        print(value)
        
# l의 원소 중 2의 배수만 모으기
l = [1,2,3,4,5,6,10,3,4,12,20,102,111]
result = [] #2의 배수만 모을 빈리스트 초기화 #result = list()
for value in l:
    if value %2 == 0:
        result.append(value)
  • 중첩 리스트
    - for in문을 이용해 모든 원소들을 출력 ---> 리스트의 중첩 횟수만큼 반복문도 중첩한다.
       l2 = [
       [1,2,3],
       [10,20,30],
       ["가","나","다"]
    ]
for l in l2 : #외부 리스트의 원소를 조회
# l => 리스트
for value in l: #내부 리스트의 원소를 조회
    print(value)
print("-------------------")


>>
1
2
3
-------------------
10
20
30
-------------------
가
나
다
--------------


  • continue와 break를 이용한 반복문 제어
    - if문에 작성(continue와 break는 특정 조건에서 실행)
    break
    반복을 중단
    특정 조건에서 반복문을 중간에 중지할때 사용
    continue
    현재 반복을 중단하고 다음 반복을 진행
    특정 조건에서 처리를 멈추고 다음 처리를 반복할 때 사용

    예) break
    #1
    for v in [1,2,3,4,5,6,7]: #반복 조건
       if v == 3 : #if 반복 중지 조건: break - 3에 도달하면 반복을 중지!
           break
       print(v)
    
     print("종료")
    
     #2
     t = input("입력:")
     while True : 
         print(f">>{t}")
         if t == "종료":
             break #반복을 멈춘다.
         t = input("입력:")
    예) continue
        result = []
    # -100, 100 에서 양수가 나오면 result 저장, 0이 나오면 종료
    while True : 
        num = random.randint(-100,100)
        if num == 0 :
            break # 반복문 자체를 종료
        elif num < 0:
            continue #다음 반복으로 하러감. 아래 반복을 실행하지 x
             # num<0를 만족하는 한, 아래 조건문으로 넘어가지 않고, num = 	     random.randint(-100,100) 계속 진행
        result.append(num) #num이 ==0도아니고, <0도 아닐 경우에만 , 즉 양수일 경우에 result 리스트에 num 추가

```

for in 문 연관 내장 함수

range()

range([시작값], 멈춤값, [증감값])
: 일정한 간격의 연속된 정수를 제공하는 반복가능 객체

  • 시작값에서 멈춤값-1까지 증감값만큼의 간격으로 반복하는 객체를 생성
  • 시작값 > 멈춤값 이고 증감값이 음수이면 내림차순으로 값을 제공
) print(set(range(1,10,2)))
>> (1,3,5,7,9)


for i in range(1,10,2):
    print(i)
    >> 1 3 5 7 9
    
for i in range(10,-10,-1) : #10 ~ -10-(-1): 증감:-1
    print(i, end = ",")
    >> 10,9,8,7,...-7,-8,-9,

#번호. 안녕하세요 => 5번 출력(1.안녕하세요, 2.안녕하세요,...5.안녕하세요)
for i in range(5) : # N번 반복
    print(f"{i+1},안녕하세요.")
  • 사용하지 않을 변수를 구문상 어쩔 수없이 넣어야할 경우 , 관례적으로 변수명을 '_'로 지정(관례)
for _ in range(5):
    print("Hello world")

emumerate()

  • 현재 몇번째 값을 제공하는 지(현재 몇번째 반복인지)알고 싶을 때 사용
  • index와 제공하는 원소를 tuple로 묶어서 반환
  • 구문
    : enumerate(Iterable, [, start=정수(index시작값, default = 0)])
names = ["유재석","박명수","홍길동","정준하"]

for name in enumerate(names):
    print(name)
>>> 
(0, '유재석')
(1, '박명수')
(2, '홍길동')
(3, '정준하')

for index,name in enumerate(names, start = 1): #start = 시작 
    print(f"{index}. {name}")
>>> 
1. 유재석
2. 박명수
3. 홍길동
4. 정준하

zip()

  • 여러 개의 iterable 객체를 같은index 값끼리 튜플로 묶어 반환.
  • 구문
    :zip(Iterable1, Iterable2, Iterable3)
  • 각 Iterable이 제공하는 원소의 개수가 다르면, 가장 적은 것의 개수에 맞춰 반복
)
#네 명의 사람정보를 이름, 나이, 주소별로 따로 저장. 같은 index의 값이 한사람의 정보
names = ['유재석','박명수','홍길동','정준하']
ages = [20,30,40,50]
addresses = ["서울","인천","서울","대전"] #"부산","대구","광주"]

print(names[0],ages[0],address[0])
>>유재석 20 서울


예)
for index, value in enumerate(zip(names, ages, addresses)) :
    print(index, value)
    
    >>>
0 ('유재석', 20, '서울')
1 ('박명수', 30, '인천')
2 ('홍길동', 40, '서울')
3 ('정준하', 50, '대전')
profile
데이터 분석 & 서비스 기획

0개의 댓글

관련 채용 정보