본문 바로가기

Data_Analysis_Track_33/Python

Python_01(기본설정 및 변수와 데이터타입)

Python을 anaconda의 jupyter lab을 이용해 실행

1. cmd창(또는 Windows PowerShell) 실행

2. Python 파일이 있는 경로로 이동 ex) cd 경로주소

3. conda activate

4. jupyter lab(또는 notebook)

 

윈도우 화면이 꺼질 시 -> localhost:8888 (프롬프트 창은 꺼지면 안됨.)

 

유용한 단축키 또는 명령어

x -> cut and paste
x로 삭제한 셀을 v키로 다른 위치의 셀 아래에 재생성

m -> markdown 
y -> code

 

'안녕하세요.'를 print로 씌우려면 '안녕하세요'를 드래그하고 괄호를 누르면 print()안에 들어간다.
커서 위치 ctrl키를 누르면 중복 가능

 

변수와 함수/연산자

 

변수(value)란? 값을 저장하는 메모리 공간
변수 하나에 값은 하나
식별자 규칙 : 문자를 사용하여 변수 선언, 숫자는 두번째 문자부터 가능, 특수 문자는 _(underscore)만 가능, 예약어 사용 불가 ex) False, True
글자 수는 상관 없다.

# name 변수 생성, 문자열 : "홍길동"을 저장. -> 변수에 값을 저장하는 것을 할당,대입(assign)한다 라고 한다.
# 변수를 생성하고 처음 값을 대입 -> 초기화
name = "홍길동"
age = 30
print(name) # name 값을 출력
print(age) # age 값을 출력
print(age + 2)
age = 40 # 기존 변수에 값을 할당 -> 변경
print(name)
print(age)
# 식별자 규칙
이름 = "유재석" # 보통 변수의 이름은 영어로 한다.
print(이름)
name1 = "홍길동"
name2 = "유재석"
name3 = "박명수"
print(name1)
print(name2)
print(name3)
# 1name = "이름" # 변수명 -> 숫자는 두번째 자리부터 가능
# member&id = "abc" # 특수문자는 _(underscore)만 가능
member_id = "abcd"
# False = "aaaa" # 예약어는 변수명 사용 불가.
print(member_id) # 대소문자 구분.

literal value : 표현식 자체가 값인 경우 ex) "홍길동", 20.45, 10
a=10, 5+5 와 같은 경우는 literal value가 아니다. <- 처리과정을 거치기 때문


변수 이름 관례(스네이크 표기법) : 두 개의 단어 조합시 단어 사이에 _(underscore)사용, 모든 글자는 소문자로
카멜 표기법 : 두 개의 단어 조합시 두번째 단어의 첫 글자는 대문자

# 스네이크 표기법 - Python
member_name = "홍길동"
member_age = 30
member_address = "서울"
# 카멜 표기법 - Java
memberName = "홍길동"
memberAge = 30
memberAddress = "서울"


값 -> data type 숫자 - 정수(int) -> 0x - 16진수, 0O - 8진수, 실수(float) -> 지수 ex) 3e5 (3 * 10 ** 5)
논리 -> True, False 비교 ex) ==, !=, <, > ..., 논리 ex) and(&), or(|)

value = int(input()) # 사용자에게 value 입력값 받기
if (value % 3) == 0: # value를 3으로 나누었을때의 나머지가 0이다.
    print("3의 배수입니다.")
else: # if 조건문 외의 조건
    print("3의 배수가 아닙니다.")


변수 선언 및 초기화 : 생성 -> 정의(define)
변수명 = 값 , 변수명만 써서는 안된다. 변수명과 값이 필수. -> 변수명만 쓰고 싶다면 값을 None으로
None 값 : 아무 것도 의미하지 않는 값 (0이 아님)

# 변수를 먼저 선언하고 값은 나중에 할당하려고 할 때.
tall = None


여러 변수에 동일 한 값 대입 ex) a = b = c = 30
여러 변수에 다른 값 대입(tuple 대입) ex) a, b, c = 10, 20, 30

result = 1 + 10 + 100 # 처리결과를 대입
print(result)
a = b = c = d = 100
print(a, b, c, d)
a, b = 500, 1000
print(a, b)
# 튜플 대입 (tuple assignment)
name, age, address = "홍길동", 25, "서울"
print(name, age, address)

대입 연산자 : 변수의 값을 그 변수와 다른 값을 연산한 결과로 변경 ex) x += 1 (x = x + 1)

num = 10
num += 5 # num = num + 5
num *= 2 # num = num * 2
print(num)

변수를 메모리에서 제거 : del 변수명

del num # 메모리에서 변수 num을 제거
print(num) # 제거한 상태에서 print 실행시 NameError 발생, NameError -> 없는 변수, 함수를 사용할 때 발생한다.

조건 연산자 : True일 때 결과값 if 조건식 else False일때 결과값
조건식이 True이면 앞의 값을 False이면 뒤의 값을 연산결과로 반환한다.
False를 의미하는 것 - 숫자(0), 문자(""), None ...

# num이 0 이상이면 "양수"를 num이 0미만이면 "음수"를 출력
result = int(input("정수:"))
if result >= 0:
    print("양수")
else:
    print("음수")


문자열 : 기계어는 0과 1로 표시한다(2진수) bool은 True -> 1, False -> 0으로 변환이 가능하다
문자 'a'는 어떻게 표현할까? 2진수 변환을 위해 문자코드(아스키 코드, Uni-code)를 활용하여 변환이 가능해졌다.
아스키 코드 -> 영문 변환, 8bit 지원 2**8 -> 256
Uni-code -> 영문 외에도 많은 언어 지원, 16bit 지원 2**16 -> 약 35000, 유니코드 기반 -> UTF-8
문자열은 작은 따옴표 또는 큰 따옴표로 감싼다.
여러줄 문자열(Multiline string)은 3개 짜리 작은따옴표 또는 큰따옴표로 감싼다.

# \n를 쓸 일이 너무 많을 때 """ ~~~~ """ 큰 따옴표 3개 사용
# 기능 설명 할 때 사용(doc string)
s2 = """안녕하세요.
반갑습니다.
저는 홍길동입니다.
나이는 20세입니다."""
print(s2)


Escape 문자 : 키보드에는 있지만 글자로 표현할 수 없는 문자를 표현할 때 사용 ex) \n, \t , \', \" ... 반대로 \를 표현하고 싶다면 \\를 사용


prefix : r-string -> 문자 그대로(raw) ex) r"c:\test\example\a.txt"처럼 주소를 입력할 경우

f-string -> 문자열 앞에 접두어 f 사용 ex) f"이름 : {name}, 나이 : {age} ..."

# Escape 문자열
print('a\tb')
print(1, 2, 3 ,4 ,5 ,6 ,7, sep='\t')
print("가\n나\n다")
print("123\b")
print('a"b')
print("a\"b")
print('c:\\test\\ncount\best.txt')
print('--------------')
print('c:\\test\\ncount\\best.txt')
print(r'c:\test\ncount\best.txt') # r-string : escape 문자 사용하지 않겠다.
# 가장 많이 쓰고 편한 방법. f-string
info = f"이름: {name}, 나이: {age}, 키: {tall}cm, 몸무게: {weight}kg"
print(info)


in, not in + 문자열 A in 문자열 B -> in : 문자열 A가 문자열 B에 있으면 True, 없으면 False

not in : 문자열 A가 문자열 B에 있으면 False, 없으면 True

address = "서울시 금천구 두산동"
print("서울" in address, "서울" not in address)
# 결과값은 True False


문자열

index ex) a = "index", a[0] = "i", 문자열의 n번째 문자를 조회, 문자열 값 안의 일부를 변경할 수 없다.(immutable)
slicing ex) a = "index", a[0:5:2] = idx, 변수[시작index:끝index:간격]

a = "index"
print(a[0])
print(a[:4])
# i     <- 결과값
# inde
s2 = "0123456789"
print(s2[3:9:2])
print(s2[:8:2]) # 시작 생략
print(s2[3::2]) # 끝 생략
print(s2[3:8]) # 3 ~ 7 간격생략 -> defalut 1
# 2번째부터 뒤에서 3번째까지 조회
print(s2[1:-3])
# 역순 조회 : (시작 > 종료, 간격 : 음수)
print(s2[7:2:-1]) # 7 ~ 2 - (-1)


함수 - 범용, 메소드 - 특정 타입만의 기능

ex) "abc".upper() -> 소문자를 대문자로 변환, "abc"는 피연산자. , len(피연산자)

s6 = "abcdeABCDE"
print(s6.upper()) # 소문자를 모두 대문자로 변경
print(s6.lower()) # 대문자 -> 소문자


동적타입 언어(Python): 변수가 가질 수 있는 값의 타입을 고정하지 않는다.

age = 20
age = "스무살"
age = True
type(age)
# bool <- 결과값, 값의 타입이 동적으로 변한다.

그래서 헷갈리지 않도록 타입 힌트(Type Hint)를 명시하기도 한다.

# 파이썬의 타입 힌트
age:int = 10 # 변수명:타입 -> 변수의 타입 힌트 but 강제는 아님
print(age)
age = "나이" # 가능
print(age)