print()

Printing a value(값)

1
2
3
4
>>> print (3)
3
>>> print (3.14)
3.14


Printing a expression

print() 함수가 출력하는 값은 연산의 결과값

1
2
>>> print (3+3.14)
6.140000000..001

ㅇㅅㅇ..? 뒤에 001 저거 왜 붙는 것..? 컴퓨터는 소수점을 표현하는데 한계가 있을 수 밖에 없음! 콤퓨타의 2진수 체계를 닝겐의 10진수 체계와 똑디일거라고 생각하지 말쟈! 콤퓨타가 연산의 결과를 표현할 수 있는 가장 근접한 것을 출력해줌


Printing a string

1
2
>>> print ("Hello Elmo")
Hello Elmo


Printing a number String

문자열은 숫자를 담고 있을 수 있다.

1
2
>>> print ("3.14")
3.14


String add

문자열로 된 숫자의 연산은 어떨까?

1
2
>>> print ("3" + "3.14")
33.14

내가 Hi라고 쓰고 there 라고 쓰고 싶어랑 같은 원리로

1
2
>>> print ("Hi, " + "there!")
Hi, there!

3을 쓰고 그 뒤에 이어서 3.14를 쓰고 싶은 상황이라 결과값이 33.14로 나오는 것

==> 값이 어떤 type이냐에 따라 연산의 결과가 달라진다!

1
2
3
4
>>> x = 3
>>> y = 4
>>> print (x+y)
7
1
2
3
4
>>> x = "3"
>>> y = "4"
>>> print (x+y)
34


Values and types

type()

타입을 확인하는 방법은 type 함수를 사용하는 것

1
2
3
4
5
6
7
8
9
10
11
12
13
>>> x=3
>>> type(x)
int

>>> x="3"
>>> type(x)
str

>>> type(3.14)
float

>>> type([1, 2])
list


Type conversion

1
2
3
4
>>> print (3)
3
>>> print (float(3))
3.0

“float”? floating point number : 소수점 위치가 고정되어있지 않고 떠다니는 듯(floating) 하다 해서 붙여진 이름

Python data types

  • int
  • float
  • complex : 복소수
  • str
  • bytes
  • tuple : 좌표같은 (x,y), (x,y,z), (x,y,z,w) list (But x하나, y하나씩은 수정이 불가능! (x,y)로 정의되었다면 (x,y) 자체를 수정해야함)
  • list : [1,2,3,1] -> [1,2,3,1]
  • set : {1,2,3,1} -> {1,2,3}

int

1
2
3
4
5
6
7
8
9
10
>>> type(3)
int
>>> type(3+4)
int
>>> type(3-4)
int
>>> type(3*4)
int
>>> type(3/4)
float


float

1
2
3
>>> import math
>>> math.sqrt(2)
1.4142135623730951

// 루트2에 아주 가까운 유리수 일 뿐 정확한 값은 아님

1
2
3
4
5
6
7
>>> type(math.sqrt(2))
float

>>> import math
>>> x = math.sqrt(2)
>>> x*x
2.0000000000000004

앞에서도 말했지만 값이 정확하게 저장되는 것이 아니라 컴퓨터가 표현할 수 있는 정도로만 비슷하게 저장되기 때문에 연산이 정확하지 않음

complex (복소수)

1
j² = -1

complex를 사용하기 위해 j를 사용함 i는 index로 사용하는 경우가 많기때문

1
2
>>> 1j * 1j
(-1+0j)


str

문자열 변수

1
2
>>> 'hello'+'world'
'helloworld'


bytes

bytes is used to store byte values, each of which is 8 bits bytes는 문자열과 비슷하지만 문자열 앞뒤로 b’ ‘를 붙여 입력하고, 8비트 체계 내에서 표현 가능해야함

1
2
>>> b'abc'
b'abc'

영문자는 0~255 사이이기때문에 표현 가능

1
2
>>>b'한글'
SyntaxError: bytes can only contain ASCII literal characters.

한글은 앙대

list

list는 여러 값의 모임

1
2
3
4
5
6
7
8
9
10
11
12
>>> x = [3,4]
>>> x[0]
3
>>> x[1]
4
>>> x[2]
IndexError: list index out of range
>>> x[0] = 5
>>> x[0]
5
>>> x
[5,4]

list는 값 변경이 가능

tuple

tuple은 여러 값으로 이루어진 하나의 값

1
2
3
4
5
>>> x = (3,4)
>>> x[0]
3
>>> x[1]
4

x(0) 로 묻지 않는 이유? 함수랑 헷갈려성

1
2
3
4
5
6
7
>>> x[0] = 5
TypeError: 'tuple' object does not support item assignment

>>> x = (3,4)
>>> x = (5,4)
>>> print (x)
(5,4)

tuple은 단독적인 값 변경이 불가능

set

set으로의 타입 변환 (중복을 없애줌)

파이썬에서는 모임 데이터를 set으로 변경할 수 있음

1
2
3
4
5
6
>>> set('abb')
{'b', 'a'}
>>> set((3,4))
{3,4}
>>> set((3,4,3))
{3,4}


Type Specific Operations

real part, imaginary part

1
2
3
4
5
>>> x = (3+2j)
>>> x.real
3
>>> x.imag
2


Variables (변수)

1
2
x = 3
y = 4

특정 이름에도 가능할까?

1
2
>>> if = 3
SyntaxError: invalid syntax

놉 예약어는 변수 이름으로 사용할 수 없다

두 변수의 값을 서로 바꾸는 방법

1
2
3
4
5
6
>>> x=3
>>> y=4
>>> x=y
>>> y=x
>>> print ([x,y])
[4,4]

이상하네..? [4,3]이 안되네?

| x | y |    | x | y |    | x | y |
--------- -> --------- -> ---------
| 3 | 4 |    | 4 | 4 |    | 4 | 4 |
          x=y          y=x

이렇게 되었기 때문…!

제대로 하려면

| x | y | ? |    | x | y | ? |    | x | y | ? |    | x | y | ? |
------------- -> ------------- -> ------------- -> -------------
| 3 | 4 | 3 |    | 3 | 4 | 3 |    | 4 | 4 | 3 |    | 4 | 3 | 3 |
             ?=x               x=y             y=?

tmp 하나 만들어서 이리저리 휙휙해야하는데…

근데 파이썬은 이런거 안하고 가능하다능

1
>>> (x,y) = (y,x)

넘나 간단한것

Type conversions

1
2
>>> print(3 + float(4))
7.0

float type

1
2
>>> print(str(3) + str(4))
34

str type

int Operations

1
2
3
4
3*4 -> 12 int type
3/4 -> 0.75 float type
3%4 -> 3 int type (MODULE 연산)
3 // 4 -> 0 int type (나누기의 몫을 취하는 연산)


float Operations

1
2
3
4
3.0 * 4 -> 12.0 float type
3.0 / 4 -> 0.75 float type
3.0 % 4 -> 3.0 float type
3.0 // 4 -> 0.0 float type


str Operations

1
2
3
4
'hello' + 'world' -> str
'hello' - 'world' -> Error
'hello' * 'world' -> Error
'hello' / 'world' -> Error


Conversion

1
2
3
4
5
6
7
8
9
int(3) -> 3 int type
int(3.14) -> 3 int type
int(3.9) -> 3 int type
int(-3.9) -> -3 int type
int('3') -> 3 int tpye
int('3.14') -> ValueError: invalid literal for int() with base 10: '3.14'
float('3.14') -> 3.14 float type
int(float(3.14)) -> 3 int type
str(3) -> '3' str type


complex type

1
2
>>> -1+0j + 3
(2+0j)

더할 수 있는 -1과 3은 더해서 2가 되었지만 허수는 허수대로 남아서 complex type

why knowing type is important while using set

1
2
>>> {1,1}
{1, 1}

int 1과 str 1은 서로 다르기 때문에 중복이 없고, 그 어느것도 set이 되기위해 제거되지 않음

1
2
>>> {1,1.0}
{1.0}

int를 float로 변환해서 비교하기때문에 float형이 남음 (float를 int로 변환해서 비교하면 자료의 손실이 크게 발생할 수 있으므로!)

Wrap-up

  • 파이썬을 잘 쓰기 위해서는 파이썬이 가진 type들을 알고있어야함 오늘은 기초적인 타입을 배워봄 class를 배우기 위해서 타입을 먼저 잘 알고 있어야함

  • type은 type에 따른 연산을 정의함 같은 + 연산이어도 type에 따라 int, float, str등등 다르게 처리됨

  • type은 변환이 가능함 BUT 우리가 예상하는 것과 조금 다르게 처리될 수 있으니 주의!