본문 바로가기
알아두면쓸데있는신기한잡학사전/고군분투흔적들

[Web] Python - 기초 문법

by 대범하게 2022. 8. 22.
반응형

파이썬이란

: 네덜란드의 프로그래머 Guido van Rossum이 '읽기 쉬운 코드'에 중점을 두어 개발한 프로그래밍 언어이다.

 

- '읽기 쉽게' 만든 언어이기 때문에, 문법이 쉬어 초보자가 배우기 좋은 언어이다.

- 무료/오픈소스로 운영되고 커뮤니티가 크기 때문에 자연어처리, 머신러닝 등 직접 구현하기 어려운 기능들도 다른 개발자의 라이브러리를 이용해 쉽게 코드를 작성할 수 있다. 


파이썬 설치

: 컴퓨터는 010000011과 같은 신호만 알아들을 수 있으므로 사람이 쓰는 파이썬 문법으로 된 글을 0과 1로 된 신호로 변환해주어야 한다. 이 '번역 패키지'를 설치하는 과정이다.

 

cmd 혹은 PowerShell 창에 python3을 입력해보고

python이 설치되어 있다면 다음과 같은 화면이 나올 것이다. 

Python이 설치되어 있지 않다면 Microsoft Store에서 무료 구매 및 설치 혹은 직접 python.org에서 download받아 설치할 수 있다. 


파이썬 기초 문법

변수 선언

- 자바스크립트와 다르게 새 변수를 만들 때 let을 쓰지 않고 출력할 때는 print()를 쓴다.

a = 3        # 3을 a에 넣는다
print(a)
b = a        # b에 3을 넣는다.
print(b)
a = 5        # a에 5라는 새로운 값을 넣는다.
print(a, b)  # 5 3

- 콘솔창에서는 print()함수를 쓰지 않고 변수 이름만 적고 실행해도 저장된 값을 볼 수 있다.

a = 3
a  # 3이 출력된다.

자료형과 기본 연산

1) 숫자형

- 숫자를 값으로 가질 수 있으며, 정수, 실수 모두 가능

- 숫자 간에는 사칙연산이 가능하다. 몫과 나머지도 구할 수 있다.

a = 7
b = 2

a + b   # 9 
a - b   # 5
a * b   # 14
a / b   # 3.5
a // b  # 3 (몫)
a % b   # 1 (나머지)
a ** b  # 49 (거듭제곱)

a + 3 * b # 13 (여러 연산을 한 줄에 할 경우 사칙연산의 순서를 따른다.)

- 변수에 저장된 값에 연산을 한 후 다시 그 값을 같은 변수에 저장할 수 있다. 자바스크립트와 다르게 증감연산자(i++, i--등)은 없다.

a = 5
a = a + 3 # 5에 3을 더한 값을 다시 a에 저장
print(a)  # 8

a += 1    # 줄여 쓸 수도 있다. 8에 1을 더해 9를 a에 저장. 사칙연산 다 가능하다.

2) 문자열

- 글씨를 따옴표로 감싸 문자열 자료형으로 정의할 수 있다.

작은따옴표(' ')와 큰 따옴표(" ") 모두 사용할 수 있고 짝이 맞아야 한다.

- 문자열에 따옴표가 포함될 경우, 다른 종류이 따옴표를 써서 문자열을 정의할 수 있다. 

word1 = "jungle"
word2 = 'coding'

# 문자열에 따옴표가 포함된 경우 다른 종류의 따옴표 사용
mac = "McDonald's" 
sentence = 'He said, "Hello!"'

 

- 따옴표로 감싸지 않으면 변수명으로 인식한다. 

a = 1
b = "a"
c = a
print(a, b, c) # 1 "a" 1

d = x          # x라는 변수가 정의되지 않았기 때문에 에러메시지가 나온다.
d = "x"

 

- 문자열 간의 더하기는 두 문자열을 이어붙인 문자열을 반환한다.

first_name = "Harry"
last_name = "Potter"

first_name + last_name # HarryPotter
first_name + " " + last_name # Harry Potter

a = "3"
b = "5"
a + b    # 35 문자열 간의 덧셈이기 때문에 앞뒤로 이어붙인 문자열이 반환된다.

a + 5    # 파이썬에서는 문자열과 숫자형은 더할 수 없다
a * 5    # 33333 a*5는 a+a+a+a+a과 같으므로 "3"이 5번 반복되는 문자열이 반환된다.

 

- 파이썬으로도 미리 정해져 있는 메소드를 이용하여 다양한 연산이 가능하다.

  - 모든 알파벳을 대문자로 바꾸기 => upper()

myname = "jungle"

myname.upper() # JUNGLE

  - 특정 문자를 기준으로 문자열을 나누고 싶은 경우 => split()

# 이메일 주소에서 도메인 'gmail'만 추출하기
myemail = 'test@gmail.com'

result = myemial.split('@') # ['test', 'gmail.com'] ('리스트'!)

result[0] # test (리스트의 첫 번째 요소)
result[1] # gmail.com (리스트의 두 번째 요소)

result2 = result[1].split('.') # ['gmail', 'com']

result2[0] # gmail -> 우리가 알고 싶었던 것
result2[0] # com

# 한 줄로 쓸 수도 있다.
myemail.split('@')[1].split('.')[0]

특정 문자를 다른 문자로 바꾸기 => replace()

txt = '서울시-마포구-망원동'
result = txt.replace('-', '>') # 서울시>마포구>망원동

3) 불 자료형

- 참, 거짓을 나타내는 불 자료형

- 첫 글자가 대문자여야 한다.

x = True   # 참
y = False  # 거짓

# 소문자로 쓰면 자료형으로 인식하지 않고 변수명이라 생각해 에러가 난다.
z = true   # name 'true' is not defined

# 비교연산자
4 > 2      # True  크다
5 < 1      # False 작다
6 >= 5     # True  크거나 같다
4 <= 4     # True  작거나 같다
3 == 5     # False 같다
4 != 7     # True  같지 않다

 

- 불 자료형에는 논리연산자를 이용할 수 있다.

a = 4 > 2  # True
not a      # False    NOT 연산자로 참을 거짓으로, 거짓을 참으로 바꿔준다.

b = 2!=2   # False

a and b    # False    AND 연산자로 모두 참이어야 참을 반환한다.
a or b     # True     OR 연산자로 둘 중 하나만 참이면 참이다.

4) 리스트와 딕셔너리

- 파이썬의 리스트와 딕셔너리는 자바스크립트와 비슷하다.

a_list = []
a_list.append(1) # 리스트에 값을 넣는다.
a_list.append([2, 3]) # 리스트에 [2, 3]이라는 리스트를 다시 넣는다.

a_list # [1, [2, 3]]
len(a_list) # 2 리스트의 길이
a_list[0] # 1
a_list[1] # [2, 3]
a_list[1][0] # 2
a_dict = {}
a_dict = {'name':'bob', 'age':21}
a_dict['height'] = 178

# a_dict의 값은? {'name':'bob', 'age':21, 'height':178}
# a_dict['name']의 값은? 'bob'
# a_dict['age']의 값은? 21
# a_dict['height']의 값은? 178
people = [{'name':'bob', 'age':20}, {'name':'carry', 'age':38}]

# people[0]['name']의 값은? 'bob'
# people[1]['name']의 값은? 'carry'

person = {'name':'john', 'age':7}
people.append(person)

# people의 값은? [{'name':'bob', 'age':20}, {'name':'carry', 'age':38}, {'name':'john', 'age':7}]
# people[2]['name']의 값은? 'john'

 

- 리스트 간의 덧셈과 자연수 곱셈이 정의되어있다.

a = [3, 3, 1]
b = [5, 2]

a + b  # [3, 3, 1, 5, 2]
a * 2  # [3, 3, 1, 3, 3, 1]

함수

- 함수의 정의

# 수학문제에서
f(X) = 2*x+3
y = f(2)
y의 값은? 7

# 참고: 자바스크립트에서는
function f(x){
	return 2*x+3
}

# 파이썬에서는
def f(x):
	return 2*x+3 # 중괄호 대신에 들여쓰기로 각 블록의 범위를 표시한다.
    
f(2) # 7

 

- 함수의 응용

def sum_all(a, b, c):
	return a+b+c
    
def mul(a, b):
	return a*b
    
result = sum_all(1, 2, 3) + mul(10, 10)

조건문

if / else로 구성!

def oddeven(num):	# oddeven이라는 이름의 함수를 정의한다. num을 변수로 받는다.
	if num % 2 == 0:	# num을 2로 나눈 나머지가 0이면
    	return True		# True(참)을 반환한다.
    else:
    	return False	# False(거짓)을 반환한다.

result = oddeven(20) # True
def is_adult(age):
	if age > 20:
    	print('성인입니다')	# 조건이 참이면 성인입니다를 출력
    else:
    	print('청소년이에요')	# 조건이 거짓이면 청소년이에요를 출력

is_adult(30) 	# 성인입니다

 

- else if는 elif로 줄여쓴다.

def is_adult(age):
	if age > 20:
    	print('성인입니다')
    elif age >= 13:
    	print('청소년이에요')
    else:
    	print('어린이네요!')	

is_adult(30) 	# 성인입니다

반복문

파이썬에서의 반복문은, 리스트의 요소들을 하나씩 꺼내쓰는 형태이다.

# 예를 들어, 아래와 같이 리스트의 각 요소에 대해서 다음과 같이 반복문을 쓸 수 있다.

fruits = ['사과', '배', '감', '귤']

for fruit in fruits:
	print(fruit)

# 사과
# 배
# 감
# 귤

# 자바스크립트 식으로 쓰면 아래처럼 나타낼 수 있다.

fruits = ['사과', '배', '감', '귤']

for i in range(len(fruits)):
	fruit  = fruits[i]
    print(fruit)

# 사과
# 배
# 감
# 귤

파이썬 응용문제

Q1. 과일 갯수 세기 함수 만들기

과일 이름이 들어있는 리스트가 있을 때, 특정 과일이 몇 개 들어있는지 세는 함수

fruits = ['사과','배','배','감','수박','귤','딸기','사과','배','수박']

fruits = ['사과','배','배','감','수박','귤','딸기','사과','배','수박']

# 사과의 갯수 세기

# count = 0
# for fruit in fruits:
#     if fruit == '사과'
#         count += 1

# print(count) 

# 사과가 아닌 다른 과일에 대해서도 쓸 수 있도록 함수 만들기

def count_fruits(target):
    count = 0
    for fruit in fruits:
        if fruit == target:
            count += 1
    return count

subak_count = count_fruits('수박')
print(subak_count)

gam_count = count_fruits('감')
print(gam_count)

 

Q2. 사람의 나이 출력하기

각 사람의 이름과 나이가 든 딕셔너리가 각각의 요소인 리스트가 있을 때,

 이름을 넣으면 나이를 돌려주는 함수를 만들어보라.

people = [{'name': 'bob', 'age': 20}, 
          {'name': 'carry', 'age': 38},
          {'name': 'john', 'age': 7},
          {'name': 'smith', 'age': 17},
          {'name': 'ben', 'age': 27}]


def get_age(myname):
    for person in people:
        if person['name'] == myname:
            return person['age']
    return '해당하는 이름이 없습니다'

print(get_age('bob'))
print(get_age('kay'))
반응형