Unit 14. else를 사용하여 두 방향으로 분기하기

분기는 '둘 이상으로 갈라지다' 라는 뜻으로 프로그램의 흐름을  둘 이상으로 나누는것을 의미한다. if에 else를 사용하면 조건식이 만족할 때와 만족하지 않을 때 각각 다른 코드를 실행할 수 있다. 

 

14.1 else 사용하기

else는 if문 뒤에 오며 단독적으로는 사용할 수  없다. else문도 if문처럼 :(클론)을 붙이고 다음줄에 실행할 코드가 오며 들여쓰기를 해야한다.

 

14.1.1 if와 else의 기본 형태와 실행 흐름 알아보기

else는 if의 조건식이 맞지 않을 때 실행한다. 조건식이 참이면 if의 코드를 실행하고 거짓이면 else의 코드를 실행한다. 

위와 같은 코드는 조건부 표현식을 이용하여 아래와 같은 형식으로 축약할 수 있다.

변수 = 값 if 조건문 else 값

 

14.2 else와 들여쓰기 

else는 if와 들여쓰기 규칙이 같다. 

1. else 본문은 반드시 들여쓰기를 해야 한다. 

2. else 코드가 여러줄일때는 반드시 들여쓰기 깊이가 같도록 만들어야 한다.

3. 들여쓰기를 하지 않은 코드는 else와 상관 없는 코드가 된다. 

 

14.3 if 조건문의 동작 방식 알아보기

다음과 같이 조건식이 아닌 값으로도 if와 else 코드를 동작시킬 수 있다. 

if True:
    print('true')
else: 
    print('false')

if False:
    print('true')
else:
    print('false')

if None:
    print('true')
else:
    print('false')

당연히 True는 if의 코드를 수행하고, False는 else의 코드를 수행한다. None은 False로 취급되서 else의 코드가 수행된다.

 

14.3.1 if조건문에 숫자 지정하기

숫자는 정수(2진수,16진수,10진수), 실수에 상관없이 0이면 거짓, 0이 아니면 참이다.

if 0:
    print('true')
else:
    print('false')

if 1:
    print('true')
else:
    print('false')

if 0x1f:
    print('true')
else:
    print('false')

if 0b1000:
    print('true')
else:
    print('false')

if 4.5:
    print('true')
else:
    print('false')

 

14.3.2 if 조건문에 문자열 지정하기 

문자열은 내용이 있으면 참, 없으면 거짓이다.

if 'hello':
    print('true')
else:
    print('false')

if '':
    print('true')
else:
    print('false')

위 예시중 거짓으로 취급하는 것들을 not으로 뒤집으면 참이된다.

파이썬에서 False로 취급하는 것들은 다음과 같다.

None, False, 0인 숫자들(0, 0.0, 0j), 빈 문자열, 리스트, 튜플,딕셔너리, 세트, 클래스 인스턴스의 __bool__(), __len__() 메서드가 0 또는 False를 반환할 때

위와 같은 경우 외에는 모두 True로 취급한다.

 

14.4 조건식을 여러개 저장하기

if 조건문은 논리 연산자를 사용하여 조건식을 여러개 지정할 수 있다.

x = 10
y = 20

if x == 10 and y == 20:
    print('true')
else: 
    print('false')

둘 중 하나만 만족했을때 참을 출력하려면 or 연산자를 이용하면 된다. 

 

14.4.1 중첩 if연산자와 논리 연산자

if x > 0:
    if x < 20:
        print('20보다 작은 양수입니다.')

위 코드는 x가 0보다 큰지 검사하고, 20보다 작은지 중첩 if 조건문을 이용하여 검사하는 코드이다. 다음과 같이 and 연산자를 사용하여 if 조건문을 하나로 줄일 수 있다.

if x > 0 and x < 20:
    print('20보다 작은 양수입니다.')

또한 0 < x < 20처럼 부등호를 연달아 사용하여 조건문을 더 간단하게 사용할 수도 있다.

if 0 < x < 20:
    print('20보다 작은 양수입니다.')

 

14.5 퀴즈

정답은 c 이다.

정답은 b, d이다. b는 들여쓰기를 하지 않았고, d는 클론을 붙이지 않았다.

정답은 True이다. 빈 문자열은 거짓이지만 not으로 인해 참이 되었다.

정답은 b,e이다.

정답은 a 이다.

 

14.6 연습문제: 합격 여부 판단하기

정답은 다음 코드와 같다.

if written_test >= 80 and coding_test == True:

 

14.7 심사문제: 합격 여부 판단하기

정답은 다음 코드와 같다.

kor, eng, math, sci = map(int, input().split())
avg = (kor+eng+math+sci) / 4

if 0 <= kor <= 100 and 0 <= eng <= 100 and 0 <= math <= 100 and 0 <= sci <= 100:
    if avg >= 80:
        print('합격')
    else:
        print('불합격')
else:
    print('잘못된 점수')

 

Unit 15. elif를 사용하여 여러 방향으로 분기하기

elif는 조건식을 여러개 지정하여 각 조건 마다 다른 코드를 실행할 수 있다. 

 

15.1 elif사용하기

elif는 else인 상태에서 조건식을 지정하는 것으로 else if의 뜻을 가진다. elif도 조건식 끝에 클론을 붙여야 하며 수행할 코드는 들여쓰기를 해야하고, elif단독으로 사용할 수는 없다. 

처음 if문에서 조건을 검사하고 참이면 코드를 수행하고 끝낸다. 거짓이면 if문의 코드를 수행하지 않고 elif의 조건식을 검사한다. elif의 조건식이 참이면 elif의 코드를 수행하고, 거짓이면 끝낸다.

 

15.1.1 if, elif, else를 모두 사용하기

elif와 else는 단독으로 사용할 수 없으며 항상 if와 함께 사용해야 한다. if, elif, else는 모두 함께 사용할 수 있다. 항상 if가 가장 먼저 나와야 하며, else가 가장 마지막에 나와야 한다. else가 elif보다 앞에 오면 잘못된 문법이다. 

 

15.1.2 음료수 자판기 만들기

다음은 입력한 번호에 따른 음료수 이름을 출력하는 코드이다. 실제 자판기는 버튼이 정해져 있지만 프로그램은 예상하지 못한 값이 입력될 수 있어서 이에 대한 처리를 해 줘야 한다.

button = int(input())

if button == 1:
    print('콜라')
elif button == 2:
    print('사이다')
elif button == 3:
    print('환타')
else:
    print('잘못된 값')

 

15.2 퀴즈

정답은 d,e 이다 elif는 단독으로 사용할 수 없고, else가 없어도 된다.

정답은 e이다. 

 

15.3 연습문제: if, elif, else모두 사용하기

정답은 다음 코드와 같다.

if 11 <= x <= 20:
    print('11~10')
elif 21 <= x <= 30:
    print('21~30')
else: 
    print('아무것도 해당하지 않음')

 

15.4 심사문제 : 교통카드 시스템 만들기

정답은 다음 코드와 같다.

if 7 <= age <= 12:
    balance -= 650
elif 13 <= age <= 18:
    balance -= 1050
elif 19 <= age:
    balance -= 1250

 

Unit 16. for 반복문으로 Hello, World! 100번 출력하기

Hello, World!를 100번 출력하려면 print()함수를 100번 사용하면 된다. 그러나 반복 횟수가 늘어날 수록 이 행위는 점점 더 비효율적인 일이 된다. 그래서 대부분의 프로그래밍 언어에서는 반복되는 작업을 간단하게 처리하기 위해 반복문이라는 기능을 제공한다. 

반복문은 반복 횟수, 반복 및 정지 조건을 자유자재로 제어할 수 있다.

 

16.1 for와 range 사용하기

for 반복문은 range에 반복할 횟수를 지정하고, 앞에 in과 변수를 입력한 후 끝에 클론을 붙인 뒤 다음줄에 반복할 코드를 넣는다. 반복할 코드도 반드시 들여쓰기를 해야 한다. 

range로 연속된 숫자를 만들어 하나하나 꺼내서 반복하는 방식이다. 

for 반복문은 반복 횟수가 정해져 있을 때 주로 사용한다. 

반복할 코드가 순환하는것을 루프(loop)라고 한다. 

 

16.1.1 반복문에서 변수의 변화 알아보기

위와 같이 range에서 꺼낸 숫자를 확인할 수 있다. range에서 꺼낸 숫자는 변수 i 에 저장되며 반복할 코드에서 사용할 수 있다. 변수 i는 반복문에서 주로 사용하는 변수인데 루프 인덱스라고 부르며 index의 머리글자 i를 따온 것이다.

 

16.2.1 시작하는 숫자와 끝나는 숫자 지정하기

range에 시작 숫자와 끝나는 숫자를 지정할 수 있다.

마지막에 출력되는 숫자는 끝나는 숫자보다 1 작다.

 

16.2.2 증가폭 사용하기

for문에서도 range의  증가폭을 지정하여 해당 값만큼 숫자를 증가시킬 수 있다.

 

16.2.3 숫자를 감소시키기

range(10,0)과 같은 방법으로는 range의 숫자 증가 기본값이 1이기 때문에 숫자를 감소시킬 수 없다. 다음과 같이 증가폭을 음수로 지정하여 숫자를 감소시켜야 한다.

증가폭을 음수로 지정하는 것 말고도 reversed를 사용하면 숫자의 순서를 반대로 뒤집을 수 있다. 

 

16.2.4 입력한 횟수대로 반복하기

다음 코드와 같이 입력한 값을 반복 횟수의 대상으로 지정할 수 도 있다. 

cnt = int(input())

for i in range(cnt):
    print('hello', i)

꼭 int 변수를 활용하여 입력받는 값을 정수형으로 변환해야 한다. 

 

16.3 시퀀스 객체로 반복하기 

for에 range 대신 시퀀스 객체를 넣어도 된다. 시퀀스 객체를 넣으면 객체의 요소들을 꺼내면서 반복한다.

reversed를 사용하여 시퀀스 객체도 뒤집을 수 있다.

Python이라는 문자열이 뒤집혀 nohtyP가 된것을 확인할 수 있다. 

 

16.4 퀴즈

정답은 a, d 이다.

정답은 c,d이다.

정답은 a,c 이다. a는 int로 자료형을 변환해야 하고, c는 클론을 붙여야 한다. 

정답은 d 이다. end 로 .을 설정했기 때문에 문자가 끝나면 . 이 온다. 

 

16.5 리스트의 요소에 10을 곱해서 출력하기

정답은 다음 코드와 같다.

for i in x:
    print(x*10, end = ' ')

출력값이 한 줄로 한 칸씩 띄워서 출력했기 때문에 end 에 공백을 설정해야 한다. 

 

16.6 심사문제 : 구구단 출력하기

정답은 다음 코드와 같다.

dan = int(input())

for i in range(1, 10):
    print(dan, '*', i, '=', dan*i)

 

Unit 17. while 반복문으로 Hello, world! 100번 출력하기

i = 0                     # 초기식
while i < 100:            # while 조건식
     print('Hello, world!')    # 반복할 코드
     i += 1                    # 변화식

while 반복문은 초기식에서 시작해서 조건식을 판별한다. 조건식이 참이면 아래 반복할 코드들을 실행하고 거짓이면 반복문을 끝낸다. 반복할 코드에는 변화식을 넣어 조건이 거짓이 되게 만든다. while문은 조건식 -> 반복할코드와 변화식 -> 조건식 으로 순환하는것이 루프이다.

 

17.1 while 반복문 사용하기

while문은 조건식을 지정하고 클론을 붙인뒤 다음줄부터 들여쓰기를 하여 반복할 코드와 변화식을 넣는다. 초기식은 보통 변수에 값을 저장하는 코드이다. 

반복할 코드에 변화식을 넣지 않으면 반복이 끝나지 않고 계속 진행되는 무한 루프 현상이 발생한다. 변화식을 통해 반복 할때마다 i의 값이 1 씩 증가하고, i가 10이되면 조건식이 거짓이 되어 반복문이 종료된다. 

 

17.1.1 초기값을 1부터 시작하기

i에 0 이 아닌 1을 넣으면 조건식을 < 이 아니라 <=로 바꿔줘야 한다. 

i 가 11이 되면 조건식이 거짓이 되어 반복문이 종료된다. 

 

17.1.2 초기값을 감소시키기

다음과 같이 초기값을 크게 주고, 변수를 감소시키면서 반복할 수 도 있다. 

조건식을 초기값보다 작게 하고, 변화식에서 i의 값을 감소시키면 된다. 

 

17.1.3 입력한 횟수대로 반복하기

cnt = int(input())
i = 0

while i < cnt:
    print('python', i)
    i += 1

반복할 횟수를 입력받아 입력받은 횟수만큼 반복하려면 위와 같은 코드를 이용하면 된다. 

 

17.2  반복 횟수가 정해지지 않은 경우

난수를 사용해서 숫자에 따라 반복을 끝내 볼 것이다. 난수는 반복되지 않는 규칙없이 무작위로 나열된 숫자이다. 난수를 생성하려면 random모듈을 사용해야 한다. 모듈은 다음 코드와 같이 import로 불러올 수 있다. 

import random

random 모듈의 random함수를 사용할 때 마다 계속 다른 실수가 생성된다. 

정수를 생성할땐 random모듈의 randint 함수를 사용한다. random.randint(1,6) 과 같은 방식으로 함수를 사용하면 1~6 사이의 숫자중 무작위의 한 숫자를 생성한다. 

import random

i = 0
while i != 3:
    i = random.randint(1,6)
    print(i)

반복해서 1부터 6까지중의 숫자를 생성하고 3이 나오면 반복을 종료하는 코드이다.

random.choice()를 이용하면 시퀀스 객체에서 무작위의 요소를 선택할 수 있다.

 

17.3 while 반복문으로 무한루프 만들기

while문의 조건식을 항상 참으로 하고 변화식을 만들지 않으면 무한 루프가 생성된다. 다음 코드의 경우 'hello'가 무한 반복하여 출력된다. 

while True:
    print('hello')

 

17.4 퀴즈 

정답은 b,c이다. while 반복문은 결과가 False면 반복을 끝내고, 반복 횟수가 정해져 있지 않아도 사용할 수 있다.

정답은 d 이다. 초기식이 10에서 시작하고, 19보다 작을때까지 2씩 증가하기 때문이다. 

정답은 c이다. 10번 출력하려면 i > 21 이 되어야 한다.

정답은 b, e 이다 조건식이 참인 것들이다.

 

17.5 연습문제 : 변수 두 개를 다르게 반복하기

정답은 다음 코드와 같다.

while i <= 32:
    print(i,j)
    i*=2
    i-=1

5번 반복하는 것이기 때문에 조건은 i에만 걸어도 된다. i는 2의 거듭제곱이고, j 는 1씩 감소한다.

 

17.6 심사문제: 변수 두 개를 다르게 반복하기

정답은 다음 코드와 같다. 잔액이 1350보다 적으면 마이너스 연산을 한 후 음수가 출력되기 때문에 잔액은 항상 1350 이상 이어야 한다.

money = int(input())

while money >= 1350:
    money -= 1350
    print(money)

 

+ Recent posts