[Python] 기본 문법 2 – 연산자와 if/for/while 문

지난 글에 이어서 Python의 기본 문법에 대해 알아보겠습니다.

Python 연산자의 종류와 사용 예시

산술 연산자

=대입a = 10
+더하기a = 5 + 3 (8)
빼기a = 5 – 3 (2)
*곱하기a = 5 * 3 (15)
/나누기a = 5 / 3 (1.6666…)
//a = 5 //3 (1)
%나머지 값a = 5 % 3 (2)
**제곱a = 5 ** 3 (15)
산술 연산자 종류

일반적인 사칙연산과 마찬가지로 괄호 안의 연산을 가장 먼저 하고, 곱셈이나 나눗셈이 우선이며, 마지막으로 덧셈과 뺄셈을 하게 됩니다.

대입 연산자

+=a += 5a = a + 5
-=a -= 5a = a – 5
*=a *= 5a = a * 5
/=a /= 5a = a / 5
//=a //= 5a = a // 5
%=a %= 5a = a % 5
**=a **= 5a = a ** 5
대입 연산자 종류

아래 예시 코드를 실행해봅시다.

#변수
a, b = 0, 0

#값 입력
a = int(input("a의 값을 입력하세요: "))

#관계연산자
b = a
b += 3
print(b)

b = a
b -= 3
print(b)

b = a
b *= 3
print(b)

b = a
b /= 3
print(b)

b = a
b //= 3
print(b)

b = a
b %= 3
print(b)

b = a
b **= 3
print(b)
Result
Python Result

관계 연산자

==같다
!=다르다
>크다
<작다
>=크거나 같다
<=작거나 같다
관계 연산자 종류

아래 예시 코드를 실행해 봅시다.

#변수
a,b = 5, 3

#관계연산자
print(a == b, a != b, a > b, a < b, a >= b, a <= b)

결과는 아래와 같습니다.

False True True False True False

논리 연산자

논리 연산자에는 다들 알고 있는 and, or, not이 있습니다. 이를 활용하여 로그인 프로그램을 작성해 봅시다.

아이디: veriln-e / 비밀번호: pythoncoding

으로 설정해보겠습니다.

#변수
ID, password = "veriln-e", "pythoncoding"

#값 입력
ID_input       = input("ID: ")
password_input = input("password: ")

#로그인 시도
print("로그인 가능?", (ID_input == ID) and (password_input == password))
Result
Python Result

비트 연산자

&AND둘 다 1이면 1
|OR둘 줄 하나라도 1이면 1
^XOR둘이 같으면 0, 다르면 1
~NOT0,1 반전
<<left shift비트를 왼쪽으로 shift
>>right shift비트를 오른쪽으로 shift
비트 연산자 종류

비트와 바이트

비트(Bit)는 컴퓨터에서 쓰이는 제일 작은 단위로 0과 1만 나타낼 수 있습니다. 우리가 일반적으로 사용하는 십진수로 치면 0에서 9까지 표현할 수 있는 ‘한 자리’라고 보시면 되겠습니다.

  • 2 bit: 00, 01, 10, 11 4가지 표현 가능
  • 3 bit: 000, 001, 010, 011, 100, 101, 110, 111 8가지 표현 가능

이런 식으로 n-bit는 2n가지의 수를 표현할 수 있습니다.

8-bit를 1-byte라고 표현합니다. 그러면 왜 하필 8-bit가 byte가 된 걸까요?? 그건 ASCII 코드가 8자리의 bit로 표현되기 때문입니다. 컴퓨터는 일반적인 문자를 인식할 수 없어서 ASCII(American Standard Code for Information Interchange)라는 인코딩 룰을 만들었습니다.

ASCII table
ASCII table

이진법 표현식을 보면 다 8자리로 되어있죠?? 그래서 8-bit를 byte로 묶어 표현하는 겁니다.

16진수

ASCII table을 보면 16진수라고 표시된 부분이 있습니다. 16진수를 Hexadecimal, 또는 Hex라고 하는데 컴퓨터 관련 분야에서 정~~~말 많이 사용하는 방식입니다. 왜 16진수를 사용할까요?? 그건 2진수의 가독성을 높이기 위함입니다.

문자 LOVE를 ASCII로 변환해볼까요?? 

01001100(L)

01001111(O)

01010110(V)

01000101(E)

이 32-bit(4-byte)의 수를 한줄로 쓰면

01001100 01001111 01010110 01000101이 됩니다. 전혀 못 알아보겠죠?? 16(24)진수는 4 자리씩 끊어서 읽을 수 있게 해 줍니다. 그리고 2진법을 16진법으로 바꾸면 돼요!

L: 0100 1100 = 4C (16진법)

O: 0100 1111 = 4F

V: 0101 0110 = 56

E: 0100 0101 = 45

그리고 16진법으로 표현할 때는 숫자 앞에 0x를 붙여 이 수가 16진수임을 나타내면 됩니다. 정리하자면 16진법은 2진법의 가독성을 높이기 위한 방법이며 그 예시로 LOVE를 표현하면

01001100 01001111 01010110 01000101(2) = 0x4C4F5645가 되는 겁니다.

bit shift 사용법

비트 shift는 비트를 왼쪽()으로 이동할 수 있게 해줍니다.

bit shift 이해
bit shift 이해

위 그림은 0x17을 왼쪽 shift, 오른쪽 shift를 실행한 결과입니다. 이해가 되시나요??

또한 bit shift는 곱셈, 나눗셈을 의미하기도 합니다.

n bit left shift: 2n 곱하기

n bit rifht shift: 2n 나누기

위의 그림의 예시를 볼까요?? 23을 1 left shift를 하면 101110(2) = 46이 되고 1 right shift를 하면 1011(2) = 11이 됩니다. 그럼 예시 코드로 확인해봅시다.

result = 0x17
result = result << 2
print("result = 0x%x" % result)
result |= 0x1 << 1
print("result = 0x%x" % result)
Result
Result

if 문 활용법

if 문은 Python만 아니라 여러 프로그래밍 언어에서도 활용하는 매우 유용하고 중요한 함수입니다. 그러면 어떻게 if 문을 활용하는지 예시를 통해 익혀봅시다.

알고리즘 설계

우선 프로그램을 만들려면 어떻게 해야 할까요?? 먼저 알고리즘을 짜야 합니다. 알고리즘은 특정 업무를 위한 절차나 명령어의 집합을 의미합니다.

예를 들어 1~100까지의 숫자를 input으로 받고, 이 중에서 20에서 29 사이의 숫자가 입력될 때 “참”을 출력하는 프로그램을 작성한다고 해봅시다. 그러면 이 프로그램이 수행되려면

“숫자를 입력받고 > 범위 안에 있는지 비교하고 > “참”을 출력할지 말지를 정한다”

위와 같은 순서의 절차가 계속 반복되어야 합니다. 이러한 절차의 집합이 알고리즘이고 이 알고리즘을 Python 같은 언어를 이용하여 프로그램으로 만드는 과정이 코딩인 겁니다.

if 문 활용 예시 1

먼저 아래 코드를 실행해 봅시다.

a = int(input("비교할 숫자를 입력하시오:"))

if a<50 :
    print("a는 50보다 작다")

Python에서 if는 괄호나 {}가 필요하지 않고 조건 뒤에 :를 붙여주면 됩니다. 코드를 실행하고 13을 입력하면 다음과 같은 결과가 나오네요.

Result
Python Result

아래의 코드로 수정해서 실행해 볼까요??

a = int(input("비교할 숫자를 입력하시오:"))

if a<50 :
    print("a는 50보다 작다")
print("testing")

5번째 줄에 있는 print는 들여쓰기하지 않고 작성했습니다. 이럴 경우 if 조건에 상관없이 명령어가 실행됩니다. 한번 50보다 큰 숫자를 입력해 보겠습니다.

Result
Python Result

확실히 testing은 if 조건이 참이 아니어도 실행됨을 알 수 있습니다. 그렇다면 거짓일 경우의 명령은 어떻게 실행할 수 있을까요? else를 통해 if 문에 설정한 조건이 거짓일 경우 실행할 명령을 설정할 수 있습니다. 아래의 수정된 코드를 실행해 봅시다.

a = int(input("비교할 숫자를 입력하시오:"))

if a<50 :
    print("a는 50보다 작다")
else :
    print("a는 50보다 크다")
print("testing")
Result
Python Result

if / else를 통해 조건이 참 또는 거짓일 때 원하는 명령을 수행할 수 있게 만들었습니다.

if 문 활용 예시 2

그렇다면 조건이 여러 가지 경우일 때는 어떻게 할까요?? if 안에 if 문을 사용할 수 있습니다. 맨 처음에 20~29 사이의 숫자가 입력되면 “참”을 출력하는 프로그램 예시를 통해 알아보겠습니다. 먼저 알고리즘을 순서도로 나타내볼까요?

글 설명 이미지, 알고리즘 순서도
알고리즘 순서도

그럼, 위의 순서도대로 코드를 작성해 봅시다.

a = int(input("비교할 숫자를 입력하시오:"))

if a>=20 :
    if a<=29 :
        print("True")
    else :
        print("False")
else :
    print("False")
Result
Python Result

20~29의 숫자를 입력할 때만 True를 출력하는 프로그램을 완성했습니다.

for 문 활용법

for 문을 활용하면 횟수를 지정하여 원하는 명령을 반복할 수 있습니다. 기본 문법은 다음과 같습니다.

for i in range(시작,, 증가 수) :

예시를 볼까요?

for i in range(0,4,1) :
    print("testing")
print("")
for i in range(1,4,1) :
    print("testing2")
print("")
for i in range(0,4,2) :
    print("testing3")
print("")
Result
Python Result

그리고 굳이 시작과 증가 수를 입력하지 않아도 됩니다. 이럴 경우 시작은 0, 증가는 1로 고정입니다.

for i in range(4) :
    print("testing")
Python Result
Python Result

그리고 for문을 위해 i를 썼는데요, 이를 활용할 수 있습니다.

for i in range(4) :
    print(4+i)
Python Result
Python Result

while 문 활용법

while은 조건을 설정하고 그 조건이 참일 동안 명령어를 계속 수행합니다.

i = 시작
while i <:
    명령어
    i = i + 증가 수

그러면 위의 for 문 예시를 while로 수정해 볼까요?

i = 0
while i < 4 :
    print("testing")
    i = i + 1
Result
Result

while 문을 사용하여 무한 루프에 빠질 수도 있습니다.

while True :
    print("testing")

이러면 testing이 끝나지 않고 계속 출력되는데요, ctrl + c를 눌러 중간에 끊을 수 있습니다. 그러면 어떻게 중간에 멈출 수 있을까요?

break 설명

break를 사용하면 for 문이든, while 문이든 반복문을 종료하고 다음 명령어로 이동하게 됩니다. 그러면 코드를 살짝 수정해 볼까요?

i = 0
while True :
    print("testing")
    i = i + 1
    if i == 4 :
        break

이렇게 코드를 수정하면 “testing”이 4번만 출력되고 while 문이 종료됩니다.

continue 설명

continue를 활용하여 반복문에서 특정 조건일 때 명령어를 수행하지 않고 넘어갈 수 있습니다. 아래 코드를 실행해 봅시다.

i = 0
while True :
    i = i + 1
    if i % 2 == 0 :
        continue
    else :
        if i == 15 :
            break
    print("testing %d" % i)

그러면 i가 2의 배수일 때 명령어가 수행되지 않고, 명령을 15번 반복하고 끝납니다.

Result
Result

References: ASCII table

Similar Posts