[Python] 변수와 데이터 타입

programmeaow·2022년 7월 25일
0

Python

목록 보기
1/1

❗ Anaconda 설치

파이썬을 사용하기 위해 anaconda를 설치하였다. ( 다운로드 주소 : https://www.anaconda.com/ )

설치가 완료되면 명령 프롬포트 창을 열어서 파이썬을 사용할 경로로 CD 해준다.
PythonJupeter notebook이라는 툴을 사용하여 작업할 것이다.
cmd에서 작업 경로로 이동한 것을 확인한 후, conda activate -> jupyter notebook을 입력하여 실행하자.

Jupeter notebook 단축키 살펴보기

shift + enter : 실행하고 다음 Cell(줄)로 이동
control + enter : 실행하고 현재 Cell에 머무르기

a : 현재 위치에서 위에 새로운 Cell 생성
b : 현재 위치에서 아래에 새로운 Cell 생성

Cell 선택 후 m : 마크다운으로 Cell 속성 변경
Cell 선택 후 y : 파이썬 코드로 Cell 속성 변경




✅ 변수 선언 문법

변수명 = 값
	- 변수는 반드시 선언하면서 값을 대입해야 한다.
    - 처음 선언된 변수이면 변수 선언/초기화, 있는 변수일 경우 값 변경(대입)
    - 변수 선언시 대입할 값이 없을 경우 None 값을 대입하면 된다. 
      (None -> java의 Null과 동일)

파이썬은 "동적 타입 언어" 이다. 따라서 변수 선언시 변수의 데이터 타입을 미리 선언하지 않아도 된다.
ex ) Java의 변수 선언 : int a = 10

변수 선언하기

a = 1
b = None
c = '텍스트'

여러개의 변수에 값 대입하기

a = b = c = d = 7
print(a, b, c, d)

# 출력 : 7 7 7 7

튜플(Tuple로) 대입하기

# 변수의 개수와 데이터 개수가 동일해야 가능하다.
a, b, c = '사과', '딸기', '바나나'

✔️ 튜플(Tuple) : 튜플이란?

리스트처럼 여러개의 데이터를 담을 수 있는 자료구조
- 리스트와 튜플의 차이점
    차이점1 : 리스트 = 선언시 대괄호 [ ] 사용, 튜플 = 선언시 소괄호 ( ) 사용
    차이점2 : 리스트 = 리스트 안의 값 생성, 삭제, 변경 ⭕, 튜플 = 튜플 안의 값 생성, 삭제, 변경 ❌

변수 선언시 데이터 타입을 지정하지 않는다.

a = 10
print(a) # 출력 : 10

a = "문자"
print(a) # 출력 : 문자

에러가 발생하지 않고 int 값에서 변경된 str 값이 출력된다.
타입이 다르면 덧셈 등의 연산이 불가능하다.

num = 10
print(num+10) # 출력 : 20

num = "문자"
print(num+10) # 에러 발생


✅ 데이터 타입(Data type)

데이터 타입의 종류

  1. 숫자형(Numeric) - 정수, 실수
  2. 논리형(bool) - True, False
  3. 문자열(String)

- Numeric(숫자형)

# 정수와 실수 모두 숫자형 데이터 타입
10, 0.1 

# 정수부나 실수부에 0만 있을 경우 생략 가능 (.은 생략 불가)
print(20.0, 20.)

16진수 표기법 (출력시 10진수로 변환되어 출력)

# 0x가 붙음 : 16진수
print(0xAF23) 

# 출력 : 44835

실수 - 지수 표기법

# 12345678000 지수 표기법으로 변환
1.2345678e10 

=> 1.2345678 * 10**10
# 320 지수 표기법으로 변환
3.2e2 
#3.2*10**2
3.2e-2
# 출력 : 0.032

간단한 연산 해보기

# 제곱연산
2**10

# 출력 : 1024
# 나누기
10 / 4

# 출력 : 2.5
# 몫 연산자
10 // 4 

# 출력 : 2
# 나머지 연산자
10 % 3 

# 출력 : 1

해당 숫자가 3의 배수인지 구하기

num = 32
num % 3

# 출력 : 2
# 나머지가 2이므로 num은 3의 배수가 아니다.


- Boolean(논리형)

모든 타입은 bool 타입으로 변환될 수 있다.

- 숫자: 0-False, 양수/음수-True
- 문자열: 글자수가 0인 문자열-False, 1글자 이상-True
- None: False
- 자료구조: 원소의 개수가 0-False, 1개 이상의 원소가 있는 것-True
  • 숫자
print(bool(10), bool(0), bool(-20))

# 출력 : True False True
  • 문자열
print(bool(""), bool("Abc"), bool("A"), bool(" "))

# 출력 : False True True True
  • None
bool(None)

# 출력 : False

input()

input() : 사용자로부터 문자열을 입력받을 수 있다.

# 이름을 입력받은 뒤 입력 받았는지 여부를 출력
name = input("이름: ")
print(bool(name))

# 이름 : 유재석
# True

크기 비교하기

# 숫자 비교

10 > 5 # True
# 문자열 비교

"a" > "b" # True
name = "홍길동"

print(name == "홍길동") # True
print(name != "홍길동") # False
# 숫자 < 대문자 < 소문자 < 한글 #문자열크기-unicode 값 크기로 비교

"a" > "가" # False
# ord() : 하나의 문자를 인자로 받고 해당 문자에 해당하는 유니코드 정수를 반환

ord("A"), ord("a") # (65, 97)

조건문 사용하여 비교하기

# 비교할 데이터 입력
age = 20
name = "강동원"

and 연산자 사용

and : 조건에 "모두" 해당하면 True

and 또는 & 사용. & 사용시 피연산자를 소괄호( )로 묶어준다.

# 나이가 19세 이상이고 이름은 홍길동인가?
age >= 19 and name == "홍길동" 
(age >= 19) & (name =="홍길동")

# 결과 : False

or 연산자 사용

or : 조건 중 "하나만" 해당되어도 True

or 또는 | 사용. | 사용시 피연산자를 소괄호( )로 묶어준다.

# 나이가 19세 이상이거나 이름이 홍길동인가?
age >= 19 or name == "홍길동" #False
(age >= 19) | (name == "홍길동") #False

# 결과 : True


- String(문자열)

  • 문자열은 '' 또는 "" 를 이용하여 입력한다.
name = "홍길동"
address = '서울시 종로구'
print(type(name), type(address))

# <class 'str'> <class 'str'>

\n : 줄 바꿈 기능

info1 = "이름: 홍길동\n나이: 20\n주소: 부산"
print(info1)

# 이름: 홍길동
# 나이: 20
# 주소: 부산

docstring : 여러줄인 문자열 입력시 """ """ 사이에 문장을 입력 (함수, 클래스 설명 작성시에도 사용, 줄바꿈 기능도 함께 적용된다.)

info2 = """이름: 홍길동
나이: 20
주소: 부산"""
print(info2)

# 이름: 홍길동
# 나이: 20
# 주소: 부산

escape 문자 : 문자열 내에서 특수한 기능을 수행하는 문자

print("C:\class\01_파이썬기초")
# C:\class_파이썬기초 : \는 escape 문자여서 정상 출력되지 않는다.

print("C:\\class\\01_파이썬기초")
# C:\class\01_파이썬기초 : 경로 정상 출력

raw string : 문자열내의 escape 문자 무시

  • 문법 : r"문자열"
path = r"c:\test\name\backup"
print(path)

# c:\test\name\backup

in 연산자

# in 연산자 : ex) where name in ('a', 'b')
# 비교문자열 in 대상문자열 => 대상문자열에 비교문자열이 있는지 여부
address = "서울특별시 영등포"

#address에 "종로"라는 문자열이 있는지 여부 bool으로 반환
print("종로" in address) 
print("영등포" in address)

# False, True
# not in : in의 반대, 없으면 true
print('종로' not in address)
print('영등포' not in address)

# True, False

len() : 글자 수 조회 함수

len("문자열"), len("asdfasadfhadfhgsd")
# (3, 17)

📣 indexing, slicing

indexing, slicing을 이용하여 문자열을 조회할 수 있다.

- Indexing

s = "안녕하세요. 반갑습니다."

#indexing : 한글자를 조회
print("세번째글자: " + s[2])

# 세번째글자: 하

문자의 가장 마지막 글자부터 역 순으로 조회 가능 (맨 마지막 글자 : -1)

print("뒤에서 두번째 글자: ", s[11])
print("뒤에서 두번째 글자: ", s[-2])

# 뒤에서 두번째 글자:  다
# 뒤에서 두번째 글자:  다

특정 index의 값 변경은 불가능하다.

s[0] = "밖"

# 에러 발생

- Slicing

slicing 문법 : [시작idx : 종료idx : 간격]

s2 = '0123456789'
print(s2[2:8:1])

# 234567
print(s2[2:-2:1]) #앞에서 2번째 idx ~ 뒤에서 두번째 idx, 한 글자 씩 증가

# 246
print(s2[8:2:-1]) # reverse, 역 순으로 증가

# 876543

시작과 종료 값, 간격 생략도 가능하다.
# 간격 생략 : dafault: 1
s2[1:9]

# '12345678'
# 시작 index 생략 - default: 0
s2[:8]

# '01234567'
# 종료 index 생략 - default: 마지막 index + 1 (마지막 index까지 다 가져오기)
s2[2:]

# '23456789'

Slicing 활용
s2[:] # 0 ~ 마지막, 1씩 증가
# '0123456789'

s2[::-1] # 전체 reverse
# '9876543210'

📋 문자열 Formatting

복잡한 문자열의 형식화(string formatting)을 이용하는 방법은 format 메서드 , f 문자열 , % 기호 세가지가 있다.
다음 "홍길동"의 정보를 출력해보자.

# 홍길동의 정보
name = "홍길동"
address = "서울"
tel = "010-1111-2222"
age = 20
tall = 180.32
print("이름: "+name+"\n주소: "+address + tel + str(age) + str(tall))

# 이름: 홍길동
# 주소: 서울010-1111-222220180.32
  • format 사용
layout = "이름: {}\n주소: {}\n전화번호: {}\n나이: {}\n키: {}"
print(layout.format(name, address, tel, age, tall))

# 이름: 홍길동
# 주소: 서울
# 전화번호: 010-1111-2222
# 나이: 20
# 키: 180.32
print(layout.format(name, address, tel, age, tall))
print("이름: {}\n주소: {}\n전화번호: {}\n나이: {}\n키: {}".format(name, address, tel, age, tall))
# 동일하게 출력된다.
  • f-string(f문자열) 사용
print(f'이름: {name}\n주소: {address}\n나이: {age}\n키: {tall:.1f}')

# 이름: 홍길동
# 주소: 서울
# 전화번호: 010-1111-2222
# 나이: 20
# 키: 180.32
  • % 기호 사용
print("이름: %s, 주소: %s, 나이: %d, 키: %.2f" % (name, address, age, tall))

# 이름: 홍길동, 주소: 서울, 나이: 20, 키: 180.32
v = "이름: %s, 주소: %s, 나이: %d, 키: %.2f" % (name, address, age, tall)
print(v)

# 이름: 홍길동, 주소: 서울, 나이: 20, 키: 180.32


profile
개발이란 뭘까

0개의 댓글