[패스트캠퍼스python] 조건문과 반복문

파이썬의 흐름제어 : 조건문과 반복문

조건문과 반복문

파이썬은 정말 문법에 자유로운 언어인 것 같다.
조건문, 반복문에도 ()를 넣지 않아도 된다.
점점 내 스타일이다 ㅋㅋㅋㅋㅋㅋㅋㅋㅋ

1. 조건문

1. 조건문의 Boolean

조건문에서 가장 중요한건 boolean이다

1
2
3
4
5
6
7
if None:
print("Yes1")
else:
print("Yes2")

#출력값은
Yes2

만약 Yes1을 출력하고 싶다면 if 의 조건을 True 값을 넣어야한다
그렇다면 True 와 false 에는 뭐가 있을까?

참 거짓 종류
참 : “내용” [내용] (내용) {내용} 1
거짓 : “” [] () {} 0

Boolean

1
2
3
4
5
6
7
if 1:
print("Yes1")
else:
print("Yes2")

#출력값은
Yes1

2. 관계연산자

다양한 예가 있다.
수학에서의 부등호와 비슷하기 때문에 직관적으로 의미를 알수있다.
==, !=, >, >=, <, <=

3. 논리연산자 : and or not

js에서 and와 or 연산자만 배웠었는데
python에서 not 연산자를 처음 봤다.
not이란 연산자는 되게 흥미로워서 조금 더 찾아봤다
논리연산자진리표를 보면 쉽게 이해가 간다.

아래 이미지는 논리연산자의 쉬운 예시이다

논리연산자예시

아래 코드의 의미는 참이 아닌 것을 출력하시오이다.

1
2
3
4
print(not True)

# 출력값은
False

4. 산술 > 관계 > 논리 순서대로 적용.

위에서 배웠던 세 가지의 연산자들이 동시에 쓰이게 되면 우선순위대로 처리가 이루어진다

1
2
3
4
print('ex1 : ', 5+10 > 0 and not 7+3 == 10)

# 출력값은
ex1 : False

관계연산자와 논리연산자를 함께 쓰면 아래와 같다

1
2
3
4
5
6
7
8
9
score1 = 80
score2 = 'A'
if score1 >= 90 and score2 =='A':
print("합격입니다")
else:
print("불합격입니다")

# 출력값은
불합격입니다

5. 다중조건문 :

다중조건문은 위의 점수조건문을 응용해서 만들어볼 수 있다

다중조건문

num이 82이기에 B값이 터미널에 출력되는 것을 확인 할 수 있다.

2. 파이썬 흐름제어(반복문) : while, for

흐름제어 반복문

1. while과 for문

while문은 아래와 같이 나타낼수있다
while문과 for문이 자유자재로 바꿔 생각할 수 있어야 코딩 초짜를 뗄 수있다.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
v1 =1
while v1 < 11:
print("vi is :", v1)
v1 +=1
# 출력값은
vi is : 1
vi is : 2
vi is : 3
vi is : 4
vi is : 5
vi is : 6
vi is : 7
vi is : 8
vi is : 9
vi is : 10

이걸 for 문으로 바꾼다면 어떻게 될까?

1
2
3
4
5
6
7
8
9
10
11
12
for v2 in range(1, 11):
print("v2 is : ", v2)
v2 is : 1
v2 is : 2
v2 is : 3
v2 is : 4
v2 is : 5
v2 is : 6
v2 is : 7
v2 is : 8
v2 is : 9
v2 is : 10

2. 1부터 100까지의 합을 구하는 두 가지 방법

  1. 첫번째 방법 while문사용

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    sum1 = 0
    cnt1 = 1

    while cnt1 <= 100:
    sum1 += cnt1
    cnt1 += 1
    print(' 1 ~ 100합은 : ', sum1)

    # 출력값은
    1 ~ 100합은 : 5050
  2. 두번째 방법 range()함수사용

    1
    2
    3
    4
    print(' 1 ~ 100합은 : ', sum(range(1,101)))

    # 출력값은
    1 ~ 100합은 : 5050
  3. 위의 range 함수 활용
    range()함수는 3번째 매개변수까지 받을 수 있다.
    range(시작값, 끝값, 넘어가는숫자))

예를 들어 1~100까지의 짝수의 합은?

1
2
3
4
5
6
print(' 1 ~ 100까지 짝수의 합은 : ', sum(range(1,101, 2)))
print(' 1 ~ 100까지 짝수의 합은 : ', sum(range(1,101, 10))) # 십단위의 합

# 출력값은
1 ~ 100까지 짝수의 합은 : 2500
1 ~ 100까지 짝수의 합은 : 460

3. 시퀀스

순서가 있는 자료형을 반복 (매우중요)
문자열, 리스트, 튜플, 집합, 사전 이 데이터들은 다 시퀀스 가능
iterable 리턴함수 : range, reversed, enumerate, filter

예제 1 : 값을 하나씩 가져오시오

1
2
3
4
5
6
7
8
names = ['kim', 'park', 'lee']
for v in names:
print("You are : ", v)

# 출력값은
You are : kim
You are : park
You are : lee

예제 2 : ‘word’를 한 글자씩 가져오시오

1
2
3
4
5
6
7
8
9
word = 'word'
for s in word:
print("Word : ", s)

# 출력값은
Word : w
Word : o
Word : r
Word : d

예제 3

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
my_info = {
'name' : 'kim',
'city' : 'seoul',
'age' : 77
}
# 키를 가져오는 두가지 방법 :기본값과 keys()
print('기본값은 키가져오기')
for key in my_info:
print(key)

for key in my_info.keys():
print(key)
# 값
print('값가져오기')
for key in my_info.values():
print(key)
# 키와 값 둘 다
print('키와 값 둘 다 가져오기')
for k, v in my_info.items():
print(k, v)

# 출력값은
기본값은 키
name
city
age
name
city
age
기본값은 값
kim
seoul
77
기본값은 키와 벨류 둘다
name kim
city seoul
age 77

예제 4 : 대문자는 소문자로, 소문자는 대문자로 바꾸시오

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
name = 'GoodbYe'

for n in name:
if n.isupper():
print(n.lower())
else:
print(n.upper())

# 출력값은
g
O
O
D
B
y
E

4. break

정말 중요한 break!
사소하지만 효율을 올려준다

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
numbers = [14,3,4,7,10,33,24,17]

for num in numbers:
if num == 33:
print('찾았다', num)
else:
print('못찾았다')

# 출력값은
못찾았다
못찾았다
못찾았다
못찾았다
못찾았다
찾았다 33
못찾았다
못찾았다

위의 코드로 하면 원하는 값을 찾은 뒤에 2번 더 실행되는 것을 볼 수 있다.
효율이 떨어지므로 break걸어주면 좋다

1
2
3
4
5
6
7
8
9
10
11
12
13
14
for num in numbers:
if num == 33:
print('찾았다', num)
break
else:
print('못찾았다')

# 출력값은
못찾았다
못찾았다
못찾았다
못찾았다
못찾았다
찾았다 33

5. for - else 구문

흥미롭게도 python에는 for문에도 else가 있다 (중요)
반복문이 정상적으로 수행 된 경우 else 블럭 수행
블럭안에 break가 들어간 경우 반복문 전체가 실행되지않기에 for-else문이 출력되지않는다

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
for num in numbers:
if num == 33:
print('찾았다', num)
else:
print('못찾았다')
else:
print('반복문끄읕')

# 출력값은
못찾았다
못찾았다
못찾았다
못찾았다
못찾았다
찾았다 33
못찾았다
못찾았다
반복문끄읕

6. continue

break의 반대이다
아래는 continue를 가장 이해하기 쉬운 예시이다

1
2
3
4
5
6
7
8
lt = ["1", 2, 5, True, 4.3, complex(4)]

for v in lt:
if type(v) is float:
print('찾았다, float : ', v)

# 출력값은
찾았다, float : 4.3

만약 찾은 float빼고 나머지를 보고싶다면?
이때 continue사용하면 좋다!

for v in lt:
    if type(v) is float:
        continue
    print('타입 : ', type(v))

# 출력값은
타입 :  <class 'str'>
타입 :  <class 'int'>
타입 :  <class 'int'>
타입 :  <class 'bool'>
타입 :  <class 'complex'>

float만 빼고 출력된 것을 확인할 수있다
개이득!