본문 바로가기
기타 언어/Python

[Python] 기초

by woohyeon 2019. 12. 22.
반응형

■ 변수의 ID 출력 -> id() 함수 사용

example)

a = 100; print(id(a)) # 13800
b = 200; print(id(b)) # 15000
c = 200; print(id(c)) # 15000
d = 100; print(id(d)) # 13800


result)

위 결과와 같이 모든 변수가 고유의 ID(C/C++로 따지면 주소값)를 가지고 있는 것은 아니다.
위 코드에서 a는 100을 가지고 d 또한 100을 가지는데 d는 새로운 ID가 부여된 변수가 아니라 a가 가리키던 객체(100)를 아래와 같이 동일하게 가리키게 된다.

 

위 그림과 같이 같은 값(객체)을 가리키는 변수는 동일한 ID를 갖는다.

 

■ 변수의 타입 
type() 함수로 변수의 타입 확인 가능

example)

a = 3;       print(type(a))
a = 3.5;     print(type(a))
a = "hello"; print(type(a))
a = 'c';     print(type(a))


result)

위와 같이 각 타입의 결과 확인이 가능하며 C/C++과 달리 int, float 자료형이 기본 자료형이 아닌 클래스 타입이다.
또한 문자형인 char 타입이 없고 동일하게 string으로 취급하는 듯 하다.
따라서 문자열을 쌍따옴표가 아닌 따옴표로도 표현 가능하다. 하지만 쌍따옴표가 보기 좋을 듯.

 


■ swap
보통의 경우엔 두 변수를 swap할 시 temp라는 임시 저장 공간을 사용하여 swap 하여야 하지만
파이썬에선 다음과 같이 swap이 가능하다.

a = 10
b = 20
a,b = b,a
print(a,b) # 20 10

 

■ 타입 캐스팅

a = "33"   # string  type
b = int(a) # integer type

a = "33.33"   # string type
b = float(a)  # float  type

a = 431    # int type
b = str(a) # string type

 
■ 연산자

'/' 연산자: 몫과 나머지 그대로 나눗셈을 수행.  ex) 1/4 = 0.25
'//' 연산자: C/C++의 '/' 연산자와 동일               ex) 1//4 = 0
'**' 연산자: a ** b -> a^b을 구한다. (다른 연산자들 보다 우선순위가 높다)  ex) 2**3 = 8
'and', 'or', 'not': 파이썬에선 &&, ||, ! 연산자 대신 사용하는 듯 하다.

■ 조건문

조건문에서 else if 대신 elif라는 예약어를 사용한다.
각 조건문 키워드 if, elif, else 뒤에 switch case문 처럼 ':'을 붙인다. ex) if (statement) :
또한 조건문의 영역을 중괄호로 표시하지 않고 Tab( 띄어쓰기 4칸)으로 표시한다.

■ 난수 생성 및 enum 클래스

난수 생성을 위해 random 라이브러리를 사용해야 한다.
난수와 관련된 함수 실행은 random.함수이름으로 호출하며 random() 함수는 0~1사이의 수를 무작위로 반환하고
randrange(num1, num2) 함수는 [num1, num2) 사이의 무작위 정수를 반환하고
randint(num1, num2) 함수는 [num, num2] 사이의 무작위 정수를 반환한다.

enum 클래스는 enum 라이브러리를 import 해야 사용할 수 있으며
enum클래스 이름의 인자로 각 멤버에 맞는 value를 주면 클래스이름.멤버이름을 반환한다.
즉 Something(1)을 주면 Something.ROCK을 반환하며 Something(value).name을 호출하면 멤버 이름만 반환한다. (ex. ROCK)
Something(value).value를 호출하면 value를 반환한다(ex. 2)

다음은 난수와 enum 클래스, 조건문을 사용하여 컴퓨터와 가위바위보를 하는 예제를 작성해보았다.

import random
import enum

class Something(enum.Enum):
    ROCK = 1
    PAPER = 2
    SCISSORS = 3

# main

your_choice = int(input("rock(1) or paper(2) or scissors(3)?"))

computer_choice = Something(random.randrange(1,4)).value

print("you: ", Something(your_choice).name)
print("computer: ", Something(computer_choice).name)

if(your_choice == computer_choice):
    print("draw");
elif(your_choice == 1):
    if(computer_choice == 2):
        print("you lose");
    else:
        print("you win");
elif(your_choice == 2):
    if(computer_choice == 1):
        print("you win");
    else:
        print("you lose");
else:
    if(computer_choice == 1):
        print("you lose");
    elif(computer_choice == 2):
        print("you win");


result)



■ 함수 정의 방법

함수 정의는 C/C++과 동일하게 함수 헤더와 바디 부분으로 나뉜다.
하지만 python에서는 우선 반환 타입을 지정하지 않고 헤더의 앞 부분에 'def' 라는 키워드를 붙이며 매개 변수를 넣을 시 데이터 타입을 넣지 않는다. 또한 함수의 영역을 중괄호로 표시하지 않으며 헤더의 끝에 ':'를 사용하며 영역은 Tab(4칸)으로 구분한다.
반환할 값이 있다면 그냥 return을 사용하면 되며 반환값이 없다면 return을 생략하면 된다.

다음은 Python과 C/C++의  각 함수 정의 방법이다.

# Python

def add(num1, num2):
    return num1+num2
// C/C++

int add(int num1, int num2)
{
  return num1+num2;
}

 
■ 리스트 (배열)

파이썬에서도 리스트를 사용할 수 있으며 기본 리스트가 다양한 함수를 제공한다.
하나의 리스트에 서로 다른 타입의 데이터를 저장할 수 있다. 하지만 sort함수는 호출할 수 없다.

인덱스를 지원하며 append는 c++의 push_back과 같은 기능을 하고 len(리스트이름)을 통해 리스트의 개수를 구할 수 있다.
in, not in 연산을 통해 해당 data가 리스트에 속해있는지 판단할 수 있다.

리스트는 다음과 같이 사용할 수 있다.

mylist = []
print(mylist) # []

mylist.append("hello")
mylist.append("hola") 
print(mylist) # ["hello", "hola"]

mylist[0] = "hi"
print(mylist) # ["hi", "hola"]

mylist.append('bonjour')
mylist.remove('hola')
print(mylist) # ["hi", "bonjour"]

mylist.pop()
print(mylist) # ["hi"]

mylist.append("hello")
print(mylist.index("hello")) # 1

mylist.pop()
mylist.append(4)
mylist.append(6)
mylist.append(2)
mylist.sort()
print(mylist) # 2 4 6
mylist.reverse()
print(mylist) # 6 4 2

4 in mylist # TRUE
3 in mylist # FALSE
2 not in mylist # FALSE

mylist2 = [1,2,3,4]
mylist3 = [5,6,7,8]
mylist4 = mylist2 + mylist3  # [1,2,3,4,5,6,7,8]


■ 튜플 (Tuple)

한 쌍의 데이터 구조이다. 데이터베이스에서 주로 row(행)를 튜플이라 부름
배열과 달리 데이터 멤버를 변경할 수 없다. 리스트의 대괄호와 달리 소괄호를 사용한다.

mytuple = (1,2,3,4)
mytuple[1] // 2
mytuple[0] = 5; # error


■ 딕셔너리 (Dictionary)

파이썬의 딕셔너리는 map과 동일하다.
key와 value를 한 쌍으로 가지는 자료구조이다. 다음과 같이 사용

map = {"key1": "value1", "key2": "value2", "key3": "value3"};

map["key1"]     # "value1"
map.get("key2") # "value2"
"key3" in map   # TRUE

 
■ 슬라이싱

슬라이싱은 문자열 또는 리스트, 튜플과 같은 자료구조에서 범위를 지정해 멤버를 선택할 수 있다.
대상[start:begin] 과 같이 사용하며 [start, begin) 범위의 데이터를 return 한다.
다음과 같이 사용한다.

mylist = [1, 3, 5, 2, 9, 10]
mylist[1:4] # 3 5 2

str = "hello world"
str[0:3] # hel







댓글