1. 데이터 타입
#숫자형
a = 10 #정수형(int)
x = 3.14 #실수형(float)
c1 = 1 + 2j #복소수형(complex)
#문자형
name = "Alice" #작은따옴표, 큰따옴표 작성 가능
message = """안녕
하세요 여러""" #삼중 따옴표로 여러줄 작성 가능
full_name = name + message # + 연산자로 문자열 연결, * 반복
text = "Python"
print(text[0]) # 'p' # 문자열 인덱스로 개별 문자 접근 가능
print(text[1:4]) # 'yth" # 슬라이싱을 통해 부분 문자열 추출 가능
#불리언(Bolean) 논리연산자, 비교 연산자와 사용
is_sunny = True #True or False
a = True
b = False
print(a and b) # False
print(a or b) # True
print(not a) # False
x = 10
y = 20
print(X == y) # false
print(X < y) # True
2. 컬랙션 자료형
#리스트(List) #여러 개의 항목을 순서대로 저장하는 가변 자료형
# []로 표현 ,로 구분
#리스트 생성
fruits = ["apple", "banana", "cherry"]
#리스트 요소 접근
print(fruits[0]) # apple
# 리스트 요소 변경
fruits[1] = "blueberry"
print(fruits) # ['apple', 'blueberry', 'cherry']
# 리스트에 요소 추가
fruits.append("orange")
print(fruits) # ['apple', 'blueberry', 'cherry', 'orange']
# 리스트에서 요소 제거
fruits.remove("blueberry")
print(fruits) # ['apple', 'cherry', 'orange']
# 리스트 길이 확인
print(len(fruits)) # 3
#튜플(Tuple) 한번 생성되면 수정 X, 불변 자료형
#()로 표현
## 튜플 생성
coordinates = (10, 20)
# 튜플 요소 접근
print(coordinates[0]) # 10
# 튜플은 불변이므로 요소 변경 불가
# coordinates[0] = 15 # 오류 발생
# 튜플 길이 확인
print(len(coordinates)) # 2
# 하나의 요소를 가진 튜플을 생성할 때는 뒤에 쉼표를 붙임
single_element_tuple = (5,)
print(type(single_element_tuple)) # <class 'tuple'>
#딕셔너리(Dictionary) 키-값 쌍으로 데이터 저장하는 자료형
#{}로 표현, 각 키와 값은 : 으로 구분
# 딕셔너리 생성
person = {
"name": "Alice",
"age": 25,
"city": "New York"
}
# 딕셔너리 값 접근
print(person["name"]) # Alice
# 딕셔너리 값 변경
person["age"] = 26
print(person) # {'name': 'Alice', 'age': 26, 'city': 'New York'}
# 딕셔너리에 새 키-값 쌍 추가
person["email"] = "alice@example.com"
print(person) # {'name': 'Alice', 'age': 26, 'city': 'New York', 'email': 'alice@example.com'}
# 딕셔너리에서 키-값 쌍 제거
del person["city"]
print(person) # {'name': 'Alice', 'age': 26, 'email': 'alice@example.com'}
# 딕셔너리에서 키 목록과 값 목록 접근
print(person.keys()) # dict_keys(['name', 'age', 'email'])
print(person.values()) # dict_values(['Alice', 26, 'alice@example.com'])
#셋(set) 중복되지 않는 요소들의 집합
#{}로 표현, 순서가 없고 중복 허용 X
# 셋 생성
numbers = {1, 2, 3, 4, 4, 5} # 중복된 요소는 하나로 처리됨
print(numbers) # {1, 2, 3, 4, 5}
# 셋에 요소 추가
numbers.add(6)
print(numbers) # {1, 2, 3, 4, 5, 6}
# 셋에서 요소 제거
numbers.remove(3)
print(numbers) # {1, 2, 4, 5, 6}
# 셋의 집합 연산 (합집합, 교집합 등)
odd = {1, 3, 5, 7}
even = {2, 4, 6, 8}
# 합집합
union_set = odd.union(even)
print(union_set) # {1, 2, 3, 4, 5, 6, 7, 8}
# 교집합
intersection_set = numbers.intersection(odd)
print(intersection_set) # {1, 5}
3. 데이터 타입 변환
#명시적 타입 변환 -> 프로그래머가 직접 타입 변환 함수 사용
# 실수를 정수로 변환
a = 3.14
b = int(a)
print(b) # 3
# 문자열을 정수로 변환
c = "100"
d = int(c)
print(d) # 100 # 주의: 변환하려는 문자열이 숫자가 아니면 오류가 발생합니다.
# 정수를 실수로 변환
a = 10
b = float(a)
print(b) # 10.0
# 문자열을 실수로 변환
c = "3.14"
d = float(c)
print(d) # 3.14 # 주의: 변환하려는 문자열이 실수 형태가 아니면 오류가 발생합니다.
# 정수를 문자열로 변환
a = 10
b = str(a)
print(b) # "10"
# 실수를 문자열로 변환
c = 3.14
d = str(c)
print(d) # "3.14"
# 숫자를 불리언으로 변환
a = 0
b = bool(a)
print(b) # False
c = 1
d = bool(c)
print(d) # True
# 빈 문자열과 None은 False, 그 외의 값은 True
e = ""
f = bool(e)
print(f) # False
g = "Hello"
h = bool(g)
print(h) # True
# 문자열을 리스트로 변환
a = "hello"
b = list(a)
print(b) # ['h', 'e', 'l', 'l', 'o']
# 리스트를 튜플로 변환
c = [1, 2, 3]
d = tuple(c)
print(d) # (1, 2, 3)
# 리스트를 셋으로 변환 (중복 제거)
e = [1, 2, 2, 3, 4]
f = set(e)
print(f) # {1, 2, 3, 4}
#암시적 타입 변화 -> python 자동으로 데이터 변환
# 정수와 실수의 연산에서 발생하는 암시적 변환
a = 5
b = 2.0
c = a + b
print(c) # 7.0 (정수 5가 실수 5.0으로 암시적 변환됨)
print(type(c)) # <class 'float'>
4. 조건문
조건문에서 중요한 점
1️⃣ 조건문의 순서
조건문은 위에서부터 순차적으로 조건을 검사합니다. 첫 번째로 참인 조건이 발견되면, 이후의 조건은 검사하지 않습니다.
2️⃣ 중첩 조건문
중첩 조건문을 활용하면 더 세밀한 조건 처리가 가능합니다.
3️⃣ elif와 else
다양한 상황을 처리하기 위해 elif와 else를 적절히 사용합니다.
#기본적인 조건문 if, else
age = 16
if age >= 18:
print("성인입니다.")
else:
print("미성년자입니다.")
# 여러개를 쓸 때 elif
# 사용자로부터 점수를 입력받아 학점을 출력하는 프로그램
score = int(input("점수를 입력하세요: "))
if score >= 90:
print("A 학점")
elif score >= 80:
print("B 학점")
elif score >= 70:
print("C 학점")
elif score >= 60:
print("D 학점")
else:
print("F 학점")
# 중첩 조건문
# 사용자로부터 나이와 학생 여부를 입력받아 상태를 출력하는 프로그램
age = int(input("나이를 입력하세요: "))
is_student = input("학생입니까? (yes/no): ")
if age >= 18:
if is_student.lower() == "yes":
print("성인이며, 학생입니다.")
else:
print("성인이며, 학생이 아닙니다.")
else:
if is_student.lower() == "yes":
print("미성년자이며, 학생입니다.")
else:
print("미성년자이며, 학생이 아닙니다.")
5. 반복문
1) for문의 기본 구조
for 변수 in 컬렉션:
실행할 코드
#for문
numbers = [ 1,2,3,4,5]
for number in numbers:
square = number **2
print(f"{number}의 제곱은 {square}입니다.")
#문자열 앞의 f를 사용하면 {} 자리 표시자를 사용하여 변수 값을 문자열에 직접 삽입가능.
2) while문의 기본 구조
while 조건식
: 실행할 코드
#while문
# 사용자로부터 숫자를 입력받아, 그 숫자가 0이 될 때까지 반복해서 입력받는 프로그램
number = int(input("숫자를 입력하세요 (0을 입력하면 종료): "))
while number != 0:
print(f"입력한 숫자는 {number}입니다.")
number = int(input("다시 숫자를 입력하세요 (0을 입력하면 종료): "))
print("프로그램을 종료합니다.")
3) break와 cotinue
#반복 제어: break와 continue
# 사용자로부터 숫자를 입력받아, 음수를 입력할 경우 반복문을 종료하는 프로그램
while True:
number = int(input("숫자를 입력하세요 (음수를 입력하면 종료): "))
if number < 0:
print("음수가 입력되어 프로그램을 종료합니다.")
break #바로 종료
if number % 2 == 0:
print("짝수입니다.")
continue # 현재 반복을 건너뛰고 다음 반복으로
print("홀수입니다.")
4) range()함수
for i in range(시작, 종료, 단계):
실행할 코드
- 시작: 시작할 숫자 (기본값 0).
- 종료: 종료할 숫자 (해당 숫자는 포함되지 않음).
- 단계: 숫자 간의 간격 (기본값 1).
#range()함수
# 1부터 10까지의 숫자 중 짝수만 출력하는 프로그램
for i in range(1, 11): # 이 경우는 시작과 종료만 적혀있기에, 단계는 기본값 1
if i % 2 == 0:
print(i)
5) 중첩 반복문
for i in range(첫 번째 범위):
for j in range(두 번째 범위): 실행할 코드
#중첩 반복문
# 구구단 출력 프로그램
for i in range(2, 10):
print(f"{i}단:")
for j in range(1, 10):
print(f"{i} x {j} = {i*j}")
print() # 각 단마다 줄바꿈 추가
6. 내장함수
내장 함수는 Python에서 기본적으로 제공하는 함수들로, 별도의 모듈을 임포트(import)하지 않아도 언제든지 사용할 수 있습니다. 이들 함수는 기본적인 데이터 타입 변환, 수학 연산, 문자열 처리 등 다양한 작업을 간편하게 수행할 수 있도록 도와줍니다.
#print()함수: 출력하기
print("Hello, World!")
#input()함수: 사용자 입력받기
name = input("이름을 입력하세요: ")
#len()함수: 길이 구하기
fruits = ["apple", "banana", "cherry"]
print(len(fruits))
#type()함수: 데이터 타입 확인
a = 10
b = 3.14
c = "Python"
print(type(a)) # <class 'int'>
print(type(b)) # <class 'float'>
#int(),float(),str()함수: 타입 변환하기
# 정수 변환
num_str = "100"
num_int = int(num_str)
print(num_int) # 100
# 실수 변환
num_float = float("3.14")
print(num_float) # 3.14
# 문자열 변환
num = 50
num_str = str(num)
print(num_str) # "50"
#sum()함수: 합계 구하기
numbers = [1, 2, 3, 4, 5]
total = sum(numbers)
print(total) # 15
#min(),max()함수: 최솟값과 최대값 찾기
numbers = [3, 1, 4, 1, 5, 9]
minimum = min(numbers)
maximum = max(numbers)
print(f"최솟값: {minimum}, 최댓값: {maximum}") # 최솟값: 1, 최댓값: 9
#sorted()함수: 정렬하기
numbers = [5, 3, 8, 6, 2]
sorted_numbers = sorted(numbers)
print(sorted_numbers) # [2, 3, 5, 6, 8]
print(sorted(numbers, reverse=True)) # [8, 6, 5, 3, 2]
#abs()함수: 절대값 구하기
num = -10
print(abs(num)) # 10
#round()함수: 반올림하기
pi = 3.14159
print(round(pi, 2)) # 3.14
7. 함수 만들기
Python에서 함수를 정의하려면 def 키워드를 사용합니다.
함수 이름을 지정하고, 필요한 경우 매개변수를 정의합니다.
함수는 필요한 작업을 수행한 후, 반환값을 돌려줄 수 있습니다.
#함수 만들기
def greet(name):
return f"안녕하세요,{name}님!"
message = greet("Alice")
print(message) #안녕하세요, Alice님
#매개변수 (각 매개변수는 ,로 구분)
def add(a,b): #매개변수는 a와 b, 함수가 호출될 때 3과 5 인수가 각각 전달
return a + b
result = add(3,5)
print(result)
#반환값 (함수가 작업을 완료한 후 호출된 위치로 돌려주는 값)
def calculate(a, b):
sum = a + b
difference = a - b
return sum, difference
s, d = calculate(10, 5)
print(s) # 15
print(d) # 5
# retrun문을 생략하거나 반환값이 없이 return만 사용하면 함수는 None을 반환
#기본값 (인수가 전달되지 않으면 기본값이 사용)
def greet(name="손님"):
return f"안녕하세요, {name}님!"
print(greet()) # 안녕하세요, 손님님!
print(greet("Alice")) # 안녕하세요, Alice님!
#가변 매개변수 (정해지지 않은 개수의 인수를 받도록)
# *args: 임의의 위치 인수를 튜플로 받음
def add(*args):
return sum(args)
print(add(1, 2, 3)) # 6
print(add(10, 20, 30, 40)) # 100
# **kwargs: 키워드 인수의 딕셔너리를 받는다
def print_info(**kwargs):
for key, value in kwargs.items():
print(f"{key}: {value}")
print_info(name="Alice", age=30, city="Seoul")
# name: Alice
# age: 30
# city: Seoul
함수 사용 시 주의사항
⛔ 함수의 역할 분명히 하기
함수는 하나의 작업 또는 논리적 단위를 처리하도록 설계하는 것이 좋습니다. 너무 많은 역할을 수행하는 함수는 이해하기 어렵고, 유지보수하기 힘들 수 있습니다.
⛔ 매개변수의 순서에 주의
기본값이 있는 매개변수는 항상 기본값이 없는 매개변수 뒤에 와야 합니다. 그렇지 않으면 문법 오류가 발생합니다.
⛔ 반환값 처리
함수가 return 문을 통해 반환하는 값을 적절히 처리해야 합니다. 반환값이 필요하지 않은 경우에도, 함수의 동작을 명확히 이해하고 사용해야 합니다.
⛔ 가변 매개변수 남용 주의
args와 *kwargs는 매우 유용하지만, 남용하면 코드가 읽기 어려워질 수 있습니다. 필요한 경우에만 사용하고, 가독성을 고려하여 적절히 사용해야 합니다.
8. 모듈
모듈은 Python에서 관련된 함수, 클래스, 변수 등을 하나의 파일에 모아놓은 코드 묶음입니다. 모듈을 사용하면 코드를 재사용하고, 논리적으로 구분하여 관리할 수 있습니다. 간단히 말해, Python 파일(.py) 하나가 하나의 모듈이 됩니다.
1) import 모듈이름 (다른 파일에 있는 모듈을 불러와 사용할 수 있습니다.)
import math # 수학 관련 함수들을 포함한 math 모듈
result = math.sqrt(16) # math 모듈의 sqrt 함수 사용
print(result) # 4.0
2) from 모듈이름 import 항목이름(모듈 전체가 아닌 모듈 내의 특정 함수, 클래스, 변수를 선택적으로 불러올 수 있습니다.)
from math import sqrt # math 모듈에서 sqrt 함수만 불러옴
result = sqrt(36)
print(result) # 6.0
모듈 탐색 경로
Python에서 모듈을 불러올 때, Python은 특정 모듈 탐색 경로에서 해당 모듈을 찾습니다. 일반적으로 Python은 다음 순서로 모듈을 찾습니다:
- 현재 작업 디렉터리: 현재 실행 중인 스크립트가 있는 폴더.
- 표준 라이브러리 경로: Python이 기본적으로 제공하는 라이브러리들이 위치한 폴더.
- 환경 변수에 지정된 경로: PYTHONPATH 환경 변수에 지정된 폴더.
모듈이 이 경로들 중 하나에 존재하면, import 또는 from 구문을 통해 해당 모듈을 불러올 수 있습니다.
9. 파이썬 패키지
Python에서 패키지는 여러 모듈을 논리적으로 묶은 디렉터리 구조입니다.
패키지는 모듈을 더 체계적으로 관리하고, 다른 프로젝트에서도 재사용할 수 있게 해줍니다.
패키지는 모듈과 마찬가지로 코드 재사용을 촉진하며, 대규모 프로젝트에서 코드의 가독성과 유지보수성을 높이는 데 중요한 역할을 합니다.
1) 📚 pip로 패키지 설치하기
pip를 사용하면, Python 패키지 인덱스(PyPI)에서 원하는 패키지를 쉽게 설치할 수 있습니다.
pip install 패키지이름
2) 설치된 패키지 목록 확인
pip list
3) 패키지 업그레이드
pip install --upgrade 패키지이름
4) 패키지 제거
pip uninstall 패키지이름
10. 가상환경
가상 환경(Virtual Environment)은 프로젝트별로 독립된 Python 실행 환경을 만드는 도구입니다.
가상 환경을 사용하면, 프로젝트마다 서로 다른 패키지 버전을 설치하고 관리할 수 있어, 패키지 간의 충돌을 방지할 수 있습니다.
1) 가상환경 생성
python -m venv myenv #myenv는 내가 정해주는 이름
2) 가상환경 활성
Windows:
myenv\Scripts\activate
(오류!)
.\myenv\Scripts\activate : 이 시스템에서 스크립트를 실행할 수 없으므로 C:\project
\myenv\Scripts\Activate.ps1 파일을 로드할 수 없습니다. 자세한 내용은 about_Execut
ion_Policies(https://go.microsoft.com/fwlink/?LinkID=135170)를 참조하십시오.
위치 줄:1 문자:1
+ .\myenv\Scripts\activate
+ ~~~~~~~~~~~~~~~~~~~~~~~~
+ CategoryInfo : 보안 오류: (:) [], PSSecurityException
+ FullyQualifiedErrorId : UnauthorizedAccess
위와 같은 오류 발생시 시작메뉴에서 windows powershell 프로그램을 관리자 권한으로 실행
PS C:\windows\system32> Set-ExecutionPolicy RemoteSigned을 작성 후 엔터
Y[예]를 누르면 정상적으로 작동
3) 가상환경 비활성화
deactivate
4) 패키지 파일 생성
pip freeze > requirements.txt # 현재 설치된 패키지를 requirements.txt에 기록
5) 파일을 통한 패키지 설
pip install -r requirements.txt # requirements.txt에 명시된 모든 패키지를 설치
11. 예외처리
하나의 try 블록에서 여러 개의 except 블록을 사용하여, 다양한 예외를 처리할 수 있습니다.
try:
x = int(input("숫자를 입력하세요: "))
result = 10 / x
except ValueError:
print("유효한 숫자가 아닙니다.")
except ZeroDivisionError:
print("0으로 나눌 수 없습니다.")
finally 블록은 예외가 발생하지 않더라도 실행됩니다.
try:
result = 10 / 2
print(result)
except ZeroDivisionError:
print("0으로 나눌 수 없습니다.")
finally:
print("프로그램 종료.")