본문 바로가기
프로그래밍 기초 스터디/파이썬 - Python

파이썬 공부 ④ 제어문 : 조건문(if, if else), 반복문(for, while), 내포 표현

by 공부하는우니 2021. 6. 6.
  • 파이썬에서는 블록을 표현할 때 들여쓰기(인덴트)를 사용합니다.
  • 기본적으로 스페이스 4칸 혹은 탭 한번 으로 가능지만, IDE에 따라 변경 가능합니다(4번의 스페이스를 2번으로 변경하거나)
  • 다만, 하나의 블록에서 한줄은 스페이스 4칸, 한줄은 탭 1번, 이런식으로의 교차사용은 불가능합니다 (제가 써본 것들 중에서는)
  • 너무 기초적인 것들이라 기본적인 내용만 빠르게 훑어보고 끝내기!

if문

if True조건 : 

    내용

elif :

    내용

else:

    내용

score = 90

if score >= 80:
    print('Grade A')
elif score > 70 and score < 80:
    print('Grade B')
else:
    print('Grade C')

 

for문

 

for 인덱스/변수 in 범위:

    내용

 

* 범위에 리스트나 튜플, 딕셔너리 모두 사용 가능

* 인덱스에 C/C++ 처럼 단순한 값을 받는 것이 아닌 형 자체를 받는 것이 가능함. ex) dict.items()

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

for i in list:
    print(i) # 1, 2, 3, 4, 5

tuple = (6, 7, 8, 9, 10)
for i in tuple:
    print(i) # 6, 7, 8, 9, 10

dict = {'a':1, 'b':2, 'c':3}
for i in dict:
    print(i) # a, b, c

for i in dict.values():
    print(i) # 1, 2, 3

for i in dict.keys():
    print(i) # a, b, c

for i in dict.items():
    print(i) # ('a', 1), ('b', 2), ('c', 3)

 

반복문에서 자주 사용되는 range() 구문

 

* range(시작값, 종료값, 스텝) 으로 사용합니다. 시작값부터 종료값까지, 종료값은 제외하면서 스텝만큼 상승하며 값을 생성합니다.

* 반복문 자체에서는 range() 만으로 사용하여도 문제없으나, 반복문 이외에서 사용할때는 list(range())형태로 리스트로 사용하는게 편해보이네요.

print(list(range(0, 10, 1))) 
# 1부터 시작해서 10까지 1씩 커지면서 값을 생성 [0, 1, 2, 3, 4, 5, 6, 7, 8, 9]

print(list(range(0, 10, 2)))
# 1부터 시작해서 10까지 1씩 커지면서 값을 생성 [0, 2, 4, 6, 8]

print(list(range(0, 10))) 
# 마지막 항을 생성하지 않으면 기본값 1을 할당함 [0, 1, 2, 3, 4, 5, 6, 7, 8, 9]

print(list(range(10))) 
# 숫자 하나만 입력하는 경우 자동적으로 0부터 +1씩 추가하며 생성 [0, 1, 2, 3, 4, 5, 6, 7, 8, 9]

print(list(range(10, 0, -1))) 
# [불가능한 경우 아무것도 없는 리스트 입력]

print(list(range(0, 10, -1))) 
# 불가능한 경우 아무것도 없는 리스트 생성

for i in range(0, 10, 1):
    print(i) # 0, 1, 2, 3, 4, 5, 6, 7, 8, 9

 

while문

* else구문은 while이 종료된 후 실행할 내용이며, 필수 구문은 아닙니다.

 

while 조건:

    내용

else:

    내용

a = 0
while a < 5:
    print(a) # 0, 1, 2, 3, 4
    a += 1 # a =  a  + 1 과 동일
else:
    print('Finished')



########## 결과
0
1
2
3
4
Finished

 

반복문에서의 중단과 다음 반복으로 이동 (break, continue)

* break : 반복문을 종료함 - while - else 구문에서 break에 걸리면 else구문이 실행되지 않습니다.

* continue : 반복문에서 continue 이후에 작성된 내용을 실행하지 않고 다음 반복문의 처음으로 이동합니다.

 

ex) 아래 구문에서 if a==3에 걸리면, a=4가 되며 (a+=1) 반복문의 처음으로 이동되므로 print(a)가 실행되지 않은 채 a=4에서의 while문을 맞이합니다. 이후 a==5에서의 break가 걸리므로 else구문은 실행되지 않습니다.

a = 0
while a <10:

    if a==3 :
        a+=1
        continue
    if a==5 :
        break
    print(a)
    a+=1
else:
    print('Finished') # 반복 도중 break에 걸리면 실행되지 않음


######### 결과
0
1
2
4

 

내포 표현(Comprehension)

: 이터러블한 오브젝트(문자열, 리스트, 집합, 딕셔너리)에서 요소를 순서대로 변수로 꺼낸 후, 변수를 사용한 식을 적용하여 순서대로 리스트의 요소로 저장하는 방식

 

* 굉장히 자주 사용되는 구문으로 반드시 숙지하는 것이 좋습니다.

 

* 간단하게 요약하자면 여러 줄로 표현된 아래의 리스트의 항목을 제곱하여 반환하는 구문을

 

a = [1, 2, 3, 4, 5]
asquare = []
for i in a:
    asquare.append(i**2)
print(asquare) # [1, 4, 9, 16, 25]

* 이와같이 한줄로 변경 가능합니다.

 

식은 [ for 변수 in 이터러블한 오브젝트] 입니다.

 

설명하자면, 기본 for구문에서 for i in a를 실행하면 a의 요소를 순서대로 i로 가져오게됩니다. 그때 i**2으로 제곱하여 asquare2에 append하겠다는의미, 즉 위쪽 내용과 완전히 동일한 것이죠.

asquare2 = [i**2 for i in a]
print(asquare2) # [1, 4, 9, 16, 25]

* 조건문을 포함한 채로도 작성 가능합니다.

 

식은 [ for 변수 in 이터러블 오브젝트 if 조건] 입니다.

asquare3 = [i**2 for i in a if i%2==0]
print(asquare3) # [4, 16]

 

댓글