들어가며
저는 마크업과 프론트엔드 작업을 하고 있어서 파이썬을 사용할 일이 없었습니다. 그러다 팀 과제를 하면서 제가 작성한 코드가 제대로 동작하는지 테스트 해보고 싶어졌고, 방법을 찾다가 파이썬을 알게 되었습니다. 처음엔 낯선 언어여서 AI의 도움을 받아 코드를 작성하고 테스트를 해봤는데 결과를 바로바로 확인할 수 있어서 정말 편하더라고요. 그러면서 파이썬이 궁금해져서 알아보기 시작했습니다.
작업하면서 저처럼 스쳐지나가듯 파이썬을 경험해보신 분들이나, 저처럼 아예 몰랐던 분들께 조금이나마 도움이 될까 싶어 공부한 내용을 정리해봤습니다.
(참고로 저는 "100 Days of Code: The Complete Python Pro Bootcamp"라는 강의를 듣고 있습니다.)
파이썬 설치하기
코드를 작성하려면 먼저 파이썬을 설치해야 하겠죠?
Mac을 쓰시는 분이라면 이미 파이썬이 깔려 있을 수 있습니다. 터미널을 열어서 아래 명령어를 입력했을 때,
python3 --versionPython 3.x.x 같은 버전 정보가 나오면 이미 설치되어 있는 겁니다. 나오지 않는다면 아래 단계를 따라 설치하면 됩니다.
설치 방법
python.org에 접속해서 운영체제에 맞는 최신 버전을 다운로드하면 됩니다. 설치 과정은 일반적인 프로그램 설치와 동일합니다.
Windows를 사용하시는 분은 설치할 때 "Add Python to PATH" 체크박스가 보이면 꼭 체크해주세요. 이걸 빠뜨리면 터미널에서 파이썬을 실행할 수 없습니다.
코드 실행해보기
에디터에서 파일을 하나 만들고 (예:
hello.py) 아래 코드를 작성한 뒤에print("Hello World")터미널에서 다음과 같이 실행하면,
python3 hello.pyHello World가 출력되는 것을 확인하실 수 있을 것입니다.
파이썬 시작하기
1. print와 input
print()
먼저 살펴볼 건
print()입니다. 코드를 작성하다 보면 "이 값이 지금 뭐지?", "여기까지 제대로 실행된 건가?" 같은 순간이 자주 오는데, 그때 print()로 값을 출력해보면 바로 확인할 수 있습니다. 결과를 눈으로 확인하는 가장 기본적인 방법이라 제일 먼저 알아두면 좋습니다.print("Hello World")이렇게 쓰면 화면에
Hello World가 출력됩니다.
input()
input()은 프로그램 실행 중에 사용자로부터 값을 입력받는 함수입니다. 예를 들어 이름을 물어보고, 그 이름을 활용해서 인사를 출력하는 식으로 쓸 수 있습니다.name = input("이름이 뭐예요? ")
print("안녕하세요, " + name + "!")
여기서
name은 변수인데, 입력받은 값을 담아두는 역할을 합니다. 나중에 name이라고 쓰면 그 안에 저장된 값을 꺼내 쓸 수 있습니다.
2. 타입과 연산
타입
파이썬에서 다루는 데이터에는 여러 타입(종류)이 있습니다. 숫자끼리 계산해야 할 때도 있고, 글자를 다뤄야 할 때도 있는데, 파이썬은 이걸 타입으로 구분합니다.
| 타입 | 설명 | 예시 |
| 문자열(String) | 글자들의 모음 | "Hello", "안녕" |
| 정수(Integer) | 소수점 없는 숫자 | 1, 42, 100 |
| 실수(Float) | 소수점 있는 숫자 | 3.14, 0.5 |
| 불린(Boolean) | 참 또는 거짓 | True, False |
지금 다루고 있는 데이터가 어떤 타입인지 확인하고 싶을 때는
type()을 사용하면 됩니다. 뭔가 타입을 보면 자바스크립트 같기도, 자바 같기도...print(type("Hello")) # <class 'str'>
print(type(123)) # <class 'int'>
print(type(3.14)) # <class 'float'>
print(type(True)) # <class 'bool'>
문자열 다루기
저희에겐 너무 익숙한 문자열인데요. 스크립트와 사용법이 유사합니다.
"Hello"[0] # "H" - 첫 번째 글자
"Hello"[-1] # "o" - 마지막 글자
len("Hello") # 5 - 글자 수
예시 코드를 보면
len()이라는 내장 함수가 보이시나요? 자바스크립트의 .length와 같습니다.
그리고 문자열을 변환하는 메서드도 있는데요. 보시면 메서드들이 익숙하실 것 같습니다.
"hello".upper() # "HELLO" - 대문자로
"HELLO".lower() # "hello" - 소문자로
" hi ".strip() # "hi" - 앞뒤 공백 제거
.lower()는 위에 설명한 input()을 사용하여 사용자 입력을 받을 때 유용합니다. 예를 들어 "yes"를 입력받아야 하는데 사용자가 "YES"나 "Yes"라고 입력할 수도 있잖아요. 이럴 때 .lower()로 소문자로 통일하면 모든 경우를 처리할 수 있습니다.answer = input("계속하시겠습니까? (yes/no) ").lower()
if answer == "yes":
print("계속합니다!")
타입 변환하기
문자를 숫자로, 숫자를 문자로 바꿀 수 있습니다.
str(123) # "123" - 숫자를 문자로
int("456") # 456 - 문자를 정수로
float("3.14") # 3.14 - 문자를 실수로
이게 왜 필요하냐면...
input()으로 받은 건 무조건 문자열이기 때문입니다.예를 들어 숫자
123을 입력해도 "123"처럼 문자로 들어옵니다. 그래서 계산하려면 int()로 바꿔줘야 합니다.
연산자
파이썬에서는 기본적인 사칙연산 외에도 다양한 연산자를 지원합니다.
print(3 + 5) # 8 (더하기)
print(7 - 4) # 3 (빼기)
print(3 * 2) # 6 (곱하기)
print(6 / 3) # 2.0 (나누기 - 항상 소수점이 나옵니다!)
print(6 // 3) # 2 (나누기 - 정수만)
print(2 ** 3) # 8 (제곱 - 2의 3승)
참고로
/로 나누면 무조건 소수점이 나옵니다. 6 / 3을 해도 2.0이 나옵니다. 정수로 받고 싶으면 //를 써야 합니다.그 외 유용한 함수들
round(3.14159, 2) # 3.14 (소수점 둘째 자리까지 반올림)
abs(-5) # 5 (절대값)
f-string
변수 값을 문자열 안에 넣고 싶을 때
+로 일일이 연결하면 코드가 길어지고 읽기도 불편합니다. f-string을 쓰면 f"..." 안에 {변수}를 바로 넣을 수 있어서 훨씬 깔끔합니다.${} 와 같은 코드라고 보시면 될 것 같아요. (저는 이 부분이 조금 신기했습니다 ㅎ)name = "혜름"
age = 25
print(f"제 이름은 {name}이고, 나이는 {age}살입니다.")
3. 조건문
if, elif, else
코드를 작성하다 보면 특정 조건에 따라 다른 동작을 하게 만들어야 할 때가 있습니다. 예를 들어 사용자의 입력값에 따라 다른 결과를 보여준다거나, 특정 값이 기준을 넘는지 확인하는 경우입니다.
height = int(input("키가 몇 cm예요? "))
if height >= 120:
print("놀이기구 탑승 가능")
else:
print("놀이기구 탑승 불가")
if 다음에 조건을 쓰고, 그게 맞으면(참이면) 아래 코드가 실행됩니다. 아니면 else 쪽이 실행됩니다조건이 여러 개면
elif를 씁니다. (자바스크립트에 비해 축약이 된 느낌이에요.)age = int(input("나이가 몇 살이에요? "))
if age < 20:
print("미성년자입니다")
elif age < 65:
print("성인입니다")
else:
print("경로 우대 대상입니다")
파이썬에서는 들여쓰기가 정말 중요합니다. 해당 코드가 어디에 속하는지를 들여쓰기로 구분하기 때문에, 꼭 확인해주어야 할 부분이에요. (중요!!)
4. 리스트와 랜덤
리스트
여러 개의 데이터를 하나의 변수에 묶어서 관리하고 싶을 때 리스트를 사용합니다. 예를 들어 과일 이름 세 개를 각각 변수로 만들면 번거롭지만, 리스트로 묶으면 하나로 관리할 수 있습니다.
fruits = ["사과", "배", "포도"]
print(fruits[0]) # "사과" - 첫 번째
print(fruits[-1]) # "포도" - 마지막
[0]처럼 인덱스로 특정 위치의 값을 꺼낼 수 있고, -1을 쓰면 마지막 값을 바로 가져올 수 있습니다.fruits.append("딸기") # 마지막에 추가
print(fruits) # ["사과", "배", "포도", "딸기"]
리스트에서 특정 값의 위치를 찾을 수도 있습니다.
fruits = ["사과", "배", "포도"]
fruits.index("배") # 1 - "배"가 몇 번째에 있는지
이건 암호화 같은 걸 만들 때 유용합니다. 알파벳 리스트에서 특정 글자의 위치를 찾고, 그 위치를 이동시켜서 다른 글자로 바꾸는 식으로요.
리스트 안에 리스트를 넣을 수도 있습니다 (중첩 리스트).
matrix = [
[1, 2, 3],
[4, 5, 6]
]
print(matrix[0][1]) # 2 - 첫 번째 리스트의 두 번째 값
random 모듈
무작위 값이 필요할 때 사용하는 모듈입니다. 비밀번호 생성기처럼 랜덤한 값을 뽑아야 하거나, 리스트의 순서를 섞어야 할 때 유용합니다.
import random을 먼저 써야 사용할 수 있습니다.import에 대한 부분은 8.모듈 쪽에 설명해두었습니다.import random
random.randint(1, 10) # 1~10 중 무작위 정수
random.random() # 0~1 사이 무작위 실수
random.choice(fruits) # 리스트에서 무작위로 하나 선택
random.shuffle(fruits) # 리스트 순서를 섞기
5. for와 while
for
(아시는 것이겠지만...) 같은 작업을 여러 번 해야 할 때 일일이 코드를 반복해서 쓰면 비효율적입니다.
for를 쓰면 리스트에 있는 값들을 하나씩 꺼내면서 같은 작업을 반복할 수 있습니다.fruits = ["사과", "배", "포도"]
for fruit in fruits:
print(fruit)
# 사과
# 배
# 포도
range()와 같이 쓰면 숫자로 반복할 수 있습니다.for i in range(5):
print(i) # 0, 1, 2, 3, 4
for i in range(1, 11):
print(i) # 1부터 10까지
for i in range(1, 11, 2):
print(i) # 1, 3, 5, 7, 9 (2씩 증가)
while
for는 반복 횟수가 정해져 있을 때 쓰지만, while은 특정 조건이 만족되는 동안 계속 반복합니다. 예를 들어 사용자가 "종료"를 입력할 때까지 프로그램을 계속 실행시키고 싶을 때 사용할 수 있습니다.count = 0
while count < 5:
print(count)
count += 1
다만 조건이 영원히 참이면 무한 반복에 빠지기 때문에, 반복이 끝나는 조건을 잘 설정해야 합니다.
6. 함수
함수 정의하기
같은 코드를 여러 곳에서 반복해서 쓰고 있다면, 함수로 만들어두면 한 번 정의해놓고 필요할 때마다 호출해서 쓸 수 있습니다.
def greet():
print("안녕하세요!")
print("반갑습니다!")
greet() # 함수 호출
greet() # 또 호출 가능
매개변수
함수를 호출할 때 값을 넘겨주면, 함수 안에서 그 값을 사용할 수 있습니다. 이때 넘겨주는 값을 매개변수라고 합니다. (어디에나 동일한 개념이죠.)
def greet(name):
print(f"안녕하세요, {name}님!")
greet("혜름") # "안녕하세요, 혜름님!"
greet("연주") # "안녕하세요, 연주님!"
매개변수는 여러 개도 가능합니다.
def greet(name, time):
print(f"{time}이에요, {name}님!")
# 위치로 구분 (positional arguments)
greet("혜름", "아침")
# 이름으로 지정 (keyword arguments)
greet(time="저녁", name="연주")
return
함수가 단순히
print()로 출력만 하는 게 아니라, 처리한 결과를 돌려줘야 할 때가 있습니다. 그때 return을 사용합니다. 돌려받은 값은 변수에 저장해서 다른 곳에서 활용할 수 있습니다.def add(a, b):
return a + b
result = add(3, 5)
print(result) # 8
7. 딕셔너리
Key-Value 쌍
리스트는 데이터를 순서대로 저장하지만, 데이터에 의미 있는 이름을 붙여서 관리하고 싶을 때는 딕셔너리가 더 적합합니다. 딕셔너리는 키(key)와 값(value)을 쌍으로 저장합니다.
자바스크립트와 명칭이 다를 뿐, 오브젝트와 같다고 이해하시면 될 것 같아요.
student = {
"이름": "혜름",
"나이": 20,
"성적": 85
}
print(student["이름"]) # "혜름"
print(student["나이"]) # 20
리스트는
[0], [1]처럼 순서로 접근하지만, 딕셔너리는 ["이름"]처럼 키로 접근합니다. 값을 추가하거나 수정하는 것도 간단합니다.student["주소"] = "서울" # 추가
student["나이"] = 21 # 수정
딕셔너리 안에 딕셔너리를 넣을 수도 있습니다 (중첩 딕셔너리).
users = {
"혜름": {
"나이": 20,
"취미": ["필라테스", "게임"]
},
"연주": {
"나이": 22,
"취미": ["필라테스"]
}
}
print(users["혜름"]["나이"]) # 20
print(users["혜름"]["취미"][0]) # "필라테스"
딕셔너리 순회하기
for key in student:
print(f"{key}: {student[key]}")
8. 모듈
import
파이썬에는 이미 만들어진 기능들이 많은데, 필요할 때
import로 가져다 쓸 수 있습니다. 앞에서 살펴본 random도 이런 식으로 불러온 모듈입니다.import random
random.randint(1, 10)
파이썬이 기본으로 제공하는 모듈 외에, 직접 만든 파일도 모듈로 사용할 수 있습니다.
# my_data.py 파일
pi = 3.14159
# main.py 파일
import my_data
print(my_data.pi) # 3.14159
# 또는 특정 변수/함수만 가져오기
from my_data import pi
print(pi) # 3.14159
마치며
이번 글에서는 print, input부터 시작해서 데이터 타입, 조건문, 반복문, 함수, 딕셔너리, 모듈까지 파이썬의 기초적인 문법들을 살펴봤습니다. 공부를 계속하면서 새로 알게 되는 내용이 있으면 이어서 정리해보겠습니다.
부족한 글 읽어주셔서 감사합니다.🙇🏻♀️
그럼 안녕히…👋
참고 자료
