Networks/Python

SK networks AI Camp - Python 기본(1)

코딩하는 Español되기 2024. 7. 10. 08:00

두번째 시간에는 Python 기본 문법에 대해 알아보았어요.

정리한 걸 포스팅 해볼게요.

 

변수? 상수? 계수?

4x + 6 = 12   ... 4 : '계수' , x : '변수', 6 : '상수' , 12 : '상수' 

- 변수(Variable) : 변하는 수. 즉, 데이터가 변하는 경우 변수를 사용

- 상수(Contant) : 변하지 않는 수. 즉, 프로그래밍 中 어떤 경우에도 변하지 않는 경우 사용

- 계수(Coefficient) : 상수 중 변수와 관련이 있는 것 (* 딥러닝/머신러닝에서 많이 사용)

 

변수 이름 규칙?

- 대소문자 구분

- 알파벳, 숫자, 언더바(_) 가능

- 변수명 첫 글자에 숫자는 문법 오류!!

- Python 키워드 및 정의된 함수 및 클래스명으로 사용 불가!

a = 1
b1 = 2
B1 = 100
apple_mint = '애플민트'

print('내가 좋아하는 베라 맛은? ' + apple_mint)
print(a + b1)
print('B1 = ', B1)
print('b1 = ', b1)

결과가 이렇게 나오면 잘 나온거죠!! B1과 b1이 다른 것도 알 수 있어요.

 

그러면 왜 변수를 사용할까?

1. 코드의 재활용성과 가독성

2. 중복 제거를 통한 유지보수 용이

구구단 3단을 출력하는 코드 예로 들어볼게요.

print(3 * 1)
print(3 * 2)
print(3 * 3)
print(3 * 4)
print(3 * 5)
print(3 * 6)
print(3 * 7)
print(3 * 8)
print(3 * 9)

위와 같이 했을 때 4단으로 바꾸려면 앞에 숫자 3을 다 바꿔줘야겠죠? 귀찮 그 잡채

하지만 변수를 쓰면? 

n = 3
print(n * 1)
print(n * 2)
print(n * 3)
print(n * 4)
print(n * 5)
print(n * 6)
print(n * 7)
print(n * 8)
print(n * 9)

4단으로 바꾸려면 n = 3 을 n = 4로 바꾸기만 하면 끝나요.

 

상수 : 변하지 않는 수

상수는 변수명을 대문자로 표현해요. 하지만 변수와 기능적으로 차이는 없어요.

DEFAULT = '42'
print(DEFAULT)

 

메모리 주소??

: 변수의 값에 대한 컴퓨터의 메모리에 저장된 위치 주소

id(변수명)으로 메모리 주소를 알 수 있어요.

아래 코드를 보면 출력 결과가 같아요.

똑같이 1이 들어가고 메모리 주소도 같아요.

b 가 a의 메모리 주소를 복사한거죠.

a = 1
b = a
print(id(a))
print(id(b))

아래의 코드를 보면 출력 결과가 다른 걸 알 수 있어요.

똑같이 1이라는 값이 있지만 메모리 주소는 다른거죠.

a = 1
b = 1
print(id(a))
print(id(b))

 

자료형?

프로그래밍 할 때 쓰는 숫자, 문자열 등 자료 형태로 사용하는 모든 것을 뜻해요.

프로그래밍에서 기본이자 핵심 단위!

그렇다면 변수의 타입을 확인하려면?? type(변수명) 을 입력해주면 되요.

구분 자료형 저장 모델 변경 가능성 접근방법
수치형 int,  float,  complex Literal(단일 종류) Immutable
(변경 불가)
Direct(직접할당)
문자열 str Container
(종류에 무관)
Sequence
(순서중시)
튜플 tuple
리스트 list Mutable
(변경 가능)
사전 dict Mapping(순서 무관)
집합 set Set(중복 불가)

 

숫자형 연산?

 

1. 정수형(Integer)

a = 123
b = -123
c = 0
print('a : ', a , ' b: ', b, ' c: ', c)
print(type(a), type(b), type(c))

 

2. 실수형(Floating-point)

a = 1.2
b = -3.14
print('a : ', a , ' b: ', b)
print(type(a), type(b))

아래 코딩 방식은 "컴퓨터식 지수 표현 방식"으로 '3.14e3' | '3.14E3' 으로 표현해요

의미는 3.14 * 10 * 10 * 10 (10의 3승) 

a = 3.14e3
b = 1.23E3

print('a : ', a)
print('b : ', b)

숫자형은 사칙연산도 가능해요

●  + : 더하기

●  - : 빼기

●  * : 곱하기

●  ** : 제곱

●  / : 나누기

●  // : 몫

●  % : 나머지

a, b = 7, 2

print('a + b = ' , a+b)
print('a - b = ' , a-b)
print('a * b = ' , a*b)
print('a ** b = ', a**b)
print('a / b = ' , a/b)
print('a / b의 몫 = ', a//b)
print('a / b의 나머지 = ', a%b)

 

문자열

생성할 때 작은 따옴표(')나 큰 따옴표(")로 감싸주면되요.

그런데 만약 문자열 안에 작은 따옴표나 큰따옴표를 쓰고 싶다면?

아래 c처럼 작은 따옴표를 쓰고 싶으면 큰따옴표로 감싸고

큰 따옴표를 쓰고 싶다면 작은 따옴표로 감싸면 되요.

하지만! 작은 따옴표 안에 작은 따옴표, 큰 따옴표 안에 큰 따옴표는 불가능해요.

a = 'Hello world'
b = "Have a good day"
c = "I'm a student"

print(a)
print(b)
print(c)

 

이스케이프 코드

: 프로그래밍할 때 사용할 수 있도록 미리 정의해 둔 "문자 조합" , 주로 출력을 보기 좋게 하기 위해 사용해요

● \n : 줄 바꿈

● \t : 탭 간격

● \\ : 문자 \ 그대로 표현할 때

● \' : 작은 따옴표 그대로 표현할 때

● \" : 큰 따옴표 그대로 표현할 때

a = "Life is too Short \nYou need Python"
b = "Life\tis\ttoo\tShort"
c = "\"Life is too Short\""
d = "I\'m a boy"

print(a)
print(b)
print(c)
print(d)

문자열 연산

더하기, 곱하기가 있어요.

a = "Hello"
b = "world"
c = "Hi~"

print(a + b)
print(c * 3)

인덱싱(Indexing) : 무엇인가를 가리킨다는 의미

주의 : 숫자를 셀 때는 0부터! 반대로 셀때는-1부터!

문자 g o o d   d a y !
인덱스 0 1 2 3 4 5 6 7 8
인덱스 -9 -8 -7 -6 -5 -4 -3 -2 -1

good day!라는 문자의 인덱스는 위의 표와 같아요.

인덱싱을 표현하는 방법은 변수명[인덱스] 로 하면 되요.

a = "good day!"

print(a[0])
print(a[-1])

 

슬라이싱(Slicing)

- 변수명[시작인덱싱 번호 : 끝 인덱싱 번호 : 간격] *간격은 생략 가능

a = "Hello World!"

print(a[0] + a[1] + a[2] + a[3] + a[4])
print(a[0:5]) # 0부터 4번째 인덱스가 출력
print(a[:5]) # 시작 인덱싱 번호가 0이면 생략 가능

print('-'*30)

print(a[6:12])
print(a[6:]) # 끝 인덱싱 번호 생략 시 문장 끝까지

문자열 포매팅

문자열 안에 넣고 싶다면?

● 숫자 : %d

● 문자 : %s

● 실수 : %0.숫자f  ex)소수점 3째자리까지 표현 : %0.3f

print("오늘 날씨는 %d도 이다" % 35)
print("내가 좋아하는 색깔은 %s이다" % '민트색')

name = '홍길동'
number = 10
print('제 이름은 %s이고 나이는 %d에요' %(name, number))

Format

문과지만 한국어가 부족한 관계로 예시로 알아볼게요.

print("I eat {} apples".format(3))

name = "홍길동"
age = 10
print("제 이름은 {0}이고, 나이는 {1}살이에요.".format(name, age))
print("제 이름은 {n}이고, 나이는 {a}살이에요.".format(n=name, a=age))

 

문자열 관련 함수들

● count() : 문자 개수

● len() : 문자열 길이

● find() : 인덱싱 위치 * 값이 없으면 -1로 표시

● join() : 문자열 삽입

● split() : 문자열 나누기

● upper() : 대문자로 변경

● lower() : 소문자로 변경

● replace() : 문자열 변경

● strip() : 양쪽 공백 제거

  ● lstrip() : 왼쪽 공백 제거

  ● rstrip() : 오른쪽 공백 제거

a = "Hello World"

print(a.count('l')) # 'l' 개수
print(len(a)) # a의 길이
print(a.find('W')) # 'W'의 인덱싱 위치
print(a.find('t')) # 't'는 없기에 -1 출ㄹ력
print(".".join(a)) # .을 삽입
print(a.split(" ")) # " "을 기준으로 나누기
print(a.upper()) # 대문자
print(a.lower()) # 소문자
print(a.replace('World', 'King')) # World를 King으로 변경

b = "  hi  "
print(b)
print(b.strip()) # 양쪽 공백제거
print(b.rstrip()) # 오른쪽 공백 제거
print(b.lstrip()) # 왼쪽 공백 제거

 

글이 너무 길어서 2탄으로 돌아올게요!