<파이썬 문법 기초 1-1> 변수, 자료형, 포맷팅

이용헌·2021년 12월 15일


학습 내용 요약

  1. 변수, 매개변수
  2. 자료형
  3. 포맷팅

1. 변수, 매개변수

1) 변수
변수는 값을 담는 박스이며, 값이 담긴 위치를 가리키는 것이다. 변수에는 숫자, 문자, Bool자료형, 배열 등 여러 값을 담을 수 있다. 숫자값은 사칙연산이 가능하고, 변수끼리 비교 연산도 가능하다. (단, 숫자와 문자처럼 일부는 대소를 비교할 수 없다.)

  • 코드 예시
a = 3.5
b = 4
c = 'practice'
d = 'k'
e = True
f = [1,3,6,3]

print(a+b) 	
print(a**b)	-> a의 b제곱
print(a//b)	-> a를 b로 나눈 몫
print(a%b)	-> a를 b로 나눈 나머지

print(a > b)
print(c == f)	-> 같은지 비교
print(d != e)	-> 다른지 비교
  • 문자열
    복수의 문자로 이뤄진 형태로 문자열끼리 '+'로 연결할 수 있다. 문자열에 다양한 함수를 쓸 수 있는데 아래 예시를 보자.

  • 코드 예시

first_name = 'yongheon'
last_name = 'lee'
print(first_name, last_name)	-> yongheon lee
print(first_name + last_name)	-> yongheonlee

text = 'abcdefghi'
result = len(text)		-> 문자열 길이
print(result)			-> 9

sentence = 'Python is Fun'
print(sentence.upper())		-> 전체 대문자
print(sentence.lower())		-> 전체 소문자

s = sentence.find('g')		-> 특정 문자 찾기
print(s)			-> 있으면 출력, 없으면 '-1' 출력

result = text[1]		-> 인덱싱(처음은 0)
print(result)			-> b
result = text[3:]		-> 슬라이싱(앞숫자 <= 출력 < 뒤숫자)
print(result)			-> defghi

myemail = 'qnpfr@daum.net'
result = myemail.split('@')	-> 특정 문자 기준으로 문자열 나누기
print(result)			-> ['qnpfr','daum.net']

txt = '부산시-사하구-하단동'
print(txt.replace('-','>'))	-> 특정 문자 다른 문자로 교체

2) 매개변수
함수를 만들 때, 함수에 전달하는 입력값을 담는 변수이다. 여기서 함수에 전달하는 입력값은 인수라고 한다.

  • 코드 예시
def cal(a,b=3):		-> a,b가 매개변수
    return a+b
    
print(cal(1,3))		-> 1,3이 인수

def cal(c,d):
	return c*d+2
    
print(cal(d=7,c=2))

위의 'b=3'처럼 매개변수에 기본값을 정해놓을 수도 있고, 매개변수별로 넣을 값을 지정할 수도 있다.

  • 변동매개변수, 키워드매개변수
    여러 인수를 받는 변수를 변동매개변수라고 하고, 키워드별로 인수를 받는 변수를 키워드매개변수라고 한다. 보통 각각 *args, **kwargs로 표현한다.

  • 코드 예시

def call_names(*args):
    for name in args:
        print('{}야 밥무라~'.format(name))

call_names('철수','영수','민수','준수')

def get_kw(**kwargs):
    print(kwargs)

get_kw(name='jung')
get_kw(name='bob',age=46,gender='M',height=187)

2. 자료형, 포맷팅

1) 자료형
파이썬에는 여러 자료형이 있다. 위에서 봤듯이 숫자, 문자, Bool 등이 있고, 이번에 볼 군집 자료형도 있다.

(1) 리스트
리스트는 순서O, 중복O, 변경O의 특징을 갖고 있고, 숫자, 문자(열), Bool, 리스트 등 원소를 복합적으로 동시에 넣을 수 있다.

  • 코드 예시
b_list = ['사과',2,True,['감','수박'],{'name':'hajin'}]
print(b_list[3][0])
  • 리스트에서 쓸 수 있는 함수는 아주 다양하다. 일부만 살펴보자.
c_list = [1,4,7,3,2]
c_list.append(8) 	-> 리스트에 원소 추가(마지막에 추가)
print(c_list)

c_list.insert(3,4)	-> 리스트에 원소 추가(앞숫자 위치에 뒤의 값 추가)
print(c_list)

result1 = c_list[-1]	-> 뒤에서 첫 번째 값
print(result1)
print(len(result1))	-> 리스트 길이 구하기

d_list = [86,51,8,6,48,18]
d_list.sort(reverse=True) -> 리스트 정렬(옵션:내림차순)
print(d_list)
result2 = 51 in d_list 	  -> 리스트 내 값 유무 확인
print(result2)

c_list.extend(d_list) 	  -> 리스트 확장(리스트끼리 합침)
print(c_list)

d = c_list.count(8)	  -> 원소 개수 세기
print(d)

c = c_list.index(4,1) 	  -> 원소 위치 번호 찾기(찾는 값,시작 위치)
print(c)

c_list.remove(4) 	  -> 특정 원소 제거
print(c_list)

c_list.pop(4) 		  -> 특정 위치의 원소 제거
print(c_list)

d_list.clear() 		  -> 모든 원소 제거
print(d_list)

f = d_list.copy() 	  -> 리스트 복사(주소값은 다름., 다른 값!)
print(f)

(2) 딕셔너리
key, value를 쌍으로 함께 담는 자료형이다. 순서X, 중복X(key), 변경O가 가능한 특징을 가지며, 순서가 없기 때문에 인덱싱이 불가능하다. 대신, key로 value를 찾을 수 있다.

  • 코드 예시
a_dict = {'name':'kaila', 'age':48}
result = a_dict['name'] 	 -> key로 value값을 찾음
print(result)

a_dict['friend'] = ['she','has'] -> 딕셔너리 추가
print(a_dict)
  • 리스트와 함께 조합해서 사용할 수도 있다. 그러면 원소를 쌍으로 저장하면서 리스트의 순서 특징을 살려 인덱싱도 이용할 수 있다.
  • 코드 예시
people = [{'name':'kim','age':8},
          {'name':'lee','age':48}]
print(people[1]['age'])

(3) 튜플
리스트와 비슷한 형태지만, 변경X의 특징이 다르다. 그래서 데이터를 변경할 일이 없을 때 이 자료형을 쓴다.

  • 코드 예시
a = (1,2,3)
a[0] = 99	-> 변경 불가능이므로 에러 발생

a_dict = [('bob',24),('carry',30),('smith',48)]
print(a_dict[1][1])

(4) 집합
순서X, 중복X, 변경O의 특징이 있는 자료형이다. 순서가 없으니 물론 인덱싱 및 슬라이싱은 불가능하다. 집합의 특성상 합집합, 교집합, 차집합의 연산이 가능하다.

  • 코드 예시
a = [1,2,2,2,4,4,4,6,7,4,3,2,5,1,1,3]
a_set = set(a)
print(a_set)			-> {1,2,3,4,5,6,7}

a_set = {'사과','배','귤','감','수박'}
b_set = {'사과','귤','포도','체리'}

print(a_set or b_set) 		-> '|', a.union(b)과 같은 의미
print(a_set & b_set) 		-> 'and', a.intersection(b)과 같은 의미
print(a_set.difference(b_set))  -> '-'과 같은 의미

2) 포맷팅
값을 출력할 때 특정 형식에 맞춰 출력하도록 만들 수도 있다. 그 작업을 포맷팅이라고 한다. 포맷팅을 하는 방식을 아주 다양하니 외울 수는 없고, 자주 쓰는 몇 가지만 눈에 익혀두면 좋겠다.

  • 코드 예시
scores = [{'name':'bob','score':70},
          {'name':'jim','score':80},
          {'name':'john','score':10}]

for student in scores:
    name = student['name']
    score = student['score']
    print('{0}은 {1}점입니다.'.format(name,score))
    print('%s는 %d점입니다.'%(name,score))
    print(f'{name}{score}점입니다.')

어렵거나 완전히 이해 못한 내용

솔직히 대충 어떤 것들이 있는지 아는 편이지만, 실제로 이를 활용하고 응용할 수 있는지 물어본다면 굉장히 미숙하다고 할 것이다. 아는게 다가 아니고, 어떻게 활용할 수 있는지 그리고 이를 얼마나 응용할 수 있는지가 남겨진 숙제다.

profile
세상에 기여하는 개발자가 되자

0개의 댓글