나른한 코딩 생활

[2일차] ABC 부트캠프 PYTHON 기초 본문

ABC 부트캠프

[2일차] ABC 부트캠프 PYTHON 기초

GerHerMo 2024. 6. 25. 21:12

오늘은 파이썬 기초에 대해 배웠다.

 

우리가 이용할 툴은 Anaconda 와 그 안의 Jupyter Notebook 을 사용하기로 했다.

 

먼저 Anaconda

Python을 포함한 다양한 도구를 통합적으로 관리하는 프로그램

 

Jupyter Notebook

여러 cell을 수직적으로 결합해서 문서를 만들거나 분석을 수행하는 명령툴

 

이제 본격적으로 파이썬을 다루어 보기~ 전에!

Jupyter Notebook 의 간단한 명령어와 기능들에 대해 알아보자

 

단축키 기능
  명령모드
A 선택된 셀 위(above)에 셀 추가
B 선택된 셀 아래(Bottom)에 셀 추가
D,D 선택된 셀(Delete) 삭제하기
M 선택된 셀 마크다운 (Markdown) 형식으로 변환
Y 선택된 셀 코드(Code) 형식으로 변환
  수정모드
Tab 들여쓰기 혹은 코드 완성
Shift + Tab 들여쓰기 취소 혹은 툴팁(도움말)
Ctrl + / 주석 처리/해제
  Cell 실행
Shift + Enter 실행하고 다음 셀로 이동
Ctrl + Enter 실행
  기타
Ctrl + S 저장하기
Shift + Tab 함수 정의하기

 

다음 기능들은 Jupiter Notebook 에서 자주 사용하니 기억해두자

 

이후에는 Library 관리를 위한 몇가지의 명령어

 

Library 설치( Anaconda 설치시 불필요 과정 )

!pip install numpy pandas matplotlib seaborn plotly xlrd openpyxl

 

Library 설치 확인

# Windows 
!pip list --format=freeze | findstr /r "pandas seaborn plotly openpyxl"

# Mac
# !pip list --format=greeze | grep "pandas\|seaborn\|plotly\|openpyxl"

 

해당 내용까지가 기본적인 툴 설치 및 실행확인이였다

이제는 드디어 Python의 문법과 기초 그리고 여러 프로그래밍 용어에 대해서 알아보자


Python 기초

변수, 상수, 리터럴

사실 해당 내용은 이미 다른 문법을 여러번 거쳐온 나에게는 너무 익숙한 단어들이다.

허나 기초를 다잡는 마음으로 다시 한번 되새기자면

 

  • 변수 : 변수란 값을 저장하는 메모리공간
  • 상수 : 기본적으로 변하지 않는 값이지만 파이썬에서는 표기법으로만 구분
  • 리터럴 : 저장되는 값 자체
x = 35 # 변수는 x, 리터럴은 35
PI = 3.14 # PI는 3.14라는 고정된 값을 가지는 상수로 취급

 

변수를 설정할때는 주의할점이 있다

연산자, 띄어쓰기, 허용되지 않은 특수기호는 사용할 수 없다

__age = 10 #가능
cat = 5
dog = 5
if dog&cat:
    print(1)
# dog&cat = 10 단독 변수로 설정 불가

 

input() 함수

: 해당 함수는 사용자로부터 문자열을 입력받는 함수

 () 안에는 input 명령어를 통해 보여질 출력 메시지

input("숫자를 적어도 문자가 나온다") # ()안 메세지 출력후 str값 입력받음

 

여러가지 타입

Numeric, Boolean, Text, Sequence, Set  등 여러가지 타입이 존재한다

 

  • Numeric : 숫자형 데이터 타입 ( int, float 형)
  • Boolean : 논리형 데이터 타입 ( True, False 값 반환 )
  • Text Sequence : 문자형 데이터 타입 ( str형 ) 
  • Sequence, Set : #다음 시간에
# 숫자형 데이터 타입, 정수(int) 실수(float)
x = 10
y = 10.0

# 값을 형태를 알 수 있는 내장 함수, type(값)
# y = type(x)

print(type(x)) # class <int> 출력
print(type(x) (y)) # 10 출력

 

이러한 숫자형 연산자를 계산하기 위해 다양한 연산자를 제공한다.

a = 5 # 대입연산자
a + 1 = 6
a - 3 = 2
a / 2 = 2.5
a // 2 = 2 # 몫만 구하기
a % = 5 # 나머지만 구하기 
a ** 3 = 125 # 5의 3제곱
## int() float() 를 사용해서 타입을 변환할 수 있다

print(int(10.0)) # 10
# abs : 절대값
# pow : 제곱
# divmod : 몫과 나머지

abs(-35) # 35
pow(3,2) # 9
divmod(10,3) # (3,1)

 

Q. int 형과 float 형을 계산하면 어떠한 형태의 값이 나오나?

A. 더 큰 형태인 float 형태의 값이 나옴

 

 


논리형 데이터 타입인 Boolean Type 은 참과 거짓을 나타내는 데이터 타입이다

= True / 거짓 = False

 

FalseFalse 로 취급되는 다음 경우가 아니라면 파이썬에서는 True로 취급된다

# False가 아니더라도 거짓으로 취급

## 1. Nomne
## 2. 0 or 0.0
## 3. '', (), {}, [], set(), range(0)

# 문자열이나 값이 없다는 것을 의미하는 3번 => '' 어? 문자가 없네? -> False

 

두개의 피연산자가 있을 떄 사용한 이항 연산자비교 연산자는 다음과 같다

# 논리형 값이 도출되는 연산으로 < 비교 연산자 >가 존재

# >=  이상    >   초과
# <=  이하    <   미만
# ==  같다    !=  아니다(다르다)

4 != 2 # True

 

다음은 논리 연산자 이다

# 논리 연산자
# 1. and  : 둘 다 '참'일때만 '참'
# 2. or : 둘 중 하나만 '참'이여도 '참'
# 3. not : (단항연산자) '참'이면 '거짓', '거짓'이면 '참'

not False or False  # True
# 해당 결과는 not False 인 단항 연산자 먼저 실행
# 즉, (not False) or False 와 같음

 

 

그렇다면 논리 연산자를 문자열과 비교하면 어떻게 될까?

True and "12345"
# 파이썬 이외의 언어에서는 해당 코드에서 오류가 발생한다.
# 같은 타입의 Boolean 타입을 and 오른쪽에 배치해야하기 때문
# 허나 Python 에서는 다음과 같은 형태에서는 뒤쪽의 '12345'를 출력

 

어찌 보면 오류의 형태로 나온다고 볼 수 있다. 이것은 Python의 특이점 중 하나라고 볼 수 있다.


 

오늘 마지막으로 배운 Type 은 바로 Text Sequence 타입이다.

여기서 Sequence는 ' 나열 '의 의미로서, Text Sequnece는 문자의 나열을 의미한다

 

# 문자열 설정 str
# 문자열 지정 : ("), ('), 혹은(''')를 쌍으로 표시
# ex

x = '안녕'
y = "하이"
z = '''반갑습니다'''

print(x,y,z) # 안녕 하이 반갑습니다  // 출력

 

문자열을 나타내는 방법을 문자열 포맷팅 이라고 하며

해당 방법은 크게 3가지가 존재한다

animal = '고양이'

# 1. printf-Style
print("나는 %s를 좋아합니다" %animal)

# 2. format method
print("나는 {}를 좋아합니다".format(animal))

# 3. f-strings
print(f"나는{animal}를 좋아합니다")

# 출력
# 나는 고양이를 좋아합니다
# 나는 고양이를 좋아합니다
# 나는 고양이를 좋아합니다

 

인덱스(index)란? 여러가지 뜻이 있지만 파이썬에서는

리스트의 값의 순서, 번호

 

인덱스는 0부터 시작하면서 순차적으로 증가

message = "hello python!"
message[1] == 'e' # True // h는 0, e는 1의 인덱스를 가진다
message[6:12] == 'python' # True
message[6:30] == 'python!' # True 

# 단순히 슬라이지를 6이상 30미만이라고 생각하지 말것
# 6을 포함하며~ 30에 이르기 전까지!
# 30에서 종료하는것이 아닌 그 전에 끝이면 끝

message[6:12:2] # 'pto'

# 함수와 메서드
len(message) # 문자열의 길이!
print(len(message)) # 13

# 메서드는 보통 함수와 같은 의미
# 허나 python document 에는 종속된 함수를 메서드(method)라고 표기
# 해당 메서드에는
## find, index, split, join, upper, lower, replace 등등이 존재

message.find("o") == "hello python!".find("o") 
# True
# 주소를 통해 값을 참조하는 message 의 형태와 
# 리터럴을 직접 가르키는 문자열 형태는 결과적으로 같음

print(messgae.index("python"))  # 6
print('YongJin'.upper())  # YONGJIN
print('YongJin'.lower())  # yongjin
print('24-06-25'.split('-'))  # ['24', '06', '25']
print('Banana Milk'.replace('Banana', 'Coffee')  # Coffee Milk

 

위 코드 중 find() index() 의 차이점은 무엇일까?

 

Q. 둘 다 똑같은 인덱스 번호를 반환하는 메서드 아닌가??

A. find()는 문자열 안에 괄호 속 문자 혹은 문자열이 존재하는지 판단하여

  • 문자가 존재하면 문자의 인덱스 문자열일 경우 시작하는 인덱스를 반환
  • 찾는 문자 또는 문자열이 존재하지 않는다면 ' -1 ' 을 반환

    하지만 index()의 경우에는 문자가 존재하지 않으면 Error 발생!

 

또한 'YongJin'.upper() 혹은 'Banana Milk'.replace('Banana', 'Coffee') 를 실행했다고 하더라도

'YonghJin' 문자열이 'YONGJIN' 으로 치환되는 것이 아니다.

'Banana Milk' -> 'Coffee Milk' 또한 마찬가지

 

문자열이 변수에 해당된 다음과 같은 상황에도

메서드로서 새로 적용(생성)된 변수가 아니면 기존 변수의 문자열은 바뀌지 않는다

snack ='OreO'
Snack = snack.upper()

print(snack.upper() == Snack)
# 여기서 snack 은 'OREO'로 upper된 상태이기에 True 반환

print(snack == Snack)
# 하지만 snack.upper는 snack의 상태를 바꾼것은 아니기에 False 반환

# snack == Snack 을 만족하기 위해서는 upper 상태를 snack에 저장해야 함
snack = snack.upper()
print(snack == Snack) # True

 

다음은 여러 연습문제 중 슬라이서의 기능 하나를 소개한다

# [ 사용자로부터 입력받은 문자열 word 가 회문인지 확인하시오. ]
## 회문 : 앞뒤가 똑같은 문자열

word = input('영어 회문 입력')
Re_word = word[::-1]
print(Re_word == word)
#level 입력시 True, Milk 입력시 False 반환

 

문자열[::-1]은 해당 문자열을 뒤에서부터 인식한다

즉, word에 Milk 가 들어간 경우 Re_word == 'kliM' 

 

오늘 점심은 해피데이? 라는 분식점에서 참치김밥을 하나 먹었다.

내일은 뭐먹을지 고민하면서 오늘 포스트는 여기서 마치겠다.

^o^b