Python/Fundamentals

python intro. (02)

metamong 2022. 3. 18.

* python = interpreter 방식의 언어

 interpreter 방식의 언어란, 몇 줄의 code를 입력 후 enter를 치면 해당 부분이 바로 실행되고 정상처리/에러 여부를 알 수 있는 대화형 프로그래밍 언어이다

≫ 그 반대로 compiler 방식의 언어가 있는데, 이는 코딩을 모두 마치고 컴퓨터가 알아들을 수 있는 기계어 수준으로 한 번에 번역해서 실행해주는 언어이다

 

** 데이터 과학을 주 대상 업무로 사용한다면 한 줄 입력하고 실행하는 interpreter 방식이 훨씬 유리하고 효과적이다!

* 기초 문법

** 랜덤으로 내가 몰랐던 부분 계속 업데이트하는 방식으로 포스팅 정리!

 

 None이라는 값 존재

 

x = None
print(x) #None

 

 세미콜론(;)은 한 줄의 코드를 나눠서 표현할 수 있다

 

print('hello, world'); print('1234')

"""
hello, world
1234
"""

 

 한 줄에 여러 변수를 한꺼번에 지정할 수 있다

 

x, y, z = 10, 20, 30
print(x,y,z)
#10 20 30

 

≫ 한꺼번에 모든 변수에 순차적으로 값을 대입할 수 있다

 

a = b = c = 30
print(a,b,c)
#30 30 30

 

 한 줄에 입력할 내용이 너무 길 때 역슬래시(\) 입력하고 다음 줄에 계속 이어서 작성 (원래 한 줄임)

 

a = "rrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrr\
eeeeeeeeeeeeeeeee"
a

#'rrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrreeeeeeeeeeeeeeeee'

 

(+) 또는 """ 세 개를 입력하면 역슬래시 입력할 필요 없이 쉽게 보이는 대로 여러 줄 출력이 가능하다

 

print("""i love python
this is so much fun!
good luck everybody~""")

"""
i love python
this is so much fun!
good luck everybody~
"""

* 이름 표기 표준

 

 Camel Case(카멜 케이스): 여러 단어가 합쳐진 상황에서 첫 단어만 첫 글자 소문자, 그 이후는 대문자로 표기하는 방식

* CamelCase는 주로 파이썬 class명에 사용된다.

 

helloWorld = 5
dataTalk = 7
letsGo = 9

print(helloWorld, dataTalk, letsGo)
#5 7 9

 

 Pascal Case(파스칼 케이스): 나타나는 단어마다 모두 첫 글자 대문자로 표기하는 방식

 

HelloWorld = 1
DataTalk = 3
LetsGo = 2

print(HelloWorld, DataTalk,LetsGo)
#1 3 2

 

 Snake Case(스네이크 케이스): 여러 단어로 이루어졌으며 단어 사이사이를 언더바(_)로 나타내는 방식

* Snake Case는 파이썬 함수, 변수명에 사용된다.

 

Hello_World = 4
Data_Talk = 6
Lets_Go = 8

print(Hello_World, Data_Talk, Lets_Go)
#4 6 8

 

* 문자열 format 함수 <format formatting>

→ format 함수는 "{}".format () 형태로 쓰이며 format 함수의 output은 string 문자열 형태이다

→ 아래 type 연산자를 활용하면 str으로 결과가 나옴이 확인 가능하다!

 

format_output = "{}".format (52273)
print(type(format_output),format_output)

# <class 'str'> 52273

 

 "{}".format()을 써서 치환하여 출력하기

 

→ 아래 첫번째 예와 같이 3000이라는 숫자가 { } 안에 들어가서 '3000원'이라는 결과가 출력된다

→ {}를 많이 설정하여 한꺼번에 수를 출력할 수 있다 (두 번째 예)

 정수, 문자열, bool형 모두 한꺼번에 {}안에 넣어서 출력이 가능하다

 

format_output_a = "{}원".format (3000)
print(format_output_a)

format_output_b = "{}, {}, {}".format (1,2,3)
print(format_output_b)

#숫자, 문자, bool 형 모두 치환 가능

format_output_c = "{}, {}, {}".format (1, "문자열", True)
print(format_output_c)


#3000원
#1, 2, 3
#1, 문자열, True

 

 "{:s}"이면 .format() 안에 문자열만 들어갈 수 있고, "{:d}"이면 .format() 안에 숫자형만 들어간다

 

output_s = "{:s}".format ("string")
print(output_s)

output_n = "{:d}".format (333)
print(output_n)

#string
#333

 

≫ 원하는 숫자 형태로 출력하기 - 자리수 & 음수 & 소수 자리수 & 정수로 표현

 

→ {}안에 4d로 표현되면 네 자리수의 정수로 표현을 한다

→ 4d앞에 0을 붙이면 해당 수가 들어가고 남은 자리에 모두 0을 표시한다

(0을 붙이지 않으면 남은 자리는 공백으로 표현됨 - 공백을 차지한다!)

 음수 역시 한 자리를 차지한다

→ {}안에 .2f로 표현되면 소수로 표현되는데 소수점 이하 두 자리수의 소수로 표현을 한다

→ {}안에 g로 표현되면 괄호 안의 수를 정수 표현한다

 

output_4d = "{:04d}".format(52)
print(output_4d)

output_minus = "{:05d}".format(-52)
print(output_minus)

output_float = "{:15.2f}".format(52.273)
print(output_float)

output_floatrid = "{:g}".format(50.0)
print(output_floatrid)

 

- 출력결과 -

더보기
0052
-0052
          52.27
50

 

* 문자열 활용

 len()을 통해 문자열에 속한 글자의 개수를 구할 수 있다 (띄어쓰기나 .과 같은 특수문자도 카운팅된다)

 

hello = "안녕 하세요."

len(hello)

#7

 

 + 연결 연산자를 통해 문자열과 문자열끼리 서로 연결이 가능하다

- 그러나 언제까지나 문자열끼리만 연결 가능

- 숫자형과 문자형은 서로 연결이 불가능하다

- 이럴 경우 str()함수를 이용하여 문자형으로 바꿔준다 (int()는 그 반대로 숫자형으로 바꿔줌)

 

name = "DaTALK"
position = "DS"
num = 2

print(name + position)
print(name + num)

"""
DaTALKDS
---------------------------------------------------------------------------
TypeError                                 Traceback (most recent call last)
<ipython-input-37-c61e77748ba8> in <module>
      4 
      5 print(name + position)
----> 6 print(name + num)

TypeError: can only concatenate str (not "int") to str
"""

print(name + str(num))
# DaTALK2

 

 * 연산자를 통해 동일한 문자열을 여러 번 반복하여 출력할 수 있다

 

name = "Hello"
times = 3

print(name*times)
#HelloHelloHello

 

 replace 활용

- 바꿀 문자열을 대체하여 새 문자열로 바꿀 수 있다

 

s = 'hello, world!'
s.replace('world!', 'Python')
#'hello, Python'

 

 split 활용

- split(기준문자열)

- 기준문자열을 기준으로 본 문자열을 분리해 준다

- list로 반환해줌

- 공백일 경우 띄어쓰기 기준으로 분리

 

s = 'apple pear grape'
s.split()
#['apple', 'pear', 'grape']

name='ryan,joe'
name.split(',')
#['ryan','joe']

 

- ex) split(":")는 :을 기준으로 각 변수에 각각 저장된다 (원하는 기준문자를 split() 내부에 집어넣음)

 

hour, minute = input('시와 분을 입력하세요: ').split(":")

print(hour + "시 " + minute + "분")

#시와 분을 입력하세요: 3:30
#3시 30분

 

- 여기서 expand=True일 경우 split으로 분리된 각 문자열의 결과가 dataframe의 형태로 저된다..!

 

 join 활용

- join(list)

- x.join(list): x를 기준으로 list 내의 모든 원소를 서로 이어붙여 한 string을 생성

 

dash = '-'
dash.join(['010','1234','5678'])
#'010-1234-5678'

 

 upper & lower

- upper) 소문자를 대문자로

- lower) 대문자를 소문자로

 

s = 'python'
s.upper()
#'PYTHON'

s = 'PYTHON'
s.lower()
#'python'

 

 strip

- lstrip) 왼쪽을 공백 처리

- rstrip) 오른쪽을 공백 처리

 

s = "     python     "

s.lstrip() #'python     '
s.rstrip() #'     python'
s.strip() #'python'

 

- 삭제할 문자를 괄호 안에 넣어 삭제할 수 있다

- 여러 삭제할 문자를 한 번에 넣을 수도 있음

 

s = ',python'
s.lstrip(',')
#'python'

k = ',python.'
k.strip(',.')
#'python'

 

 zfill

- 몇 자리의 수로 만들어 나머지의 숫자를 zero 0으로 채울 때 사용

 

print('35',zfill(4)) #0035
print('1',zfill(4)) #0001

print(01) #error
print('01') #01

 

 find(찾을 문자열)

- find() 안에 찾을 문자열의 index를 반환해준다 (default: 왼쪽부터)

- 오른쪽부터 찾고 싶다면 rfind('문자열') 사용

- 만약 찾고자 하는 문자열이 없다면 -1을 반환

 

s = 'apple pineapple'
s.find('pl') #2
s.rfind('pl') #12

s.find('xl') #-1

 

 startswith (원하는 문자열로 시작하는 문자열을 찾을 경우) / endswith (~ 끝나는 문자열) & str.contains?

- 원하는 문자열로 (시작/끝)난다면 True, 아니면 False인 bool형을 반환해준다

- str.startswith , str.endswith, str.contains로 Series & Dataframe 모두 활용이 가능하지만, contains는 단독 string에는 쓰일 수 없다는 점! 구별되니 기억하도록 하자 :)

 

 

 count(셀 문자열)

- count()를 통해 특정 문자열의 개수를 반환해준다

 

s = 'apple'
s.count('pl') #1

 

* input

 문자열을 입력 받기를 요청한다. 입력한 문자열이 출력됨

 입력받은 문자열을 변수에 저장할 수 있음

- 여기서 문자열의 형태로 저장됨

 

s = input('문자열을 입력하세요: ')
print(s)

#문자열을 입력하세요: 안녕하세요
#안녕하세요

 

※ 숫자를 입력하더라도 str 형태임 - 따라서 int 또는 float 함수를 사용해 강제 형 변환해야 한다 (if needed) ※ 

 

num1 = int(input('숫자1을 입력하세요: '))
num2 = int(input('숫자2를 입력하세요: '))

print(num1+num2)

#숫자1을 입력하세요: 30
#숫자2를 입력하세요: 10
#40

 

- 편의성을 위해 두 개의 숫자를 한 번에 입력받을 수 있다 → split() 사용 (세 개 이상도 가능)

 

♠ map()

 map()는 두 번째 인자를 첫 번째 인자형으로 바꿔주는 함수이다.

 문자의 숫자형 변환을 사용할 때 많이 쓰는 함수

 

a,b = map(int, input('숫자 두 개 입력: ').split())
print(a+b)

#숫자 두 개 입력: 2 3
#5

 

→ or 리스트/튜플을 지정된 함수로 처리해주는 함수

- tuple의 경우 원본 tuple 변경이 아닌 새로운 tuple 생성

 

list(map(function_name, list_name))
tuple(map(function_name, tuple_name))

 

 

*출처) 2021 공공데이터 청년인턴(일경험수련생) 상시교육

'Python > Fundamentals' 카테고리의 다른 글

시계열 데이터 - datetime  (0) 2022.03.24
list comprehension  (0) 2022.03.20
Module & Package  (0) 2022.03.19
python intro. (03)  (0) 2022.03.19
python intro. (01)  (0) 2022.03.18

댓글