3. 연산자

 

3.1 산술 연산자


연산자

설명

+

덧셈

-

뺄셈

*

곱셈

**

거듭제곱

/

나눗셈

//

나눗셈의

%

나눗셈의 나머지

 

 

+ (덧셈)


숫자와 문자 구분 없이 두개의 객체를 더합니다.

>>> # (+) 덧셈

... # 숫자

... 10 + 20

30

>>> # 문자

... 'abcd' + 'efgh'

'abcdefgh'

 

 

 

- (뺄셈)


숫자에서 숫자를 뺍니다.

>>>  # - (뺄셈)

... 10 - 5

5

>>> 20.7 - 10.2

10.5

 

* (곱셈)


두 숫자를 곱하기 연상을 하고 문자인 경우 숫자만큼 반복 합니다.

>>> # * (곱셈)

... 2 * 3

6

>>> 'abc ' * 3

'abc abc abc '

 

 

** (거듭제곱)


숫자에 지수연산을 합니다.

>>> # ** (거듭제곱)

... 3 ** 3

27

>>> 3 * 3 * 3

27

 

/ (나눗셈)


두 수를 나눕니다정수로 표현 하려면 정수변환을 해야 합니다.

>>>  # / (나눗셈)

... 13 / 3

4.333333333333333

>>> 13.0 / 3

4.333333333333333

>>> a = 13/3

>>> print(a)

4.333333333333333

>>> print(int(a))

4

 

// (나눗셈의 몫)


나눗셈의 몫을 구하는 식을 사용 하는 경우 양의 수에만 사용하여야 합니다음의 수의 경우 원하는 결과와 다른 값을 얻을 수 있습니다그 이유는 몫을 구할 때 좌측에 가까운 정수를 가져오기 때문입니다.

>>> # (//) 나눗셈의 몫

... 13 // 3

4

>>> 13.0 // 3

4.0

>>> -13 // 3

-5

>>> -13.0 // 3

-5.0

>>> divmod(-13, 3)

(-5, 2)

>>> divmod(13, 3)

(4, 1)

>>> abs(-13.0) // 3

4.0

 

0을 기준으로 보았을 때 양의 수는 우측으로 커지고 4.3333의 좌측에 있는 정수는 4입니다.

0을 기준으로 보았을 때 음의 수는 좌측으로 커지고 -4.3333의 좌측에 있는 정수는 -5입니다.

목과 나머지를 구하는 이유는 몇번 나눌 수 있는가, 몇이 남는가 이기 때문에 절대값으로 계산을 하는게 정답입니다.

 

% (나머지)


나눗셈의 나머지 값을 구합니다.

>>> # % (나머지)

... 13 % 3

1

>>> 13.0 % 3

1.0

>>> abs(-13.0) % 3

1.0

 

python study

 


3.2 비교 연산자


True () 또는 False (거짓)의 반환 값을 구하는 연산자로 첫 글자는 대문자 입니다.

연산자

설명

작음

<=

작거나 같음

>=

크거나 같음

<> 

 

==

같음

!=

같지 않음

 

< (작음)


(x < y) : x y보다 작은지 여부를 반환합니다.

>>> # < (작음)

... 5 < 7

True

>>> 7 < 5

False

>>> 'a' < 'b'

True

>>> 'azzz' < 'b'

True

>>> 'b' < 'azzzz'

False

>>> 'b' < 'A'

False

>>> 'a' < 'Z'

False

>>> 'z' < 'A'

False

>>> 'a' < 'A'

False

>>> 'A' < 'a'

True

 

다음과 같이 여러 숫자와 문자에 대해 한꺼번에 비교 연산을 수행할 수 있습니다. 숫자와 문자 비교는 오류가 발생 합니다.

>>> 2 < 3 < 4 < 5

True

>>> 2 < 4 < 3 < 5

False

>>> 'A' < 'b' < 'C'

False

>>> 'A' < 'C' < 'b'

True

 

> ()


(x < y) : x y보다 작은지 여부를 반환합니다.

>>> # > ()

... 5 > 7

False

>>> 7 > 5

True

>>> 'a' > 'b'

False

>>> 'azzz' > 'b'

False

>>> 'b' > 'A'

True

>>> 'a' > 'Z'

True

>>> 'a' > 'A'

True

 

여러개 비교

>>> 5 > 4 > 3 > 2

True

>>> 'c' > 'b' > 'a'

True

>>> 'a' > 'Z' > 'A'

True

 

<= (작거나 같음)


(x <= y) : x y 보다 작거나 같은지 여부를 반환합니다.

<= 기호를 띄어쓰기 하면 오류가 발생 합니다.

>>> # <= (작거나 같음)

... x = 10

>>> y = 20

>>> x < = y

  File "<stdin>", line 1

    x < = y

        ^

SyntaxError: invalid syntax

>>> x <= y

True

 

>= (크거나 같음)


(x >= y) : x y 보다 크거나 같은지 여부를 반환합니다.

>>> # >= (크거나 같음)

... x = 10

>>> y = 20

>>> x >= y

False

>>> x = 'b'

>>> y = 'a'

>>> x >= y

True

 

== (같음)


(x == y) : x, y 두 객체가 같은지 여부를 반환합니다.

>>> # == (같음)

... x = 10

>>> y = 10

>>> x == y

True

>>> x = 'a'

>>> y = 'b'

>>> x == y

False

>>> x = 'aaa'

>>> y = 'aAa'

>>> x == y

False

 

!= (같지 않음)


(x != y) : x, y 두 객체가 같지 않은지 여부를 반환합니다.

>>> # != (같지 않음)

... x = 'aaa'

>>> y = 'aAa'

>>> x != y

True

>>> x = 10

>>> y = 100

>>> x != y

True

 

 

3.3 부울 연산자


연산자

수식

결과

and

True and True

True

True and False

False

False and False

False

or

True or True

True

True or False

True

False or False

False

not

not True

False

not False

True

 

and


(x and y) : xy가 모두 True인 경우에만 True 이고 둘중 하나 또는 둘다 False이면 False를 반환 합니다.

>>> # and

... True and True

True

>>> (3 == 3) and (7 ==7)

True

>>> True and False

False

>>> (3 == 3) and (7 == 8)

False

>>> False and False

False

>>> (3 == 4) and (7 == 8)

False

 

or


(x and y) : xy가 모두 False인 경우에만 False이고 둘 또는 하나만 True이어도 True를 반환합니다.

>>> # or

... True or True

True

>>> (3 == 3) or (7 == 7)

True

>>> True or False

True

>>> (3 == 3) or (7 == 8)

True

>>> False or False

False

>>> (3 == 4) or (7 == 8)

False

 

not


x True 이면 반대 값인 False 를 반환하고 x False 이면 반대 값인 True를 반환합니다.

>>> # not

... not True

False

>>> not (3 == 3)

False

>>> not False

True

>>> not (7 == 8)

True

 


3.4 비트 연산자

 

연산자

설명

<< 

왼쪽 시프트 연산자, 변수 값을 지정된 비트 만큼 좌측 이동

>> 

오른쪽 시프트 연산자, 변수 값을 지정된 비트 만큼 우측 이동

&

AND 연산자, 둘다 참인 경우 True

|

OR 연산자, 둘중 하나만 참이어도 True

^

XOR 연산자, 둘중 하나만 참이어야 True

~

반전 연산자, 참이면 False, 거짓이면 True

 

<< (왼쪽 시프트)


지정된 숫자에 대해 지정된 비트 수 만큼 왼쪽으로 시프트 연산을 진행 합니다비트가 상위로 올라가며 숫자가 커집니다.

5 << 2 : 5(0000 0101)2비트 좌측으로 이동하여 20(0001 0100)이 됩니다.

2 << 3 : 2(0010)를 왼쪽으로 3비트 시프트 하여 16(0001 0000)이 됩니다.

>>> # << (왼쪽 시프트)

... 5 << 2

20

>>> 2 << 3

16

 

>> (오른쪽 시프트)


지정된 숫자에 대해 지정된 비트 수 만큼 오른쪽으로 시프트 연산을 진행 합니다비트가 우측으로 이동 하면서 첫째 자리를 넘어가는 비트는 삭제가 되어 숫자가 작아집니다.

5 >> 2 : 5(0101)2비트 우측으로 이동하여 1(0001)이 됩니다.

54 >> 3 : 54(0011 0101)을 오른쪽으로 3비트 시프트 연산하여 6(0110)이 됩니다.

>>> # >> (오른쪽 시프트)

... 5 >> 2

1

>>> 54 >> 3

6

 

& (비트 AND 연산자)


(x & y) : x y에 대하여 각각의 자리수에 있는 비트에 대해 AND 연산을 진행 합니다각 자리수별 비트 값이 1인 경우에만 1이 되고 나머지는 0으로 처리합니다.

(1101) 13 &

(1010) 10

(1000) 8을 반환합니다. 1310의 자리수 별 비트 값이 모두 1인 부분만 제외하고 0이 됩니다.

>>> # & (비트 AND 연산자)

... 13 & 10

8

 

 

| (비트 OR 연산자)


(x & y) : x y에 대하여 각각의 자리수에 있는 비트에 대해 OR 연산을 진행 합니다각 자리수별 비트 값이 0인 경우에만 0이 되고 나머지는 1으로 처리합니다.

(1101) 13 |

(1010) 10

(1111) 15를 반환합니다. 1310의 자리수 별 비트 값이 하나라도 1이면 1로 됩니다.

>>> # | (비트 OR 연산자)

... 13 | 10

15

 

 

^ (비트 XOR 연산자)


(x & y) : x y에 대하여 각각의 자리수에 있는 비트에 대해 XOR 연산을 진행 합니다각 자리수 별 비트 값이 하나만 1인 경우에 1이 되고 나머지는 0으로 처리합니다.

 

(1101) 13 ^

(1010) 10

(0111) 7을 반환합니다. 1310의 자리수 별 비트 값중 하나만 1이면 1로 됩니다.

>>> # ^ (비트 XOR 연산자)

>>> 13 ^ 10

7

 

 

~ (비트 반전 연산자)


진정수에 사용하고 –( x + 1)으로 정의 된다고 Python document에 나와 있습니다.

The bitwise inversion of x is defined as -(x+1). It only applies to integral numbers.

보이는 숫자만 보면 안되고 데이터를 처리하는 단위(32, 64bit)로 나머지도 변경이 됩니다.

(1101) 13

000000000000000000000000000000000000000000000000000000000000(1101) 13

111111111111111111111111111111111111111111111111111111111111(0010) -14

 

>>> # ~ (비트 반전 연산자)

... ~13

-14

 

- copy coding - 

 

2. 데이터 형, 변수

 

2.1 숫자형

 

2.1.1 Integer


Python에서 int 일반적으로 알고 있는 정수로 사용되지 않습니다.  int란 소숫점 이하의 값이 없음을 말하는 것이 아니라 소숫점 자체가 존재 하지 않는 뜻 입니다또한 파이썬에는 long형의 자료형이 존재 하지 않고 int로 값을 표현 합니다.

소숫점 이하의 값은 버림을 하고 조건을 int 로 변경할 수 있습니다.

 

print(type(1), type(1000000), type(9999999999999999999999999999999999999999999999), sep='/')
print(int(1), int(30.0), int(-34.5), int(7777777.9999999), sep='/')
print(int(1==1), int(1 < 0), int(True), int(False), sep='/')


 결과

 <class 'int'>/<class 'int'>/<class 'int'>

 1/30/-34/7777777

 1/0/1/0

 <class 'float'>/<class 'float'>/<class 'float'>/<class 'float'>/<class 'float'>


python study


2.1.2 Float


Python에서 float는 숫자에 소숫점이 존재 하는 경우를 말하며 소숫점 이하에 값이 있고 없고는 관계 없습니다.

int 형 값은 float형으로 변환 하고 조건 값도 float 형으로 변환 합니다.


print(type(3333.3333), type(0.0), type(2e-10), type(3.0), type(4.), sep='/')
print(float(1), float(30), float(-34), float(7777777), sep='/')
print(float(1==1), float(1 < 0), float(True), float(False), sep='/')


 결과

 <class 'float'>/<class 'float'>/<class 'float'>/<class 'float'>/<class 'float'>

 1.0/30.0/-34.0/7777777.0

 1.0/0.0/1.0/0.0

 

2.2 문자, 문자열(str)

 

파이썬에서 문자는 str로 정의 합니다.

 

print(type('a'), type('I am a boy!'), type('-34.5'), type('7777777.9999999'), sep='/')


 결과

 <class 'str'>/<class 'str'>/<class 'str'>/<class 'str'>

 

2.2.1 작은 따옴표


문자열을 작은 따옴표로 묶어서 표현합니다.


txt1 = '문자열을 작은 따옴표로 묶었습니다.'
print(txt1)
print('문자열을 작은 따옴표로 묶었습니다.')


 결과 

 문자열을 작은 따옴표로 묶었습니다.

 문자열을 작은 따옴표로 묶었습니다.

 

2.2.2 큰 따옴표


작은 따옴표와 동일하게 사용됩니다.

작은 따옴표도 포함해서 사용이 가능 합니다.


txt2 = "문자열 큰따옴표 안에  '작은' 따옴표가 있습니다."
print(txt2)
print("문자열 큰따옴표 안에  '작은' 따옴표가 있습니다."


 결과 

 문자열 큰따옴표 안에  '작은따옴표가 있습니다.

 문자열 큰따옴표 안에  '작은따옴표가 있습니다.


2.2.3 따옴표 세게 (“”” 또는 ‘’’)


긴 주석이 필요한 경우에 사용 합니다.

따옴표 세개로 묶은 문자열 안에서는 작은 따옴표와 큰 따옴표를 마음대로 사용할 수 있습니다.


"""
시작과 끝을 따옴표로 마크하여 아무 글이나 편안하게 써도 됩니다.
Its fine.
▒◀◁◆◈◎★☎☜〈》』】〔
ぁぇぉきけこさとずねづサシセラャヮ
★㎱㎳㎪薙蕞햰ÚÅöåⓙⓖが♧♥♣☎ボ㈅ㆃㆃ
"""

 

2.2.4 문자열 Format


format을 사용하여 문자열의 일부를 상황에 따라 다른 문자로 대체할 수 있습니다.

개인별 맞춤 메일, 공지, 안내, 경고 등에 사용 할 수 있습니다.

 

user_name = "홍길동"
user_name2 = "강감찬"
count = 10

print('{}회원님은 {}번째 로그인 하셨습니다.'.format(user_name, count))
print('{2}회원님은 {1}번째 로그인 하셨습니다'.format(user_name, count, user_name2))

 

 결과 

 홍길동회원님은 10번째 로그인 하셨습니다.

 강감찬회원님은 10번째 로그인 하셨습니다

 

2.2.5 특수 문자


특수 문자는 역슬래시(\)를 사용해서 입력 가능 합니다.

- 작은 따옴표, 큰 따옴표 하나를 입력 하는 경우 : \’, \”

- 역슬래시를 하나 입력하는 경우 : \\

- (tab)을 입력 하는 경우 : 시작\t

- 줄바꿈 하는 경우: \n (이 문장을 출력 하고\n다음줄에 이 문장이 나옵니다.)

- 문장 또는 명령어가 길 경우 이어 쓰기를 위해 끝에 추가 합니다   

print('- 작은 따옴표, 큰 따옴표 하나를 입력 하는 경우 : \', \"')
print('- 역슬래시를 하나 입력하는 경우 : \\')
print('- (tab)을 입력 하는 경우 : 시작\t')
print('- 줄바꿈 하는 경우: \n (이 문장을 출력 하고\n다음줄에 이 문장이 나옵니다.)')
txt3 =
'이 문장은 끝난게 아니고 \
여기 이 문장까지가 끝입니다.'
print(txt3)
sum1 =
3 + 3 \
       +
4 + 4
print(sum1)
txt4 =
'aaaaaaaaaaaaaaaaaaaaaaaaaaaaa' \
     
'bbbbbbbbbbbbbbbbbbbbbbbbbbbbb'
print(txt4)

 결과 

 작은 따옴표큰 따옴표 하나를 입력 하는 경우 : ', "

 - 역슬래시를 하나 입력하는 경우 : \

 - (tab)을 입력 하는 경우 : 시작  

 - 줄바꿈 하는 경우:

 (이 문장을 출력 하고

 다음줄에 이 문장이 나옵니다.)

 이 문장은 끝난게 아니고 여기 이 문장까지가 끝입니다.

 14

 aaaaaaaaaaaaaaaaaaaaaaaaaaaaabbbbbbbbbbbbbbbbbbbbbbbbbbbbb

 

 

2.3 변수

 

프로그램 중간에 값을 담아둘 수 있는 공간을 위한 변수를 만들 수 있습니다.

변수의 생성 규칙은

- 알파벳 대소문자, 대소문자를 사용 할 수 있으며 대소문자가 구분됩니다.

- 숫자(0~9)를 사용할 수 있습니다.

- 밑줄(_)문자를 사용할 수 있습니다.

- 변수의 시작 첫 문자는 알파벳이나 밑줄로 시작하며 숫자는 오류 발생합니다.

 

 aValue7 = 30
 AValue7 = 60
 _AValue7 = 90
 print(aValue7, AValue7, _AValue7, sep=',')


 결과

 30,60,90

 

 7AValue = 120

 

 결과 

 7AValue = 120

          ^

 SyntaxError: invalid syntax


- copy coding -


Python을 학습하기 위해 파이썬을 꼭 설치할 필요는 없습니다. 파이썬 사이트에서는 online console을 제공하여 웹브라우저에서 테스트가 가능합니다몇일전 ‘Python 기초학습 1’을 올리려고 할때 이 기능이 없어져서 삭제한줄 알았는데 오늘은 또 나타났습니다아마 버전업을 했거나 내부 작업이 있었던듯 하네요다시 수정해서 올리는데 또 사라지면 내가 거짓말쟁이가 되는데...


python_online_console

사용법은 노란색 네모 버튼을 클릭 하면 잠시후 콘솔 창으로 변합니다그럼 그곳에서 코딩을 하거나 다른곳에서 코딩하고 복사를 해도 됩니다.


python_online_console


python study

 

1. 기초


1.1 주석


- # 이후의 문장

- 예외 : 문자 인코딩

# 문자로 시작되는 문장은 주석으로 인식 합니다.

위치는 관계 없고 # 이후의 문장은 모두 주석으로 인식 됩니다.

a = 1
b = 2
c = a + b  # a 더하기 b의 값을 c에 저장 합니다.
#
여기에 기입된 문자는 주석 입니다.
print(c)


 결과

 3

 

 

1.2 인코딩


#으로 시작 되어도 프로그램 상단에 있는 인코딩은 주석이 아닙니다.

#-*- coding: utf-8 -*-

 

#-*- coding: euc-kr -*-

 

1.3 세미 콜론(;)


명령 행의 끝을 나타내기 위해 세미 콜론(;)을 사용하거나 하지 않거나 동일한 결과가 나옵니다.

print ('use semicolon test')
print ('use semicolon test');

 결과 

 use semicolon test

 use semicolon test

 

위의 명령은 동일한 결과가 나오지만 세미콜론 사용은 권장하지 않습니다.

세미 콜론을 이용하여 두개의 명령어를 연결해서 작업할 수도 있지만 이것도 권장하지 않습니다.

 

cnt = 10; print (cnt)

 결과 

 10


한 줄에 하나의 명령만 사용하길 권장하고 모두 그렇게 사용 하고 있어 세미콜론이 들어가면 다른 개발자에게 오히려 혼란을 줄 수 있습니다.

 

1.4 print


- print 명령으로 출력을 하면 자동 줄바꿈 됩니다.

print('문자 출력 테스트 하기')
print('문자 출력 ')
print('테스트 하기')

 결과 

 문자 출력 테스트 하기

 문자 출력

 테스트 하기


 

- 숫자, Boolean 등도 출력이 가능 합니다.


print(3, 3.333, 0.33333, 2e10, 2e-7)
print(3 + 2, 3.7 * 4, 3 < 4, False, True, 1 == 0)


 결과 

 3 3.333 0.33333 20000000000.0 2e-07

 5 14.8 True False True False

 

- 출력에 구분자를 넣어서 출력이 가능 합니다.

 

print(3, 3.333, 0.33333, 2e10, 2e-7, sep=',')
print(3 + 2, 3.7 * 4, 3 < 4, False, True, 1 == 0, sep='/')


 결과 

 3,3.333,0.33333,20000000000.0,2e-07

 5/14.8/True/False/True/False


문장의 끝을 변경 할 수 있습니다.

 

print('문자 출력 ', end='')
print('테스트 하기')

print('문자 출력 ', end=' 여기에 ')
print('테스트 하기')


 결과

 문자 출력 테스트 하기

 문자 출력  여기에 테스트 하기

 

1.5 들여쓰기


한줄로 명령이 종료되는 경우 다음 줄에 들여쓰기를 하면 오류가 발생 합니다.

조건문, 반복문 같이 다음에 명령이 종속되는 경우만 들여쓰기를 사용 합니다.


if(1==1):
   
print('1 = 1')
else:
   
print('! != 1')


 결과 

 1 = 1


- copy coding -


Tensorflow를 테스트하기 위해 개발환경을 구성해 봅니다.

 

작업 순서는 다음과 같습니다.

 

1. 아나콘다 설치

- conda, pip 업데이트

- msgpack 설치

2. 프로젝트 생성

- conda create -n tensorflow pip python=3.6

3. 프로젝트 실행

- conda activate tensorflow

4. 텐서플로우 설치

- CPU 버전

pip install --ignore-installed --upgrade tensorflow

- GPU 버전

pip install --ignore-installed --upgrade tensorflow-gpu

5. 설치 확인




1. 아나콘다 설치

 

Tensorflow 개발에 필요한 툴을 하나씩 설치 해도 되겠지만 모든 환경을 통합해 놓은 아나콘다를 설치해 보도록 합니다.

 

1.1 아나콘다 다운로드 및 설치

 

아나콘다 사이트에 접속하여 설치 파일을 다운로드 받습니다.


https://www.anaconda.com/download/


tensorflow install


현재 윈도우즈용으로 Anaconda 5.3.1 버전은 Python 3.7이포함되어 있습니다.

Anaconda 5.2.0 버전이 Phthon 3.6을 포함하고 있으니 이것을 다운받아 설치 합니다.

설치는 그냥 [Next]만 누르는 수준이라 간단 합니다.

간단히 보려면 아나콘다 설치 과정을 설명한 다음 글을 참고 합니다.


아나콘다 설치 윈도우즈 7, 10 (Anaconda Version 5.2.0) - 2018년12


1.2 아나콘다 업데이트

 

Anaconda Prompt를 이용하여 업데이트를 진행합니다.

시작버튼에서 아나콘다 메뉴를 펼쳐 Anaconda Prompt에 마우스 우측버튼을 클릭하고 관리자 모드로 실행합니다.

 


프롬프트에 다음을 입력하여 conda를 업데이트 합니다.

 

>conda update -n base conda

 




업데이트 대상 리스트를 보여주고 진행 여부를 물어봅니다.

y를 입력하거나 그냥 엔터를 칩니다.(대부분 비슷한 방법으로 설치가 진행됩니다.)



업데이트가 완료 되었습니다.

 

1.3 msgpack 설치

 

>pip install msgpack



1.4 pip 업그레이드


(Windows 10에서의 설치 과정을 하나 가져왔습니다.)


>python -m pip install --upgrade pip




설치가 완료 되었습니다.

msgpack을 설치 하지 않은경우 안내 메시지가 출력 됩니다.

distributed 1.21.8 requires msgpack, which is not installed.

1.3 처럼 설치하면 오류가 나타나지 않습니다.



2. 가상환경 생성


tensorflow란 이름으로 python 3.6 버전을 사용하는 텐서플로우를 위한 신규 가상환경을 생성 합니다.

>conda create -n tensorflow python=3.6






3. 가상환경 활성화


생성된 tensorflow 가상환경을 활성화 합니다.

>conda activate tensorflow



프롬프트가 (base)에서 (tensorflow)로 변경 되었습니다.


 

4. 텐서플로우 설치

 

pip 명령어를 사용해 신규 가상환경에 텐스플로우를 설치 합니다.


- CPU 버전

>pip install --ignore-installed --upgrade tensorflow





5. 설치 확인


python으로 설치를 확인 합니다.



그러나 실행은 되는데 오류가 있습니다.

 

Your CPU supports instructions that this TensorFlow binary was not compiled to use: AVX2

텐서플로우를 소스컴파일 하면 사라진다고 하는데 사용 하는데는 문제가 없다고 하니 당분간 그냥 사용합니다


- copy coding -


12345

+ Recent posts