반응형

 
안녕하세요 DIY TUBE 입니다
3월 30일 화성폴리텍대학교에서 실기시험을 보고 왔습니다
화성 폴리텍 대학교에서는 오토캐드나 인벤터 프로그램으로 모델링작업 후
프린터는 뱀부랩 X1C를 이용하여 출력을 진행하게 됩니다
 
지금부터는 시험을 봤던 경험을 토대로 글을 작성했습니다
시험장별 장비및 소프트웨어 목록은 제일 아래에 공유해 드리겠습니다
 

인벤터 모델링시 주의할 점

우선 시험을 치루러 가셨다는건 해당 모델링 프로그램으로 많은 연습을 하시고 가셨을거라 생각합니다
근데 어이없는 실수로 불합격을 받게 되는 불상사가 생기기도 하죠
저 또한 시험을 치루러 갔을때 
시험안내지를 받고나서 조금 당황했습니다
우선 시험안내서에는 다음과 같이 작성되어 있습니다

번호.***     ***는 확장자이고 수험자 사용 소프트웨어 규격(※1개의 파트 파일에 어셈블리 가능)

 
한개의 파트파일에 조립된 형상으로 스케치를 해서 만들라는줄 알았습니다
그래서 질문을 드렸더니
 

  • 부품1.ipt
  • 부품2.ipt
  • 어셈블리.iam 

모두 제출하면 된다고 합니다
그래서 실제 제출은 폴더 하나에 모아서 제출하게 되는데
배정받은 번호가 03이라면
제출시에는 03이라는 폴더를 만들어서 모두 그 폴더에 저장하시면 되는 방식입니다
 

인벤터로 시험시 실제 제출하게 되는 파일 (배정받은 번호가 03일때)

  • 03-1.ipt
  • 03-2.ipt
  • 03.iam
  • 03.stp  (채점용 : 제공받은 도면과 같은 각도로 제출)
  • 03.stl   (슬라이서 소프트웨어 작업용 : 출력하기 편한각도로 조립각도를 변환해서 저장)
  • 03.gcode.3mf (뱀부랩 슬라이싱 출력 파일)

이렇게 모든 파일이 준비 되었다면
그 후 usb에 파일을 옮겨담고 
프린터실로 내려가게 되면 
다시는 컴퓨터실로 못오니 치수확인 꼼꼼히 하신 후 출력하러 가셔야 합니다
 
 
 

프린팅시 주의할 점

제가 시험보러 갔을때
프린터기는 위에 말씀드렸다시피 X1C라는 기종이었는데
뱀부랩을 처음 쓰시는분들이 많으셨던건지
10명 정도 시험 쳤는데
5명 정도는 출력조차 하지 못하시고 불합격을 통지 받으셨습니다
 
그 이유는 대부분 USB 에 저장하는 과정에서 
슬라이싱 파일을 저장하지 못한분도 계셨고
 

 
Bambu Lab A1 이라고 프린터기가 되어 있는데
이부분을 Bambu Lab X1C로 바꿔줘야 하는데
안바꾸고 슬라이싱을 하고오셔서
출력조차 하지 못하시고 불합격 하셨습니다
이부분은 시험전에 안내해주기는 하지만
정신없이 하시다보면 놓칠 수도 있는 부분인것 같으니
주의하시기 바랍니다

---‐--------------------------------------------------------------


시험결과는 100점 만점에 100점이라니요??
국민학교 1학년 이후로 처음 받아보네요 ㅎㅎ



 
아래는 지역별 실기시험 시설장비 및 소프트웨어 목록입니다
 

지역별 실기시험 시설장비

작업형 실기시험 시설장비 (예정)현황(26.1
0.06MB

 

반응형
반응형

여지껏 프로그래밍을 하기위해서 변수, 함수 등 대부분을 공부하셨을겁니다.

하지만 그 전에 먼저 여러분이 만들려는 프로그램이 이미 만들어져 있는지 살펴보기 바랍니다.

물론 공부를 위해서라면 누군가 만들어 놓은 프로그램을 또 만들 수도 있습니다.

하지만 그런 목적이 아니라면 이미 만들어진 것을 다시 만드는 것은 불필요한 행동이죠.

그리고 이미 만들어진 프로그램은 테스트 과정을 수없이 거쳤기 때문에 충분히 검증되어 있습니다.

따라서 무엇인가 새로운 프로그램을 만들기 전에는 이미 만들어진 것들,

그중에서도 특히 파이썬 배포본에 함께 들어 있는 파이썬 라이브러리를 살펴보는 것이 매우 중요합니다.

예를 들면 여러분들이 이미 많이 사용하는 print()문도 그중 일부입니다

아래는 가장 많이 사용하는 순으로 내장함수를 정리해 보았습니다

 

print()

인자로 전달된 값을 표준 출력 장치(일반적으로는 콘솔)에 출력합니다.

설명: print() 함수는 파이썬에서 가장 기본적이고 널리 사용되는 함수 중 하나입니다. 

주로 디버깅, 결과 출력 등 다양한 용도로 사용됩니다.

print("Hello, World!")  # 문자열 출력
print(3 + 5)            # 수식의 결과 출력

 

len()

시퀀스(문자열, 리스트, 튜플 등)의 길이를 반환합니다.

설명: len() 함수는 시퀀스 자료형의 길이를 반환합니다. 

시퀀스 자료형은 여러 항목이 순서대로 저장되는 자료형을 의미합니다.

my_list = [1, 2, 3, 4, 5]
print(len(my_list))  # 리스트의 길이 출력

 

input()

사용자로부터 표준 입력 장치(일반적으로는 키보드)로 값을 입력받습니다.

설명: input() 함수는 사용자로부터 키보드로 입력을 받아 문자열 형태로 반환합니다.

name = input("이름을 입력하세요: ")
print("안녕하세요,", name)

 

range()

정수의 시퀀스를 생성합니다.

설명: range() 함수는 정수의 시퀀스를 생성하여 반환합니다. 

보통 반복문에서 사용되는데, 시작값, 종료값, 간격 등을 지정하여 사용할 수 있습니다.

for i in range(5):
    print(i)  # 0부터 4까지 출력

 

list()

반복 가능한(iterable) 객체를 리스트로 변환합니다.

설명: list() 함수는 다양한 iterable 객체를 리스트로 변환합니다. 

문자열, 튜플, 집합 등을 리스트로 변환할 수 있습니다.

my_tuple = (1, 2, 3, 4, 5)
my_list = list(my_tuple)
print(my_list)  # 튜플을 리스트로 변환하여 출력

 

dict()

키-값 쌍의 집합인 딕셔너리를 생성합니다.

설명: dict() 함수는 키-값 쌍의 집합인 딕셔너리를 생성합니다. 

딕셔너리는 중복되지 않는 키와 이에 해당하는 값을 가집니다.

my_dict = dict(name="John", age=30)
print(my_dict)  # {'name': 'John', 'age': 30} 출력


str()

객체를 문자열로 변환합니다.

설명: str() 함수는 주어진 객체를 문자열로 변환합니다. 

객체의 __str__() 메서드를 호출하여 문자열로 변환합니다.

num = 123
num_str = str(num)
print(num_str)  # "123" 출력

 

int()

문자열이나 소수점 숫자를 정수로 변환합니다.

설명: int() 함수는 문자열이나 부동소수점 숫자를 정수로 변환합니다. 소수점 이하를 버립니다.

num_str = "123"
num = int(num_str)
print(num)  # 123 출력

 

float()

문자열이나 숫자를 부동소수점형으로 변환합니다.

설명: float() 함수는 문자열이나 정수를 부동소수점형으로 변환합니다. 

문자열이 숫자로 이루어져 있어야 합니다.

num_str = "3.14"
num = float(num_str)
print(num)  # 3.14 출력

 

sum()

반복 가능한(iterable) 객체의 모든 요소의 합을 반환합니다.

설명: sum() 함수는 반복 가능한(iterable) 객체의 모든 요소의 합을 반환합니다. 

숫자 요소가 있는 리스트, 튜플 등에서 주로 사용됩니다.

my_list = [1, 2, 3, 4, 5]
total = sum(my_list)
print(total)  # 15 출력

 

max()

반복 가능한(iterable) 객체에서 최댓값을 반환합니다.

설명: max() 함수는 반복 가능한(iterable) 객체에서 최댓값을 반환합니다. 

숫자, 문자열 등 모든 요소에 대해 사용할 수 있습니다.

my_list = [3, 7, 2, 9, 5]
max_value = max(my_list)
print(max_value)  # 9 출력

 

min()

반복 가능한(iterable) 객체에서 최솟값을 반환합니다.

설명: min() 함수는 반복 가능한(iterable) 객체에서 최솟값을 반환합니다. 

숫자, 문자열 등 모든 요소에 대해 사용할 수 있습니다.

my_list = [3, 7, 2, 9, 5]
min_value = min(my_list)
print(min_value)  # 2 출력

 

sorted()

반복 가능한(iterable) 객체를 정렬한 후 리스트로 반환합니다.

설명: sorted() 함수는 반복 가능한(iterable) 객체를 정렬한 후 리스트로 반환합니다. 원본 객체는 변경되지 않습니다.

my_list = [3, 1, 4, 1, 5, 9, 2, 6]
sorted_list = sorted(my_list)
print(sorted_list)  # [1, 1, 2, 3, 4, 5, 6, 9] 출력

 

zip()

두 개 이상의 반복 가능한(iterable) 객체를 합쳐서 각 요소들을 튜플로 묶은 후 이를 반환하는 이터레이터를 생성합니다.

설명: zip() 함수는 여러 개의 리스트나 튜플 등을 하나로 묶어주는 역할을 합니다. 

가장 짧은 길이의 iterable을 기준으로 합니다.

names = ['Alice', 'Bob', 'Charlie']
ages = [25, 30, 35]
zipped = zip(names, ages)
print(list(zipped))  # [('Alice', 25), ('Bob', 30), ('Charlie', 35)] 출력

 

enumerate()

반복 가능한(iterable) 객체의 인덱스와 값을 함께 반환하는 이터레이터를 생성합니다.

설명: enumerate() 함수는 반복 가능한(iterable) 객체의 인덱스와 

해당 요소를 튜플로 묶어 순회할 때 인덱스와 함께 반환합니다.

fruits = ['apple', 'banana', 'cherry']
for index, fruit in enumerate(fruits):
    print(index, fruit)  # 각 요소와 인덱스를 함께 출력

 

map()

함수와 반복 가능한(iterable) 객체를 인자로 받아서, 각 요소에 함수를 적용한 결과를 반환하는 이터레이터를 생성합니다.

설명: map() 함수는 함수와 반복 가능한(iterable) 객체를 인자로 받아서, 

각 요소에 함수를 적용한 결과를 반환하는 이터레이터를 생성합니다.

def square(x):
    return x ** 2
    
numbers = [1, 2, 3, 4, 5]
squares = map(square, numbers)
print(list(squares))  # [1, 4, 9, 16, 25] 출력

 

filter()

함수와 반복 가능한(iterable) 객체를 인자로 받아서,

함수의 반환 값이 참(True)인 요소들로 구성된 이터레이터를 반환합니다.

설명: filter() 함수는 함수와 반복 가능한(iterable) 객체를 인자로 받아서, 

함수의 반환 값이 참(True)인 요소들로 구성된 이터레이터를 반환합니다.

def is_even(x):
    return x % 2 == 0

numbers = [1, 2, 3, 4, 5]
even_numbers = filter(is_even, numbers)
print(list(even_numbers))  # [2, 4] 출력

 

abs()

주어진 숫자의 절댓값을 반환합니다.

설명: abs() 함수는 주어진 숫자의 절댓값을 반환합니다. 음수인 경우 양수로 변환합니다.

num = -5
absolute_value = abs(num)
print(absolute_value)  # 5 출력

 

round()

주어진 숫자를 반올림합니다.

설명: round() 함수는 주어진 숫자를 반올림하여 반환합니다. 소수점 이하 자릿수를 지정할 수 있습니다.

num = 3.14159
rounded_num = round(num, 2)
print(rounded_num)  # 3.14 출력

 

open()

파일을 열고 파일 객체를 반환합니다.

설명: open() 함수는 파일을 열고 파일 객체를 반환합니다. 

파일을 읽기 모드('r'), 쓰기 모드('w'), 추가 모드('a') 등으로 열 수 있습니다.

file = open('example.txt', 'r')
content = file.read()
print(content)
file.close()

 

type()

주어진 객체의 데이터 타입을 반환합니다.

설명: type() 함수는 주어진 객체의 데이터 타입을 반환합니다. 클래스 이름이 반환됩니다.

num = 42
print(type(num))  # <class 'int'> 출력

 

bool()

주어진 값의 불리언(Boolean) 값을 반환합니다.

설명: bool() 함수는 주어진 값의 불리언(Boolean) 값을 반환합니다. 

0, 빈 문자열, 빈 리스트 등은 False로 취급됩니다.

print(bool(0))        # False 출력
print(bool(10))       # True 출력
print(bool(""))       # False 출력
print(bool("Hello"))  # True 출력

 

tuple()

반복 가능한(iterable) 객체를 튜플로 변환합니다.

설명: tuple() 함수는 반복 가능한(iterable) 객체를 튜플로 변환합니다. 

리스트, 문자열, 딕셔너리 등을 튜플로 변환할 수 있습니다.

my_list = [1, 2, 3]
my_tuple = tuple(my_list)
print(my_tuple)  # (1, 2, 3) 출력

 

set()

새로운 빈 집합(set)을 생성하거나 반복 가능한(iterable) 객체로부터 집합을 생성합니다.

설명: set() 함수는 새로운 빈 집합(set)을 생성하거나 

반복 가능한(iterable) 객체로부터 집합을 생성합니다. 중복된 요소는 하나로 처리됩니다.

my_list = [1, 2, 2, 3, 3, 3]
my_set = set(my_list)
print(my_set)  # {1, 2, 3} 출력

 

any()

반복 가능한(iterable) 객체 중 하나 이상의 요소가 참(True)인 경우 True를 반환합니다.

설명: any() 함수는 반복 가능한(iterable) 객체 중 하나 이상의 요소가 참(True)인 경우 True를 반환합니다. 

모든 요소가 거짓(False)인 경우 False를 반환합니다.

my_list = [0, False, None, 1]
print(any(my_list))  # True 출력

 

all()

반복 가능한(iterable) 객체의 모든 요소가 참(True)인 경우에만 True를 반환합니다.

설명: all() 함수는 반복 가능한(iterable) 객체의 모든 요소가 참(True)인 경우에만 True를 반환합니다. 

하나라도 거짓(False)이면 False를 반환합니다.

my_list = [True, 1, "Hello"]
print(all(my_list))  # True 출력

 

chr()

ASCII 코드 값을 문자로 변환합니다.

설명: chr() 함수는 ASCII 코드 값을 문자로 변환합니다. 

0부터 127까지의 ASCII 코드에 해당하는 문자를 반환합니다.

print(chr(65))  # 'A' 출력

 

ord()

문자를 ASCII 코드 값으로 변환합니다.

설명: ord() 함수는 문자를 ASCII 코드 값으로 변환합니다. 주어진 문자의 ASCII 코드 값을 반환합니다.

print(ord('A'))  # 65 출력

 

eval()

문자열로 표현된 파이썬 표현식을 실행하고 결과를 반환합니다.

설명: eval() 함수는 문자열로 표현된 파이썬 표현식을 실행하고 결과를 반환합니다. 

주로 동적으로 코드를 실행해야 하는 경우에 사용됩니다. 

주의해야 할 점은 보안상 취약할 수 있으므로 안전하지 않은 입력에 대해 사용하는 것을 피해야 합니다.

x = 10
result = eval("x + 5")
print(result)  # 15 출력

 

format()

값을 형식화된 문자열로 변환합니다.

설명: format() 함수는 값을 형식화된 문자열로 변환합니다. 

문자열 내부에 {}를 사용하여 값을 삽입할 수 있으며, 포맷 지정자를 사용하여 형식을 지정할 수 있습니다.

name = "John"
age = 30
message = "이름: {}, 나이: {}".format(name, age)
print(message)  # "이름: John, 나이: 30" 출력

 

globals()

전역 심볼 테이블을 딕셔너리로 반환합니다.

설명: globals() 함수는 현재 전역 심볼 테이블을 딕셔너리로 반환합니다. 

모듈에서 정의된 전역 변수들을 확인할 때 사용됩니다.

print(globals())  # 전역 변수들을 딕셔너리 형태로 출력

 

locals()

로컬 심볼 테이블을 딕셔너리로 반환합니다.

설명: locals() 함수는 현재 로컬 심볼 테이블을 딕셔너리로 반환합니다.

함수 내부에서 정의된 지역 변수들을 확인할 때 사용됩니다.

def example_func():
    x = 10
    print(locals())  # 로컬 변수들을 딕셔너리 형태로 출력
example_func()

 

setattr()

객체의 속성 값을 설정합니다.

설명: setattr() 함수는 객체의 속성 값을 설정합니다. 객체와 속성 이름, 그리고 값을 인자로 받습니다.

class Person:
    pass

person = Person()
setattr(person, 'name', 'John')
print(person.name)  # 'John' 출력

 

getattr()

객체의 속성 값을 가져옵니다.

설명: getattr() 함수는 객체의 속성 값을 가져옵니다. 객체와 속성 이름을 인자로 받습니다.

class Person:
    name = 'John'

person = Person()
print(getattr(person, 'name'))  # 'John' 출력

 

delattr()

객체의 속성을 삭제합니다.

설명: delattr() 함수는 객체의 속성을 삭제합니다. 객체와 속성 이름을 인자로 받습니다.

class Person:
    name = 'John'

person = Person()
delattr(person, 'name')
print(person.name)  # AttributeError: 'Person' object has no attribute 'name'

 

hex()

정수를 16진수 문자열로 변환합니다.

설명: hex() 함수는 정수를 16진수 문자열로 변환합니다. 접두사 '0x'를 붙여 반환합니다.

num = 16
hex_string = hex(num)
print(hex_string)  # '0x10' 출력

 

oct()

정수를 8진수 문자열로 변환합니다.

설명: oct() 함수는 정수를 8진수 문자열로 변환합니다. 접두사 '0o'를 붙여 반환합니다.

num = 16
oct_string = oct(num)
print(oct_string)  # '0o20' 출력

 

bin()

정수를 2진수 문자열로 변환합니다.

설명: bin() 함수는 정수를 2진수 문자열로 변환합니다. 접두사 '0b'를 붙여 반환합니다.

num = 16
bin_string = bin(num)
print(bin_string)  # '0b10000' 출력

 

slice()

시퀀스의 슬라이스를 나타내는 객체를 생성합니다.

설명: slice() 함수는 슬라이싱에 사용할 객체를 생성합니다. 

슬라이싱은 시퀀스에서 일부분을 추출하는 데 사용됩니다.

my_list = [1, 2, 3, 4, 5]
s = slice(2, 4)  # 인덱스 2부터 3까지의 슬라이스를 나타내는 객체 생성
print(my_list[s])  # [3, 4] 출력

 

dir()

객체의 속성과 메서드를 리스트로 반환합니다.

설명: dir() 함수는 객체의 속성과 메서드를 나열한 리스트를 반환합니다. 클래스나 모듈 등을 인자로 받을 수 있습니다.

my_list = [1, 2, 3]
print(dir(my_list))  # 리스트의 속성과 메서드를 나열한 리스트 출력

 

id()

객체의 고유 식별자를 반환합니다.

설명: id() 함수는 객체의 고유 식별자를 반환합니다. 메모리 내의 주소 값입니다.

x = 42
print(id(x))  # x의 메모리 주소 출력

 

help()

객체에 대한 도움말 정보를 출력합니다.

설명: help() 함수는 객체에 대한 도움말 정보를 출력합니다. 클래스, 함수, 모듈 등에 대한 정보를 확인할 때 사용됩니다.

print(help(list))  # 리스트에 대한 도움말 출력

 

next()

이터레이터에서 다음 요소를 반환합니다.

설명: next() 함수는 이터레이터에서 다음 요소를 반환합니다. 

이터레이터는 반복 가능한 객체의 요소를 하나씩 순회하며 반환합니다.

my_iter = iter([1, 2, 3])
print(next(my_iter))  # 1 출력
print(next(my_iter))  # 2 출력

 

reversed()

시퀀스를 역순으로 반환하는 이터레이터를 생성합니다.

설명: reversed() 함수는 시퀀스를 역순으로 반환하는 이터레이터를 생성합니다. 

리스트, 튜플 등을 역순으로 순회할 때 사용됩니다.

my_list = [1, 2, 3, 4, 5]
reversed_list = reversed(my_list)
print(list(reversed_list))  # [5, 4, 3, 2, 1] 출력

 

pow()

거듭제곱 연산을 수행합니다.

설명: pow() 함수는 주어진 밑수의 지수승 값을 반환합니다. pow(x, y)는 x ** y와 동일합니다.

result = pow(2, 3)
print(result)  # 8 출력

 

divmod()

두 개의 숫자를 인자로 받아서, 나눗셈의 몫과 나머지를 튜플 형태로 반환합니다.

설명: divmod() 함수는 두 개의 숫자를 인자로 받아서, 나눗셈의 몫과 나머지를 튜플 형태로 반환합니다.

quotient, remainder = divmod(10, 3)
print(quotient, remainder)  # 3 1 출력

 

isinstance()

객체의 타입을 확인합니다.

설명: isinstance() 함수는 객체의 타입을 확인합니다. 특정 클래스의 인스턴스인지 여부를 확인할 때 사용됩니다.

x = 42
print(isinstance(x, int))  # True 출력

 

issubclass()

클래스가 다른 클래스의 서브클래스인지 여부를 확인합니다.

설명: issubclass() 함수는 클래스가 다른 클래스의 서브클래스인지 여부를 확인합니다.

class A:
    pass

class B(A):
    pass

print(issubclass(B, A))  # True 출력

 

iter()

반복 가능한(iterable) 객체에 대한 이터레이터를 반환합니다.

설명: iter() 함수는 반복 가능한(iterable) 객체에 대한 이터레이터를 반환합니다.

반복 가능한 객체는 문자열, 리스트, 튜플 등이 있습니다.

my_list = [1, 2, 3]
my_iter = iter(my_list)
print(next(my_iter))  # 1 출력

 

len()

시퀀스(문자열, 리스트, 튜플 등)의 길이를 반환합니다.

설명: len() 함수는 시퀀스 자료형의 길이를 반환합니다. 

시퀀스 자료형은 여러 항목이 순서대로 저장되는 자료형을 의미합니다.

my_list = [1, 2, 3, 4, 5]
print(len(my_list))  # 5 출력

 

zip()

두 개 이상의 반복 가능한(iterable) 객체를 합쳐서 각 요소들을 튜플로 묶은 후 이를 반환하는 이터레이터를 생성합니다.

설명: zip() 함수는 여러 개의 리스트나 튜플 등을 하나로 묶어주는 역할을 합니다. 

가장 짧은 길이의 iterable을 기준으로 합니다.

names = ['Alice', 'Bob', 'Charlie']
ages = [25, 30, 35]
zipped = zip(names, ages)
print(list(zipped))  # [('Alice', 25), ('Bob', 30), ('Charlie', 35)] 출력

 

enumerate()

반복 가능한(iterable) 객체의 인덱스와 값을 함께 반환하는 이터레이터를 생성합니다.

설명: enumerate() 함수는 반복 가능한(iterable) 객체의 인덱스와 

해당 요소를 튜플로 묶어 순회할 때 인덱스와 함께 반환합니다.

fruits = ['apple', 'banana', 'cherry']
for index, fruit in enumerate(fruits):
    print(index, fruit)  # 각 요소와 인덱스를 함께 출력

 

map()

함수와 반복 가능한(iterable) 객체를 인자로 받아서, 각 요소에 함수를 적용한 결과를 반환하는 이터레이터를 생성합니다.

설명: map() 함수는 함수와 반복 가능한(iterable) 객체를 인자로 받아서, 

각 요소에 함수를 적용한 결과를 반환하는 이터레이터를 생성합니다.

def square(x):
    return x ** 2

numbers = [1, 2, 3, 4, 5]
squares = map(square, numbers)
print(list(squares))  # [1, 4, 9, 16, 25] 출력

 

filter()

함수와 반복 가능한(iterable) 객체를 인자로 받아서,

함수의 반환 값이 참(True)인 요소들로 구성된 이터레이터를 반환합니다.

설명: filter() 함수는 함수와 반복 가능한(iterable) 객체를 인자로 받아서, 

함수의 반환 값이 참(True)인 요소들로 구성된 이터레이터를 반환합니다.

def is_even(x):
    return x % 2 == 0

numbers = [1, 2, 3, 4, 5]
even_numbers = filter(is_even, numbers)
print(list(even_numbers))  # [2, 4] 출력

 

sorted()

반복 가능한(iterable) 객체를 정렬한 후 리스트로 반환합니다.

설명: sorted() 함수는 반복 가능한(iterable) 객체를 정렬한 후 리스트로 반환합니다. 원본 객체는 변경되지 않습니다.

my_list = [3, 1, 4, 1, 5, 9, 2, 6]
sorted_list = sorted(my_list)
print(sorted_list)  # [1, 1, 2, 3, 4, 5, 6, 9] 출력

 

sum()

반복 가능한(iterable) 객체의 모든 요소의 합을 반환합니다.

설명: sum() 함수는 반복 가능한(iterable) 객체의 모든 요소의 합을 반환합니다. 

숫자 요소가 있는 리스트, 튜플 등에서 주로 사용됩니다.

my_list = [1, 2, 3, 4, 5]
total = sum(my_list)
print(total)  # 15 출력

 

max()

반복 가능한(iterable) 객체에서 최댓값을 반환합니다.

설명: max() 함수는 반복 가능한(iterable) 객체에서 최댓값을 반환합니다.

숫자, 문자열 등 모든 요소에 대해 사용할 수 있습니다.

my_list = [3, 7, 2, 9, 5]
max_value = max(my_list)
print(max_value)  # 9 출력

 

min()

반복 가능한(iterable) 객체에서 최솟값을 반환합니다.

설명: min() 함수는 반복 가능한(iterable) 객체에서 최솟값을 반환합니다.

숫자, 문자열 등 모든 요소에 대해 사용할 수 있습니다.

my_list = [3, 7, 2, 9, 5]
min_value = min(my_list)
print(min_value)  # 2 출력

 

abs()

주어진 숫자의 절댓값을 반환합니다.

설명: abs() 함수는 주어진 숫자의 절댓값을 반환합니다. 음수인 경우 양수로 변환합니다.

num = -5
absolute_value = abs(num)
print(absolute_value)  # 5 출력

 

round()

주어진 숫자를 반올림합니다.

설명: round() 함수는 주어진 숫자를 반올림하여 반환합니다. 소수점 이하 자릿수를 지정할 수 있습니다.

num = 3.14159
rounded_num = round(num, 2)
print(rounded_num)  # 3.14 출력
반응형
반응형

프로그램을 만들다 보면 수없이 많은 오류를 만나게 됩니다.

물론 오류가 발생하는 이유는 프로그램이 잘못 동작하는 것을 막기 위한 파이썬의 배려입니다.

이번에는 파이썬에서 오류를 처리하는 방법에 대해서 알아봅시다

예외 처리(Exception Handling)는 프로그램이 실행되는 동안 예기치 않은 상황(예외)이 발생했을 때,

프로그램이 비정상적으로 종료되는 것을 방지하고 프로그램의 안정성을 높이기 위해 사용되는 프로그래밍 기법입니다.

프로그램에서 발생할 수 있는 예외적인 상황들은 다양합니다.

일반적인 예외 사례로는 파일을 찾을 수 없거나,

0으로 나누는 연산을 수행하려고 할 때 발생하는 ZeroDivisionError 등이 있습니다.

이러한 예외적인 상황들이 발생했을 때, 프로그램이 종료되는 것은

사용자에게 부적절하고 프로그램의 안정성을 해치는 결과를 초래할 수 있습니다.

 

오류가 발생하는 여러가지 유형

프로그램에서 발생할 수 있는 다양한 종류의 오류가 있습니다.

이러한 오류들은 예외(Exceptions)라고도 불리며, 예외 처리(Exception Handling)를 통해 처리될 수 있습니다.

주요 프로그램 오류 유형은 다음과 같습니다:

 

구문 오류(Syntax Error) 

코드가 잘못된 문법을 가지고 있을 때 발생합니다. 대표적으로 오타, 들여쓰기 오류 등이 포함됩니다.

이러한 오류는 코드를 실행하기 전에 발견되며, 프로그램이 실행되지 않습니다.

 

런타임 오류(Runtime Error)

 프로그램이 실행되는 도중에 발생하는 오류로, 예외 처리를 통해 처리될 수 있습니다.

주로 사용자 입력 또는 외부 데이터에 의해 발생하는 경우가 많습니다.

대표적인 런타임 오류 유형으로는 다음과 같은 것들이 있습니다:

  • ZeroDivisionError: 0으로 나누기 연산 시 발생합니다.
  • NameError: 정의되지 않은 변수나 함수를 참조할 때 발생합니다.
  • TypeError: 데이터 타입이 잘못 사용되었을 때 발생합니다.
  • ValueError: 데이터 값이 잘못된 경우 발생합니다.
  • FileNotFoundError: 파일을 찾을 수 없을 때 발생합니다.

논리 오류(Logical Error)

프로그램이 예상한 대로 동작하지 않는 오류로, 문제를 발견하기가 어려울 수 있습니다.

이러한 오류는 프로그램의 논리적인 부분에 있으며, 예외 처리를 통해 처리되지 않습니다.

따라서 프로그래머가 코드를 재검토하여 수정해야 합니다.

 

이러한 프로그램 오류들은 예외 처리를 통해 프로그램이 비정상적으로 종료되는 것을 방지하고, 프로그램의 안정성을 높이기 위해 처리됩니다.

 

 

다양한 예외처리 기법

파이썬에서는 예외 처리를 위해 다음과 같은 키워드와 구문을 사용합니다:

  1. try: 예외가 발생할 가능성이 있는 코드 블록을 지정합니다.
  2. except: 예외가 발생했을 때 처리할 코드 블록을 지정합니다. 예외의 종류에 따라 다른 except 블록을 사용할 수 있습니다.
  3. else: 예외가 발생하지 않았을 때 실행할 코드 블록을 지정합니다. 선택적으로 사용할 수 있습니다.
  4. finally: 예외 발생 여부와 상관없이 항상 실행할 코드 블록을 지정합니다. 주로 리소스 정리 작업 등에 활용됩니다.

각각의 기법을 설명하고 예제 코드를 살펴보도록 하겠습니다.

위의 내용에 추가로 여러가지 처리기법도 다뤄보았습니다

 

try-except

가장 기본적인 예외 처리 기법으로, 예외가 발생할 수 있는 코드를 try 블록에 작성하고,

예외가 발생했을 때 처리할 코드를 except 블록에 작성합니다.

try:
    x = 10 / 0  # ZeroDivisionError 발생
except ZeroDivisionError:
    print("0으로 나눌 수 없습니다.")

 

try-except-else

else 블록을 사용하여 예외가 발생하지 않았을 때 실행할 코드를 작성할 수 있습니다.

try:
    x = 10 / 2
except ZeroDivisionError:
    print("0으로 나눌 수 없습니다.")
else:
    print("나눗셈 결과:", x)

 

try-except-finally

finally 블록을 사용하여 예외 발생 여부와 관계없이 항상 실행할 코드를 작성할 수 있습니다.

주로 리소스를 정리하는 용도로 사용됩니다.

try:
    f = open("example.txt", "r")
    print(f.read())
except FileNotFoundError:
    print("파일을 찾을 수 없습니다.")
finally:
    f.close()  # 파일 핸들 닫기

 

사용자 정의 예외 처리

사용자가 직접 예외 클래스를 정의하고 해당 예외가 발생했을 때 처리할 방법을 지정할 수 있습니다.

class CustomError(Exception):
    def __init__(self, message):
        self.message = message

try:
    x = -1
    if x < 0:
        raise CustomError("음수는 허용되지 않습니다.")
except CustomError as e:
    print("사용자 정의 예외 발생:", e.message)

 

다중 예외 처리

여러 종류의 예외를 하나의 except 블록에서 처리할 수 있습니다. 이 경우에는 각 예외를 튜플로 묶어서 지정합니다.

try:
    x = int(input("나눌 숫자를 입력하세요: "))
    result = 10 / x
except (ValueError, ZeroDivisionError):
    print("올바른 숫자를 입력하세요. 0으로 나눌 수 없습니다.")

 

예외 객체 정보 출력

except 블록에서 예외 객체에 접근하여 예외에 관한 정보를 출력할 수 있습니다.

try:
    x = 10 / 0
except ZeroDivisionError as e:
    print("예외 발생:", e)

 

전역 예외 처리

try-except 블록을 전역 수준에서 사용하여 예외를 처리할 수 있습니다.

이는 모든 예외에 대해 일괄적으로 처리할 때 유용합니다.

try:
    # 예외가 발생할 수 있는 코드
except Exception as e:
    # 모든 예외 처리
    print("예외 발생:", e)

 

중첩 예외 처리

try-except 블록을 중첩하여 여러 수준의 예외 처리를 구현할 수 있습니다.

try:
    try:
        x = 10 / 0
    except ZeroDivisionError:
        print("0으로 나눌 수 없습니다.")
except Exception as e:
    print("예외 발생:", e)

 

예외 다시 발생시키기

except 블록에서 예외를 다시 발생시킬 수 있습니다.

이를 통해 예외를 처리한 후에도 해당 예외를 호출자에게 전파할 수 있습니다.

try:
    x = 10 / 0
except ZeroDivisionError:
    print("0으로 나눌 수 없습니다.")
    raise  # 예외 다시 발생

 

AssertionError 처리

assert 문을 사용하여 특정 조건이 만족되지 않았을 때 AssertionError를 발생시킬 수 있습니다.

이를 예외 처리를 통해 처리할 수 있습니다.

try:
    assert False, "이것은 AssertionError입니다."
except AssertionError as e:
    print("AssertionError 발생:", e)

 

예외 처리 없이 사용하기

예외 처리가 필요 없는 경우도 있습니다. 이 경우 try-except 블록 없이 예외가 발생하는 코드를 직접 사용합니다.

result = 10 / 0  # 예외가 발생하면 프로그램이 비정상 종료됨

 

반응형
반응형

파이썬에서 "패키지"는 관련된 모듈들의 집합을 의미합니다.

모듈은 파이썬 코드를 담고 있는 파일이며,

패키지는 이러한 모듈들을 디렉토리 구조 안에 구성하여 더 큰 범위의 프로젝트를 조직화하는 방법입니다.

간단히 말해, 패키지는 파이썬 프로젝트를 모듈로 나누어 관리하기 쉽게 만들어 줍니다.

이는 큰 프로젝트를 여러 모듈로 나누어 각 모듈을 개별적으로 유지보수하고 재사용할 수 있도록 도와줍니다.

패키지는 일반적으로 다음과 같은 구조를 가지고 있습니다:

  1. __init__.py: 이 파일은 패키지의 초기화 파일로, 해당 디렉토리를 패키지로 취급하도록 파이썬에게 알려줍니다. 이 파일이 없으면 파이썬은 디렉토리를 패키지로 취급하지 않습니다. 이 파일 안에는 패키지의 초기화 코드가 들어갈 수 있습니다.
  2. 모듈 파일들: 패키지 안에 있는 각 모듈은 각각 하나의 파이썬 파일입니다. 이 파일들은 패키지의 기능을 구현합니다.
  3. 하위 패키지들: 패키지 안에는 또 다른 패키지들이 존재할 수 있습니다. 이것은 패키지를 더 세분화하여 관련된 모듈들을 더욱 구조화하는 데 도움이 됩니다.

예를 들어, "requests"라는 외부 라이브러리는 HTTP 요청을 보내는 데 사용됩니다. 이 라이브러리는 "requests"라는 패키지 안에 여러 모듈과 하위 패키지를 가지고 있습니다. 이러한 구조는 코드를 조직화하고 관리하기 쉽게 만들어 줍니다.

 

패키지의 생성

패키지를 만드는 것은 파이썬에서 모듈을 만드는 것과 매우 유사합니다. 다음은 패키지를 만드는 단계입니다:

  1. 프로젝트 디렉토리 생성: 먼저 새로운 디렉토리를 만들어서 패키지를 담을 공간을 마련합니다. 이 디렉토리 이름이 패키지의 이름이 됩니다.
  2. __init__.py 파일 생성: 패키지 디렉토리 안에 __init__.py 파일을 만듭니다. 이 파일은 패키지를 초기화하는 데 사용됩니다. 만약 패키지에 초기화 코드가 필요하지 않다면 빈 파일을 생성해도 됩니다.
  3. 모듈 추가: 필요한 기능을 구현한 파이썬 파일을 모듈로 추가합니다. 이 모듈들은 패키지 디렉토리 안에 위치해야 합니다.
  4. 설치 또는 배포: 만든 패키지를 사용하려는 다른 사용자들에게 제공하려면 이를 설치하거나 배포해야 합니다. 이를 위해서는 setup.py나 setup.cfg와 같은 배포 설정 파일을 작성하고, pip와 같은 도구를 사용하여 패키지를 설치할 수 있습니다.

예를 들어, package_a라는 패키지를 만든다고 가정해 봅시다. 이를 위해서는 다음과 같은 구조를 가질 것입니다

package_a/
    __init__.py
    module1.py
    module2.py
    ...

 

여기서 package_a는 패키지의 이름이며, module1.py, module2.py는 패키지의 모듈입니다.

간단한 예시를 통해 이를 구체화해 보겠습니다:

  1. package_a  디렉토리를 생성합니다.
  2. package_a  디렉토리 안에 __init__.py 파일을 만듭니다. 이 파일은 비어있어도 됩니다.
  3. package_a  디렉토리 안에 필요한 모듈 파일들(module1.py, module2.py 등)을 추가합니다. 이 파일들은 패키지의 기능을 정의합니다.

만약 다른 사람들이 이 패키지를 설치해서 사용할 수 있도록 배포하려면, 추가적인 단계가 필요합니다.

이는 setuptools나 distutils를 사용하여 패키지를 배포하는 과정을 포함합니다.

 

패키지 안의 함수를 실행하는 방법

패키지 안에 있는 함수를 실행하는 것은 해당 함수가 정의된 모듈을 불러와서 호출하는 것과 같습니다.

함수를 실행하는 과정은 다음과 같습니다:

 

모듈 불러오기

 

먼저 실행하려는 함수가 정의된 모듈을 불러와야 합니다. 이를 위해서는 import 문을 사용합니다.

예를 들어, package_a 패키지 안에 module1.py 모듈에 my_function이라는 함수가 있다고 가정해 보겠습니다.

import package_a.module1

함수호출

이제 모듈에 정의된 함수를 호출할 수 있습니다. 함수를 호출할 때는 모듈 이름과 함수 이름을 사용합니다.

package_a.module1.my_function()

 

위의 예시에서 my_function()을 호출하면 해당 함수가 실행됩니다.

만약 함수가 인자를 받는다면, 해당 인자를 전달하여 호출하면 됩니다.

package_a.module1.my_function(argument1, argument2)

 

위 코드에서 argument1과 argument2는 함수가 받는 인자들입니다.

또는 모듈 이름을 별칭(alias)으로 지정하여 더 간결하게 사용할 수도 있습니다.

import package_a.module1 as mod1
mod1.my_function()

 

이렇게 하면 module1을 mod1이라는 짧은 이름으로 사용할 수 있습니다.

 

패키지 내의 다른 모듈의 함수 호출

패키지 안에 다른 모듈에 정의된 함수를 호출할 때는

마찬가지로 위와 같은 방법으로 모듈을 불러와서 함수를 호출합니다.

단지 모듈 이름을 패키지 이름과 함께 적어주면 됩니다.

import package_a.other_module
package_a.other_module.another_function()

 

이렇게 하면 package_a  패키지 안에 있는 other_module 모듈에 정의된

another_function을 호출합니다.

위와 같은 방법을 사용하여 패키지 안에 있는 함수를 실행할 수 있습니다.

반응형
반응형

모듈(Module)은 파이썬 프로그램을 구성하는 구성 요소 중 하나로, 파이썬 코드를 담고 있는 파일입니다.

모듈은 함수, 변수, 클래스 등을 포함할 수 있으며, 다른 파이썬 파일에서 이를 임포트하여 사용할 수 있습니다.

모듈을 사용하면 코드의 재사용성을 높이고, 코드를 더 모듈화하여 관리할 수 있습니다.

우리는 파이썬으로 프로그래밍을 할 때 매우 많은 모듈을 사용합니다.

다른 사람들이 이미 만들어 놓은 모듈을 사용할 수도 있고 우리가 직접 만들어 사용할 수도 있습니다

모듈에는 두 가지 종류가 있습니다

아래를 보시죠

  1. 내장 모듈(Built-in Modules):
    • 파이썬에 기본적으로 내장되어 있는 모듈로, 별도의 설치 없이 사용할 수 있습니다.
    • 예시로는 math, random, datetime 등이 있습니다.
  2. 외부 모듈(External Modules):
    • 파이썬의 표준 라이브러리나 서드파티(Third-party) 라이브러리에 포함되어 있는 모듈입니다.
    • 외부 모듈을 사용하기 위해서는 별도의 설치가 필요할 수 있습니다.
    • 예시로는 requests, numpy, pandas 등이 있습니다

 

모듈 사용 방법

  1. 모듈 임포트(Importing Modules):
    • 다른 파이썬 파일에서 모듈을 사용하려면 import 키워드를 사용하여 모듈을 임포트합니다.
    • import 모듈이름 형식으로 모듈을 임포트할 수 있습니다.
  2. 모듈 내부의 요소 사용:
    • 임포트한 모듈 내부의 함수, 변수, 클래스 등을 점(.) 연산자를 사용하여 호출할 수 있습니다.
    • 예를 들어, 모듈이름.함수이름() 형식으로 모듈 내부의 함수를 호출할 수 있습니다.
  3. 모듈 별칭 사용:
    • 모듈 이름이 길거나 번거로운 경우에는 모듈에 별칭을 지정하여 사용할 수 있습니다.
    • import 모듈이름 as 별칭 형식으로 모듈을 임포트하고 별칭을 사용할 수 있습니다.

예를 들어, math 모듈을 사용하여 원주율(pi) 값을 구하는 예제를 살펴보겠습니다

import math

print(math.pi)  # 출력: 3.141592653589793

위 코드에서는 math 모듈을 임포트하고, 모듈 내부의 pi 변수를 사용하여 원주율 값을 출력합니다.

모듈을 사용하여 코드를 모듈화하면 코드의 가독성과 유지보수성을 높일 수 있으며,

다른 프로젝트에서도 재사용할 수 있는 유용한 기능을 만들 수 있습니다.

 

아래는 클래스와변수가 포함된 모듈과 외부에서 모듈을 불러와 사용하는 방법에대해 알아보도록 하겠습니다.

 

  1. 클래스(Class)를 포함한 모듈:
    • 모듈 내부에 클래스를 정의하여 사용할 수 있습니다.
    • 클래스는 객체 지향 프로그래밍(OOP)의 기본 요소이며, 데이터와 해당 데이터를 처리하는 메서드(함수)를 함께 묶어놓은 사용자 정의 데이터 형식입니다.
    • 다른 파일에서 클래스가 포함된 모듈을 임포트하여 클래스를 사용할 수 있습니다.
  2. 변수(Variable)를 포함한 모듈:
    • 모듈 내부에 변수를 정의하여 사용할 수 있습니다.
    • 변수는 데이터를 저장하는데 사용되며, 다른 코드에서 필요한 데이터를 모듈에 정의된 변수를 통해 접근할 수 있습니다.
    • 변수는 모듈 내의 다른 함수나 클래스에서 사용될 수 있으며, 코드의 유지 보수성과 재사용성을 높입니다.

예를 들어, math_operations.py라는 모듈을 생성하여 클래스와 변수를 포함한 예를 살펴보겠습니다.

# math_operations.py

# 클래스 정의
class Calculator:
    def add(self, x, y):
        return x + y
    
    def subtract(self, x, y):
        return x - y

# 변수 정의
PI = 3.141592653589793

 

위 코드에서는 Calculator 클래스와 PI 변수를 포함한 모듈을 정의하고 있습니다.

이 모듈은 덧셈과 뺄셈을 수행하는 클래스와 원주율을 저장하는 변수를 포함하고 있습니다.

이후 다른 파이썬 파일에서 이 모듈을 임포트하여 클래스와 변수를 사용할 수 있습니다.

 

# 다른 파일에서 math_operations 모듈을 임포트하여 사용하는 예제

import math_operations

# Calculator 클래스의 인스턴스 생성
calculator = math_operations.Calculator()

# 클래스 메서드 호출하여 계산하기
result_add = calculator.add(5, 3)
result_subtract = calculator.subtract(5, 3)

print("덧셈 결과:", result_add)  # 출력: 덧셈 결과: 8
print("뺄셈 결과:", result_subtract)  # 출력: 뺄셈 결과: 2

# 모듈 내의 변수 사용하기
print("원주율:", math_operations.PI)  # 출력: 원주율: 3.141592653589793
 
이와 같이 모듈은 여러 종류의 파이썬 코드를 담을 수 있으며,
클래스나 변수를 포함하여 필요한 기능을 모듈화할 수 있습니다.
 
반응형
반응형

프로그래머들이 가장 많이 사용하는 프로그래밍 언어 중 하나인 C 언어에는 클래스가 없습니다.

이 말은 굳이 클래스가 없어도 프로그램을 충분히 만들 수 있다는 뜻입니다.

파이썬으로 잘 만든 프로그램을 살펴봐도 클래스를 사용하지 않고 작성한 것이 매우 많습니다.

즉, 클래스는 지금까지 공부한 함수나 자료형처럼 프로그램 작성을 위해 꼭 필요한 요소는 아닙니다.

 

클래스(Class)는 객체 지향 프로그래밍(OOP)의 기본적인 개념 중 하나로,

데이터와 해당 데이터를 처리하는 메서드(함수)를 함께 묶어놓은 사용자 정의 데이터 형식입니다.

클래스는 객체(Object)를 생성하기 위한 청사진이라고 할 수 있습니다.

객체는 클래스의 인스턴스(Instance)이며, 클래스로부터 생성됩니다.

클래스는 데이터와 기능(메서드)을 하나로 묶어서 관리할 수 있어

코드의 재사용성과 유지 보수성을 높입니다.

다음은 클래스의 주요 요소들에 대한 설명입니다:

  1. 속성(Attributes) 또는 멤버 변수(Member Variables):
    • 클래스가 가지고 있는 데이터를 나타냅니다.
    • 클래스 내부에 정의된 변수로, 해당 클래스의 모든 인스턴스에 대해 동일한 값을 가집니다.
    • 클래스의 상태를 나타냅니다.
  2. 메서드(Methods):
    • 클래스가 수행하는 작업(기능)을 나타냅니다.
    • 클래스 내부에 정의된 함수로, 클래스의 인스턴스에 대해 호출됩니다.
    • 클래스의 동작을 정의합니다.
  3. 인스턴스(Instance):
    • 클래스로부터 생성된 실제 객체를 나타냅니다.
    • 클래스의 속성과 메서드에 접근할 수 있는 객체입니다.
  4. 생성자(Constructor):
    • 클래스의 인스턴스가 생성될 때 호출되는 특별한 메서드입니다.
    • 인스턴스를 초기화하고 필요한 속성을 설정하는 역할을 합니다.
    • 파이썬에서는 __init__() 메서드로 표현됩니다.
  5. 상속(Inheritance):
    • 부모 클래스(슈퍼 클래스)의 속성과 메서드를 자식 클래스(서브 클래스)가 물려받는 것을 의미합니다.
    • 코드의 재사용성을 높여줍니다.
  6. 다형성(Polymorphism):
    • 같은 이름의 메서드가 서로 다른 클래스에서 다른 동작을 수행할 수 있는 성질입니다.
    • 오버라이딩(Overriding)과 오버로딩(Overloading)을 통해 구현됩니다.

파이썬에서는 클래스를 정의할 때 class 키워드를 사용합니다.

클래스의 속성과 메서드는 클래스 내에서 정의되며,

인스턴스는 클래스 이름을 호출하여 생성됩니다.

클래스를 사용하여 객체를 생성하고 이를 통해 데이터를 관리하고 작업을 수행할 수 있습니다.

클래스는 파이썬의 중요한 개념 중 하나이며, 객체 지향 프로그래밍의 핵심입니다.

 

아래는 간단한 클래스를 사용한 예제 소스코드입니다.

이 예제에서는 "사람"을 나타내는 클래스인 Person 클래스를 정의하고,

해당 클래스를 사용하여 객체를 생성하고 속성과 메서드를 활용하는 방법을 보여줍니다.

class Person:
    def __init__(self, name, age):
        self.name = name
        self.age = age

    def greet(self):
        return f"안녕하세요! 제 이름은 {self.name}이고, 나이는 {self.age}살입니다."

# Person 클래스를 사용하여 객체 생성
person1 = Person("홍길동", 30)
person2 = Person("이순신", 40)

# 객체의 속성에 접근하여 출력
print(person1.name)  # 출력: 홍길동
print(person2.age)   # 출력: 40

# 객체의 메서드 호출하여 인사하기
print(person1.greet())  # 출력: 안녕하세요! 제 이름은 홍길동이고, 나이는 30살입니다.
print(person2.greet())  # 출력: 안녕하세요! 제 이름은 이순신이고, 나이는 40살입니다.

 

위 코드에서 Person 클래스는 이름(name)과 나이(age)라는 속성을 가지고 있습니다.

__init__() 메서드를 사용하여 객체가 생성될 때 속성을 초기화합니다.

greet() 메서드는 객체의 속성을 활용하여 인사말을 생성하여 반환합니다.

이후에 Person 클래스를 사용하여 person1과 person2라는 두 개의 객체를 생성하고,

각 객체의 속성에 접근하고 메서드를 호출하여 객체의 동작을 확인합니다.

이렇게 클래스를 사용하여 객체를 생성하고 데이터와 기능을 관리하는 것이

객체 지향 프로그래밍의 핵심 개념 중 하나입니다.

반응형
반응형

파일 읽고 쓰기

우리는 이제까지 값을 ‘입력’받을 때는 사용자가 직접 입력하는 방식을 사용했고

‘출력’할 때는 모니터 화면에 결괏값을 출력하는 방식을 사용했습니다.

하지만 입출력 방법이 꼭 이것만 있는 것은 아닙니다.

이번에는 파일을 통한 입출력 방법에 대해 알아봅시다.

여기에서는 파일을 새로 만든 다음 프로그램이 만든 결과값을 새 파일에 저장해보고

또 파일에 저장된 내용을 읽고 새로운 내용을 추가하는 방법도 알아보겠습니다.

 

파일 읽기

파이썬에서 파일을 읽기 위해서는 open() 함수를 사용하여 파일을 열고, 이후에 파일 객체를 사용하여 파일의 내용을 읽어올 수 있습니다.

 

파일 열기 쓰기

open() 함수를 사용하여 파일을 엽니다. 이 함수는 파일 객체를 반환합니다.

file = open("파일경로/파일이름.txt", "r")

 

코드 끝은 'r'부분은 파일을 열때 모드를 뜻합니다

파일을 열때 다양한 모드가 있는데 아래 설명해드리겠습니다

 

  1. 읽기 모드 (Read Mode - "r"):
    • 파일을 읽기 전용으로 엽니다.
    • 파일이 존재하지 않으면 오류가 발생합니다.
    • 파일의 포인터는 파일의 시작 부분에 위치합니다.
  2. 쓰기 모드 (Write Mode - "w"):
    • 파일을 쓰기 전용으로 엽니다.
    • 파일이 존재하지 않으면 새로 생성하고, 파일이 이미 존재하면 기존 내용을 모두 삭제합니다.
    • 파일의 포인터는 파일의 시작 부분에 위치합니다.
  3. 추가 모드 (Append Mode - "a"):
    • 파일을 쓰기 전용으로 엽니다.
    • 파일이 존재하지 않으면 새로 생성하고, 파일이 이미 존재하면 파일 끝에 새로운 내용을 추가합니다.
    • 파일의 포인터는 파일의 끝에 위치합니다.
  4. 바이너리 읽기 모드 (Binary Read Mode - "rb"):
    • 텍스트 파일이 아닌 이진 파일을 읽기 위해 사용됩니다.
    • 파일을 바이너리 모드로 열 때 사용됩니다.
    • 윈도우에서는 텍스트 파일과 바이너리 파일의 차이가 없지만, 리눅스나 맥에서는 차이가 있습니다.
  5. 바이너리 쓰기 모드 (Binary Write Mode - "wb"):
    • 바이너리 파일을 쓰기 위해 사용됩니다.
    • 파일을 바이너리 모드로 열 때 사용됩니다.
  6. 텍스트 읽기 및 쓰기 모드 (Read/Write Mode - "r+"):
    • 파일을 읽기 및 쓰기 모드로 엽니다.
    • 파일이 존재하지 않으면 오류가 발생합니다.
    • 파일의 포인터는 파일의 시작 부분에 위치합니다.
  7. 바이너리 읽기 및 쓰기 모드 (Binary Read/Write Mode - "r+b" 또는 "rb+"):
    • 이진 파일을 읽고 쓰기 위해 사용됩니다.
    • 파일을 바이너리 모드로 열 때 사용됩니다.

이렇게 다양한 모드가 있지만 일반적으로 'r', 'w', 'a' 가 제일 많이 쓰이는 방식입니다

 

파일 닫기

파일을 읽은 후에는 반드시 파일을 닫아야 합니다.

파일을 열고 사용이 끝났을 때는 close() 메서드를 사용하여 파일을 닫습니다.

file.close()

 

또는 with 문을 사용하여 파일을 열면 블록이 종료될 때

파일이 자동으로 닫히도록 할 수 있습니다.

이 방법을 사용하는 것이 권장됩니다.

with open("파일경로/파일이름.txt", "r") as file:
    content = file.read()

 

위의 과정을 통해 파일을 열고 내용을 읽을 수 있습니다.

하지만 파일을 한 번에 전체 내용을 읽지 않고 한 줄씩 처리하는 것이 메모리 효율적이며

대용량 파일도 처리할 수 있습니다.

이를 위해서는 for 문을 사용하여 파일 객체를 반복적으로 순회하면 됩니다.

with open("파일경로/파일이름.txt", "r") as file:
    for line in file:
        print(line.strip())  # 각 줄의 공백 제거하여 출력

 

위 코드는 파일을 한 줄씩 읽어와서 각 줄을 출력합니다.

strip() 메서드를 사용하여 각 줄의 앞뒤 공백을 제거하고 출력합니다.

 

파일 쓰기

파일 객체의 write() 메서드를 사용하여 파일에 데이터를 씁니다.

이 메서드는 문자열을 인자로 받아 파일에 문자열을 씁니다.

줄 바꿈을 추가하려면 문자열 끝에 \n을 추가해야 합니다.

file.write("첫 번째 줄\n")
file.write("두 번째 줄\n")
file.write("세 번째 줄\n")

 

 

파일에 새로운 내용 추가

새로운 내용을 파일에 추가하기 위해서는 파일을 "추가 모드"로 열어야 합니다.

파이썬에서는 파일을 추가 모드("a")로 열면 기존 파일에 새로운 내용을 추가할 수 있습니다.

추가 모드로 파일을 열 때는 파일이 존재하지 않으면 새로 생성하고,

파일이 이미 존재하면 파일 끝에 새로운 내용을 추가합니다.

아래는 파일에 새로운 내용을 추가하는 과정을 보여주는 예제 코드입니다

with open("파일경로/파일이름.txt", "a") as file:
    file.write("추가할 새로운 내용\n")
    file.write("또 다른 추가 내용\n")

 

위의 코드에서 "파일경로/파일이름.txt"는 파일의 경로와 이름을 나타냅니다.

open() 함수의 두 번째 인자로 "a"를 전달하여 파일을 추가 모드로 엽니다.

그런 다음 파일 객체의 write() 메서드를 사용하여 파일에 추가할 새로운 내용을 작성합니다.

추가 모드로 파일을 열면 파일의 끝에 새로운 내용을 추가하게 됩니다.

with 문을 사용하여 파일을 열면 블록이 종료될 때 파일이 자동으로 닫히도록 할 수 있습니다.

이 방법을 사용하면 파일을 닫는 것을 잊어버리는 실수를 방지할 수 있습니다.

with open("파일경로/파일이름.txt", "a") as file:
    file.write("추가할 새로운 내용\n")
    file.write("또 다른 추가 내용\n")

 

이 코드는 파일을 추가 모드로 열고 새로운 내용을 추가한 후 파일을 자동으로 닫습니다.

파일에 새로운 내용을 추가하는 방법은 기존 파일에 데이터를 추가하여 파일을 업데이트하거나

새로운 내용을 기존 파일에 추가할 때 유용합니다.

반응형
반응형

지금까지 공부한 내용을 바탕으로 함수, 입출력, 파일 처리 방법 등에 대해서 알아봅시다.

입출력은 프로그래밍 설계와 관련이 있습니다.

프로그래머는 프로그램을 만들기 전에 어떤 식으로 동작하게 할 것인지 설계부터 하는데,

이때 가장 중요한 부분이 바로 입출력입니다.

특정 프로그램만 사용하는 함수를 만들 것인지,

모든 프로그램이 공통으로 사용하는 함수를 만들 것인지,

더 나아가 오픈 API로 공개하여

외부 프로그램도 사용할 수 있게 만들 것인지가 모두 입출력과 관련 있습니다.

 

함수

함수는 프로그래밍에서 일련의 작업을 수행하는 코드 블록입니다.

함수는 코드의 재사용성을 높이고, 코드의 구조를 단순화하여 가독성을 향상시킵니다.

파이썬에서 함수는 def 키워드를 사용하여 정의되며, 다음과 같은 구조를 가집니다

def 함수이름(매개변수1, 매개변수2, ...):
    # 함수가 수행할 작업을 정의한 코드 블록
    return 반환값

 

여기서 각 요소는 다음과 같습니다:

  • def: 함수 정의를 시작하는 키워드입니다.
  • 함수이름: 함수의 이름을 지정합니다. 함수 이름은 유일해야 합니다.
  • (매개변수1, 매개변수2, ...): 함수에 전달되는 매개변수(parameter)의 목록입니다. 매개변수는 함수 내에서 사용되는 변수입니다.
  • :: 콜론으로 코드 블록의 시작을 나타냅니다.
  • 함수가 수행할 작업을 정의한 코드 블록: 함수가 실행될 때 수행될 코드입니다. 이 코드 블록은 함수의 기능을 정의합니다.
  • return: 함수가 실행을 마치고 결과값을 반환하는 키워드입니다. 반환값이 없는 경우에는 return 문이 생략될 수 있습니다.
  • 반환값: 함수가 실행을 마치고 반환하는 값을 지정합니다.

입력값이 있는 함수

예를 들어, 두 개의 숫자를 더하는 함수를 정의해보겠습니다

def add_numbers(a, b):
    result = a + b
    return result

 

위 예제에서 add_numbers(3, 5)는 3과 5를 전달하여 함수를 호출하고,

함수는 이를 받아서 더한 후 결과값 8을 반환합니다.

반환된 결과값은 sum_result 변수에 저장되어 출력됩니다.

함수는 프로그래밍에서 매우 중요한 개념이며,

코드의 재사용성과 유지 보수성을 향상시키는 데에 큰 역할을 합니다.

함수를 잘 이해하고 활용할 수 있다면 좀 더 효율적이고 구조화된 코드를 작성할 수 있습니다.

 

입력값이 없는 함수

입력값이 없는 함수는 매개변수(parameter)를 받지 않고 정의된 함수입니다.

이러한 함수는 실행될 때 외부로부터 어떤 값도 받지 않고 독립적으로 동작합니다.

입력값이 없는 함수의 구조는 다음과 같습니다

def 함수이름():
    # 함수가 수행할 작업을 정의한 코드 블록
    # 입력값이 없는 경우에는 보통 어떤 코드를 실행하거나 값을 반환합니다

 

여기서 중요한 점은 함수 이름 뒤에 빈 괄호 ( )가 있는 것입니다.

이는 함수가 매개변수를 받지 않음을 나타냅니다.

예를 들어, 현재 시간을 출력하는 함수를 정의하는 경우

입력값이 없는 함수를 사용할 수 있습니다

from datetime import datetime

def print_current_time():
    current_time = datetime.now().strftime("%Y-%m-%d %H:%M:%S")
    print("현재 시간은:", current_time)

# 함수 호출
print_current_time()

 

위 코드에서 print_current_time() 함수는 입력값을 받지 않고 현재 시간을 출력합니다.

함수를 호출할 때는 단순히 함수 이름과 괄호만 사용하여 호출하면 됩니다.

입력값이 없는 함수는 일반적으로 프로그램 내에서 특정한 작업을 수행하거나

정보를 표시하는데 사용됩니다. 외부 입력이 필요 없는 작업을 수행할 때 유용하게 사용될 수 있습니다.

 

리턴값이 없는 함수

리턴값이 없는 함수는 함수가 실행된 후에 결과를 반환하지 않는 함수입니다.

이러한 함수는 함수 내에서 작업을 수행하고 값을 반환하지 않는 경우에 사용됩니다.

대신에 함수는 어떤 동작을 수행하거나 특정한 결과를 생성합니다.

리턴값이 없는 함수의 구조는 다음과 같습니다

def 함수이름(매개변수1, 매개변수2, ...):
    # 함수가 수행할 작업을 정의한 코드 블록
    # 결과를 반환하지 않음
 

여기서 중요한 점은 함수의 코드 블록이 실행된 후에

return 키워드가 사용되지 않는다는 것입니다.

대신에 함수는 일련의 작업을 수행하고 결과를 생성하거나 외부 효과를 가질 수 있습니다.

예를 들어, 리스트의 요소를 출력하는 함수를 정의하는 경우 리턴값이 없는 함수를 사용할 수 있습니다

def print_list_elements(my_list):
    for item in my_list:
        print(item)

# 함수 호출
my_list = [1, 2, 3, 4, 5]
print_list_elements(my_list)
 

위 코드에서 print_list_elements() 함수는 입력으로 받은 리스트의 각 요소를 출력하고 있습니다.

이 함수는 결과를 반환하지 않고 있으며, 대신에 리스트의 요소를 출력하는 동작을 수행하고 있습니다.

리턴값이 없는 함수는 주로 어떤 작업을 수행하고자 할 때 사용됩니다.

예를 들어, 화면에 출력하는 함수, 파일에 쓰는 함수,

데이터를 업데이트하는 함수 등이 리턴값이 없는 함수의 예시입니다.

이러한 함수들은 주로 프로그램의 동작을 제어하거나 외부 상태를 변경하는데 사용됩니다.

 

 

사용자 입출력

사용자 입출력(User Input/Output)은 프로그램이 사용자와 상호작용하고 정보를 주고받는 과정을 의미합니다.

사용자 입력은 프로그램이 사용자로부터 데이터를 받는 것을 의미하며,

사용자 출력은 프로그램이 사용자에게 정보를 제공하는 것을 의미합니다.

파이썬에서는 내장 함수 input()print()을 사용하여 간단하게 사용자 입출력을 처리할 수 있습니다

 

사용자 입력(user input)

사용자로부터 데이터를 입력받기 위해서는 input() 함수를 사용합니다.

input() 함수는 사용자에게 텍스트를 표시하고 사용자가 엔터키를 누를 때까지

사용자가 입력한 값을 문자열로 반환합니다.

예를 들어, 사용자로부터 이름을 입력받는 프로그램은 다음과 같이 작성할 수 있습니다

name = input("이름을 입력하세요: ")
print("안녕하세요,", name, "님!")
위 코드에서 input("이름을 입력하세요: ")은 사용자에게 "이름을 입력하세요: "
라는 메시지를 표시하고, 사용자가 입력한 값을 문자열로 반환합니다.
이 값을 변수 name에 저장하고, 이후 print() 함수를 사용하여
화면에 "안녕하세요, [입력받은 이름] 님!"이라는 메시지를 출력합니다.
 
 

사용자 출력(user output)

사용자에게 정보를 제공하기 위해서는 낯익은 print() 함수를 사용합니다.

print() 함수는 인자로 전달된 값을 표시합니다.

여러 개의 값을 출력할 때는 쉼표로 구분하여 전달합니다.

예를 들어, 사용자에게 환영 메시지를 출력하는 프로그램은 다음과 같이 작성할 수 있습니다

print("환영합니다!")
print("이 프로그램은 사용자 입출력에 대해 알려주는 예제입니다.")

 

위 코드는 각 print() 함수를 사용하여 두 줄의 메시지를 출력합니다.

이정도는 그간 많이 사용하셨으니 그냥 출력문이다 생각만 하시고 지나가시면 됩니다

사용자 입출력은 파이썬 프로그래밍에서 매우 중요한 부분이며,

프로그램과 사용자 간의 상호작용을 가능하게 합니다.

사용자로부터 입력을 받아 처리하거나,

프로그램 작업의 진행 상황을 알리는 등 다양한 목적으로 사용됩니다.

반응형
반응형

 

 if, while, for 등의 제어문에 대해서 배워보겠습니다.

제어문을 배우기 전에 집을 짓는 일을 생각해 봅시다.

집을 지을 때 나무, 돌, 시멘트 등은 재료가 되고 철근은 집의 뼈대가 됩니다.

프로그램을 만드는 것도 집 짓기와 매우 비슷한 면이 있습니다.

나무, 돌, 시멘트와 같은 재료는 자료형이 되고 집의 뼈대를 이루는 철근이 바로 제어문에 해당됩니다.

자료형을 바탕으로 제어문을 이용하여 프로그램의 구조를 만들어 봅시다

 

if 문

if 문은 조건에 따라 프로그램의 실행을 분기하는데 사용됩니다.

주어진 조건이 참(True)인 경우에는 if 블록 안의 코드가 실행되고,

조건이 거짓(False)인 경우에는 if 블록 안의 코드는 실행되지 않습니다.

if 문은 다음과 같은 구조를 가집니다

if 조건:
    # 조건이 참일 때 실행할 코드

 

여기서 조건은 참 또는 거짓을 판단할 수 있는 표현식(expression)입니다. 이 표현식이 참(True)이면 if 문의 코드 블록이 실행되고, 거짓(False)이면 실행되지 않습니다.

코드 블록은 콜론(:)으로 시작하여 들여쓰기(indentation)로 구분됩니다.

들여쓰기는 파이썬에서 매우 중요하며, 코드 블록의 범위를 지정합니다.

if 조건:
    # 코드 블록 시작
    # 들여쓰기로 코드 블록 범위를 지정
    # 코드 블록 끝

 

if 문은 단독으로 사용될 수도 있고, elif나 else와 함께 사용하여 여러 조건을 처리할 수도 있습니다.

if 조건1:
    # 조건1이 참일 때 실행할 코드
elif 조건2:
    # 조건1은 거짓이고, 조건2가 참일 때 실행할 코드
else:
    # 위의 모든 조건이 거짓일 때 실행할 코드

여러 개의 elif 절을 사용하여 다양한 조건을 검사할 수 있으며,

else 절은 모든 if 또는 elif 절의 조건이 거짓일 때 실행됩니다.

if 문은 프로그램에서 가장 기본적이고 중요한 제어 구조 중 하나이며, 프로그램의 흐름을 조정하는데 필수적입니다.

 

 

while 문

while 문은 주어진 조건이 참(True)인 동안 반복적으로 코드 블록을 실행하는 제어문입니다.

조건이 거짓(False)이 되면 반복이 중지됩니다. while 문의 구조는 다음과 같습니다:

while 조건:
    # 조건이 참일 때 실행할 코드

 

여기서 조건은 반복문이 실행될 때마다 평가되는 표현식(expression)입니다.

조건이 참(True)이면 while 문의 코드 블록이 실행되고,

코드 블록이 실행된 후에 다시 조건을 검사합니다.

조건이 여전히 참이면 코드 블록이 다시 실행되고,

이 과정이 조건이 거짓(False)이 될 때까지 반복됩니다.

 

while 문은 다음과 같은 특징을 가지고 있습니다:

  1. 반복 횟수의 불확실성: 반복문이 시작될 때 조건이 참이면 코드 블록이 실행되고, 코드 블록이 실행된 후에 다시 조건을 검사하여 참인지 여부를 확인합니다. 이 과정이 반복되기 때문에 반복 횟수에 대한 불확실성이 있습니다.
  2. 조건이 변화하는 경우: 코드 블록 내부에서 조건이 변화하여 조건이 거짓이 되도록 만들어야 합니다. 그렇지 않으면 무한 루프(infinite loop)에 빠질 수 있습니다.

while 문을 사용하여 간단한 예제를 살펴보겠습니다.

아래 예제는 변수 count가 5보다 작을 때까지 값을 출력하는 예제입니다

count = 0
while count < 5:
    print(count)
    count += 1

 

 

위 코드는 0부터 4까지의 값을 출력하고, count 값이 5가 되면 조건이 거짓이 되어 반복이 중지됩니다.

while 문은 조건이 참(True)인 동안 코드를 반복적으로 실행할 때 유용하게 사용됩니다

그러나 조건이 영원히 참이 되지 않도록 주의해야 합니다.

만약 조건이 영원히 참이라면 프로그램이 무한 루프에 빠질 수 있습니다.

 

 

for 문

파이썬의 for 문은 순회 가능한(iterable) 객체의 각 요소에 대해 반복적으로 코드 블록을 실행하는 제어문입니다.

for 문은 반복문의 한 유형으로, 주어진 순회 가능한 객체를 처음부터 끝까지 순회하며

각 요소에 대해 지정된 작업을 수행합니다.

for 문의 구조는 다음과 같습니다:

for 변수 in 순회_가능한_객체:
    # 코드 블록을 반복적으로 실행

 

여기서 변수는 각 요소의 값을 저장하는 변수입니다.

순회_가능한_객체는 리스트, 튜플, 문자열, 집합(set), 딕셔너리 등과 같은 순회 가능한(iterable) 객체입니다.

for 문은 순회 가능한 객체의 각 요소에 대해 코드 블록을 반복적으로 실행하며,

반복이 끝날 때까지 순회를 계속합니다.

예를 들어, 다음은 리스트를 순회하면서 각 요소를 출력하는 간단한 예제입니다

my_list = [1, 2, 3, 4, 5]
for num in my_list:
    print(num)

위 코드는 리스트 my_list의 각 요소를 변수 num에 저장하여 출력합니다.

for 문은 순회 가능한 객체의 각 요소에 대해 반복적으로 작업을 수행할 때 주로 사용됩니다.

파이썬의 for 문은 다른 프로그래밍 언어의 for 문과는 조금 다르며,

루프의 시작과 끝을 명시적으로 지정하지 않고 순회 가능한 객체의 모든 요소를 순회합니다.

또한 for 문은 range() 함수와 함께 사용되어 특정 횟수만큼 반복하는 데에도 유용하게 사용됩니다.

예를 들어, 다음은 range() 함수를 사용하여 1부터 5까지의 정수를 순회하는 예제입니다

for i in range(1, 6):
    print(i)

range(1, 6)은 1부터 5까지의 정수를 생성하며, for 문은 이를 순회하여 각 정수를 변수 i에 저장하여 출력합니다.

 
 
 
반응형
반응형

튜플이란??

튜플(Tuple)은 파이썬에서 사용되는 데이터 구조 중 하나입니다. 튜플은 여러

을 담는 컨테이너이며, 리스트와 유사하지만 몇 가지 중요한 차이점이 있습니다.

  1. 불변성(Immutable): 튜플은 한 번 생성되면 내용을 변경할 수 없습니다. 이는 리스트와 대조적이며, 리스트는 변경 가능한(mutable) 자료형입니다.
  2. 괄호 사용: 튜플은 소괄호 ()로 둘러싸여 있습니다.
  3. 쉼표로 구분된 항목: 튜플의 각 항목은 쉼표로 구분됩니다.
  4. 여러 데이터 타입 포함 가능: 튜플은 서로 다른 데이터 타입의 항목을 포함할 수 있습니다.

튜플은 주로 데이터의 불변성이 필요한 상황에서 사용됩니다. 예를 들어, 함수에서 여러 값을 반환할 때 튜플을 사용할 수 있습니다. 또한 딕셔너리의 키로 사용될 수 있습니다.

tuple_a = (1, 2, 3, 4, 5)

 

위의 예시에서 'tuple_a'은 정수들의 튜플입니다.

튜플은 변경되지 않아야 하는 데이터나, 수정할 필요가 없는 데이터를 저장하는데 유용합니다.

 

튜플도 리스트와 마찬가지로 인덱싱과 슬라이싱을 활용할 수 있습니다

인덱싱과 슬라이싱에 관한 내용이 궁금하다면 

아래 이전 글을 참조

[파이썬 기초]문자열 자료형 및 리스트 자료형

 

딕셔너리 자료형

딕셔너리(Dictionary)는 파이썬에서 사용되는 데이터 구조 중 하나로,

키(key)와 값(value)의 쌍으로 이루어진 연관 배열(associative array)

혹은 해시맵(Hash Map)입니다. 딕셔너리는 중괄호 {}로 둘러싸여 있으며,

각 키와 값은 콜론(:)으로 구분되어 표현됩니다.

딕셔너리는 다음과 같은 특징을 가지고 있습니다:

  1. 키-값 쌍: 딕셔너리는 각 키와 해당하는 값의 쌍을 저장합니다. 키는 고유해야 하며, 값은 중복될 수 있습니다.
  2. 불변성 키: 딕셔너리의 키는 불변(immutable)해야 합니다. 즉, 리스트와 같이 변경 가능한(mutable) 자료형은 키로 사용할 수 없지만, 문자열, 숫자, 튜플과 같은 불변 자료형은 키로 사용할 수 있습니다.
  3. 가변성 값: 딕셔너리의 값은 변경 가능한(mutable) 자료형이 될 수 있습니다. 리스트, 딕셔너리 등을 값으로 포함할 수 있습니다.
  4. 순서가 없음: 딕셔너리는 항목의 순서를 보장하지 않습니다. 즉, 항목이 추가된 순서대로 저장되지 않으며, 인덱스를 사용하여 항목에 접근할 수 없습니다.
  5. 다양한 데이터 타입 포함 가능: 딕셔너리는 서로 다른 데이터 타입의 키와 값 모두를 포함할 수 있습니다.

다음은 딕셔너리의 예제입니다

dict = {"apple": 3, "banana": 5, "cherry": 2}

 

위의 예시에서 dict는 과일의 이름을 키로 하고,

해당 과일의 재고를 값으로 가지는 딕셔너리입니다.

딕셔너리는 데이터를 효율적으로 저장하고 검색할 수 있으며,

데이터를 키와 값의 쌍으로 조직화할 때 유용합니다.

예를 들어, 사전, 사용자 정보, 설정 등과 같이 데이터를 관리하는데 활용됩니다.

 

딕셔너리에 값을 추가하는 방법

딕셔너리에 값을 추가하는 가장 간단한 방법은 새로운 키-값 쌍을 할당하는 것입니다.

이를 통해 딕셔너리에 새로운 항목을 추가할 수 있습니다.

예를 들어, 다음과 같은 빈 딕셔너리가 있다고 가정해 봅시다:

 

dict={}

이제 이 딕셔너리에 값을 추가하려면 다음과 같이 합니다:

 

dict["apple"] = 3
dict["banana"] = 5
dict["cherry"] = 2

 

위 코드에서 "apple", "banana", "cherry"는 각각 키이고, 3, 5, 2는 각 키에 대응하는 값입니다.

이렇게 하면 딕셔너리 dict에 새로운 키-값 쌍이 추가됩니다.

만약 딕셔너리에 이미 존재하는 키에 새로운 값을 할당하면 해당 키의 값이 업데이트됩니다.

만약 딕셔너리에 존재하지 않는 키에 값을 할당하면 새로운 키-값 쌍이 딕셔너리에 추가됩니다.

딕셔너리에 값을 추가하는 방법은 간단하며 유연하게 사용할 수 있습니다.

이를 통해 딕셔너리를 동적으로 구성하고 변경할 수 있습니다.

 

아래는 이를 이용한 예제 소스 입니다

# 빈 딕셔너리 생성
dict = {}

# 키-값 쌍 추가
dict["apple"] = 3
dict["banana"] = 5
dict["cherry"] = 2

# 딕셔너리 출력
print("Initial dictionary:", dict)

# 특정 키의 값 업데이트
dict["apple"] = 10

# 업데이트된 딕셔너리 출력
print("Updated dictionary:", dict)

# 존재하지 않는 키에 값 할당
dict["date"] = 7

# 업데이트된 딕셔너리 출력
print("Dictionary after adding a new key-value pair:", dict)

 

 

딕셔너리의 값을 삭제하는 방법

딕셔너리 안의 값을 삭제하는 여러 가지 방법이 있습니다. 주로 사용되는 방법을 설명하겠습니다.

 

del 키

del 키워드를 사용하여 딕셔너리 안의 특정 키와 해당하는 값을 삭제할 수 있습니다.

my_dict = {"apple": 3, "banana": 5, "cherry": 2}
del my_dict["apple"]
print(my_dict)  # 출력: {'banana': 5, 'cherry': 2}

 

pop() 메서드

pop() 메서드를 사용하여 특정 키와 해당하는 값을 삭제할 수 있습니다. 이 메서드는 삭제된 값을 반환합니다.

my_dict = {"apple": 3, "banana": 5, "cherry": 2}
deleted_value = my_dict.pop("banana")
print(my_dict)        # 출력: {'apple': 3, 'cherry': 2}
print(deleted_value)  # 출력: 5

 

popitem() 메서드

popitem() 메서드를 사용하여 딕셔너리에서 마지막 키-값 쌍을 삭제할 수 있습니다.

이 메서드도 삭제된 키-값 쌍을 반환합니다.

my_dict = {"apple": 3, "banana": 5, "cherry": 2}
deleted_item = my_dict.popitem()
print(my_dict)        # 출력: {'apple': 3, 'banana': 5}
print(deleted_item)   # 출력: ('cherry', 2)

 

 

clear() 메서드

clear() 메서드를 사용하여 딕셔너리의 모든 항목을 삭제할 수 있습니다.

my_dict = {"apple": 3, "banana": 5, "cherry": 2}
my_dict.clear()
print(my_dict)  # 출력: {}

 

 

딕셔너리 관련 함수

파이썬에서 딕셔너리 관련 함수들은 딕셔너리를 삭제하는것 뿐만 아니라

수정, 조작하고 검색하는데 사용됩니다.

이러한 함수들은 딕셔너리를 다룰 때 매우 유용합니다.

몇 가지 주요한 딕셔너리 관련 함수들을 설명하겠습니다.

 

len()

딕셔너리에 포함된 키-값 쌍의 개수를 반환합니다.

my_dict = {"apple": 3, "banana": 5, "cherry": 2}
print(len(my_dict))  # 출력: 3

 

keys()

딕셔너리의 모든 키를 반환합니다.

my_dict = {"apple": 3, "banana": 5, "cherry": 2}
print(my_dict.keys())  # 출력: dict_keys(['apple', 'banana', 'cherry'])

 

values()

딕셔너리의 모든 값들을 반환합니다.

my_dict = {"apple": 3, "banana": 5, "cherry": 2}
print(my_dict.values())  # 출력: dict_values([3, 5, 2])

 

items()

딕셔너리의 모든 키-값 쌍을 (키, 값)의 튜플 형태로 반환합니다.

my_dict = {"apple": 3, "banana": 5, "cherry": 2}
print(my_dict.items())  # 출력: dict_items([('apple', 3), ('banana', 5), ('cherry', 2)])

 

get()

주어진 키에 해당하는 값을 반환합니다. 키가 존재하지 않을 경우에는 기본값을 반환합니다.

my_dict = {"apple": 3, "banana": 5, "cherry": 2}
print(my_dict.get("apple"))    # 출력: 3
print(my_dict.get("date", 0))  # 출력: 0

 

update()

다른 딕셔너리나 (키, 값)의 쌍들로부터 주어진 딕셔너리를 업데이트합니다.

my_dict = {"apple": 3, "banana": 5}
new_items = {"cherry": 2, "date": 4}
my_dict.update(new_items)
print(my_dict)  # 출력: {'apple': 3, 'banana': 5, 'cherry': 2, 'date': 4}

 

반응형
반응형

파이썬에서 문자열(String)은 문자들의 시퀀스(sequence)로 이루어진 데이터 타입입니다.

문자열은 작은따옴표('), 큰따옴표("), 혹은 삼중 따옴표(''' 또는 """)로 둘러싸여 있습니다. 예를 들어

my_string = 'Hello, World!'

 

또는

my_string = "Hello, World!"

와 같이 정의할 수 있습니다. 문자열은 변경할 수 없는(immutable) 자료형이기 때문에 한 번 생성되면 수정할 수 없습니다. 하지만 필요한 경우에는 새로운 문자열을 생성하여 조합하거나 수정할 수 있습니다. Python의 문자열은 매우 다양한 작업을 지원하며, 문자열 관련 메서드를 통해 다양한 작업을 수행할 수 있습니다.

 

이스케이프 코드

이스케이프 코드(escape code)는 문자열 안에서 특정한 문자를 표현하기 위해 역슬래시(\\)로 시작하는 문자 조합입니다. 이스케이프 코드를 사용하면 일반적으로 문자열에서 직접 나타낼 수 없는 특수 문자를 나타낼 수 있습니다.

가장 일반적으로 사용되는 몇 가지 이스케이프 코드는 다음과 같습니다:

 

  • `\n`: 줄 바꿈 (newline)
  • `\t`: 탭
  • `\\`: 역슬래시 자체를 나타냄
  • `\'`: 작은따옴표(단일 인용부호)를 나타냄
  • `\"`: 큰따옴표(이중 인용부호)를 나타냄

예를 들어, `"Hello\nWorld!"`와 같은 문자열은 "Hello"와 "World!" 사이에 줄 바꿈을 추가합니다. 이스케이프 코드를 사용하면 프로그래머가 특정한 형식의 출력을 생성하거나 특수 문자를 문자열에 포함할 수 있습니다.

 

 

문자열의 연산

문자열 연산은 일반적으로 결합(concatenation), 반복(repetition),

인덱싱(indexing), 슬라이싱(slicing) 등의 작업을 수행합니다.

 

1. 문자열 결합(concatenation)

두 개의 문자열을 합쳐서 하나의 문자열로 만듭니다. 이는 + 연산자를 사용하여 수행됩니다.

str1 = "Hello"
str2 = "World"
result = str1 + str2
print(result)  # 출력: HelloWorld

 

2. 인덱싱(indexing)

문자열에서 특정 위치에 있는 문자를 가져옵니다. 이는 대괄호 '[ ]' 내에 인덱스를 사용하여 수행됩니다.

인덱스는 0부터 시작합니다.

 

my_string = "Hello"
print(my_string[0])  # 출력: H

 

3. 슬라이싱(slicing)

문자열에서 일부분을 추출합니다. 이는 대괄호 '[ ]' 내에 시작 인덱스와 끝 인덱스를 사용하여 수행됩니다.

my_string = "Hello, World!"
substring = my_string[7:12]
print(substring)  # 출력: World

 

4. 그밖의 연산자를 이용한 문자열 연산

문자열의 곱셈 : 문자열을 정수와 곱하면 해당 문자열이 그 정수의 횟수만큼 반복됩니다.

이것은 문자열의 반복 연산이며, 파이썬에서 기본적으로 지원하는 기능입니다.

string = "abc"
result = string * 3
print(result)

 

리스트 자료형

일반적인 리스트(list)의 정의와 특성

리스트(List)는 파이썬에서 가장 자주 사용되는 데이터 구조 중 하나입니다.

리스트는 여러 항목의 모음(collection)을 나타내며, 각 항목은 쉼표로 구분되어 있습니다.

리스트는 대괄호 [ ]로 둘러싸여 있습니다.

my_list = [1, 2, 3, 4, 5]

위의 예시에서 my_list는 정수들의 리스트입니다.

리스트는 다양한 종류의 항목을 포함할 수 있으며,

서로 다른 데이터 타입의 항목을 혼합하여 포함할 수도 있습니다.

 

리스트는 다음과 같은 특징을 가지고 있습니다:

  1. 순서가 있음(Ordered): 리스트는 항목이 순서대로 저장되어 있으며, 항목의 위치는 인덱스(index)를 사용하여 접근할 수 있습니다. 이는 리스트의 요소가 삽입된 순서대로 유지됨을 의미합니다.
  2. 가변성(mutable): 리스트는 변경 가능한(mutable) 자료형입니다. 즉, 한 번 생성된 후에도 항목을 추가, 삭제, 수정할 수 있습니다.
  3. 여러 데이터 타입 포함 가능: 리스트는 서로 다른 데이터 타입의 항목을 포함할 수 있습니다. 예를 들어, 정수, 부동소수점 수, 문자열, 또 다른 리스트 등을 모두 포함할 수 있습니다.
  4. 인덱싱과 슬라이싱: 리스트의 각 항목은 인덱스를 사용하여 접근할 수 있으며, 슬라이싱을 통해 리스트의 일부분을 추출할 수 있습니다.
  5. 다양한 메서드 제공: 리스트는 여러가지 유용한 메서드들을 제공하여 리스트의 항목을 추가, 삭제, 정렬, 검색할 수 있습니다.

리스트는 파이썬에서 매우 중요하며, 다양한 프로그래밍 작업에 유용하게 사용됩니다. 예를 들어, 데이터 저장, 처리, 변경, 검색 등의 작업을 수행할 때 리스트는 자주 활용됩니다

 

인덱싱을 사용한 리스트의 활용

인덱싱을 사용하여 파이썬 리스트의 특정 항목에 접근하는 예제를 보여드리겠습니다.

예를 들어, 다음과 같은 리스트가 있다고 가정해 봅시다

my_list = ['apple', 'banana', 'cherry', 'date', 'elderberry']

 

이제 인덱싱을 사용하여 리스트의 각 항목에 접근할 수 있습니다.

인덱스는 0부터 시작하며, 리스트의 첫 번째 항목은 인덱스 0에 해당하고,

그 다음 항목은 1, 2, ..., n-1에 해당합니다 (여기서 n은 리스트의 길이입니다).

 

# 첫 번째 항목에 접근
first_item = my_list[0]
print(first_item)  # 출력: 'apple'

# 두 번째 항목에 접근
second_item = my_list[1]
print(second_item)  # 출력: 'banana'

# 마지막 항목에 접근
last_item = my_list[-1]  # 음수 인덱스는 뒤에서부터 항목에 접근합니다.
print(last_item)  # 출력: 'elderberry'

 

인덱싱을 사용하여 리스트의 특정 항목에 접근할 수 있습니다.

이를 통해 리스트의 원하는 위치에 있는 항목에 쉽게 접근할 수 있습니다.

 

슬라이싱을 사용한 리스트의 활용

슬라이싱을 사용하여 파이썬 리스트에서 일부분을 추출하는 예제를 살펴보겠습니다.

my_list = ['apple', 'banana', 'cherry', 'date', 'elderberry']

 

이제 슬라이싱을 사용하여 리스트의 일부분을 추출할 수 있습니다.

슬라이싱은 대괄호 내에 시작 인덱스와 끝 인덱스를 콜론으로 구분하여 지정합니다.

시작 인덱스는 포함되고, 끝 인덱스는 포함되지 않습니다.

# 첫 번째부터 세 번째 항목까지 추출 (끝 인덱스는 포함되지 않음)
subset1 = my_list[0:3]
print(subset1)  # 출력: ['apple', 'banana', 'cherry']

# 리스트의 처음부터 세 번째 항목까지 추출 (시작 인덱스를 생략하면 자동으로 0으로 간주)
subset2 = my_list[:3]
print(subset2)  # 출력: ['apple', 'banana', 'cherry']

# 두 번째부터 마지막 항목까지 추출
subset3 = my_list[1:]
print(subset3)  # 출력: ['banana', 'cherry', 'date', 'elderberry']

# 뒤에서 두 번째부터 끝에서 두 번째 항목까지 추출
subset4 = my_list[-2:-1]
print(subset4)  # 출력: ['date']

# 리스트의 복사본 만들기 (전체 리스트를 추출)
copy_of_list = my_list[:]
print(copy_of_list)  # 출력: ['apple', 'banana', 'cherry', 'date', 'elderberry']

 

슬라이싱을 사용하면 리스트의 일부분을 간편하게 추출할 수 있습니다.

이를 통해 리스트를 분할하거나 원하는 부분을 쉽게 처리할 수 있습니다.

반응형
반응형

어떤 프로그래밍 언어이든 그 언어의 자료형을 알고 이해할 수 있다면

이미 그 언어의 절반을 터득한 것이나 다름없다라는 말이 있다.

자료형이란 프로그래밍을 할 때 쓰이는 숫자, 문자열 등과 같이

자료 형태로 사용하는 모든 것을 뜻한다.

프로그램의 기본이자 핵심 단위가 바로 자료형이다.

예를 들어 계산 프로그램을 만들려면 어떤 것을 계산할 것인지부터 알아야 하고

데이터베이스 프로그램을 만들려면 어떤 자료를 저장할 것인지부터 알아야 하는 것처럼

기본 중의 기본이다.

 

 

정수형

숫자형(Number)이란 숫자 형태로 이루어진 자료형으로, 우리가 이미 잘 알고 있는 것이다. 우리가 흔히 사용하는 숫자들을 생각해 보자. 123과 같은 정수, 12.34와 같은 실수, 8진수나 16진수도 있다.

그중에서 정수형태부터 살펴보도록 하자.

 

정수형(integer)이란 말 그대로 정수를 뜻하는 자료형을 말한다.

다음은 양의 정수와 음의 정수, 숫자 0을 변수 exam이란 변수에 대입하는 예이다.

exam = 123
exam = -122
exam = 0

 

실수형

파이썬에서 실수형(floating-point)은 소수점이 포함된 숫자를 말한다.

다음은 실수를 변수 exam에 대입하는 예이다. 일반적으로 볼 수 있는 실수형의 소수점 표현 방식이다.

exam = 1.122
exam = -2.34

 

다음은 ‘컴퓨터식 지수 표현 방식’으로,

파이썬에서는 3.14e10 또는 3.14E10처럼 표현한다(e와 E 둘 중 어느 것을 사용해도 상관없다)

exam = 3.14E10
exam = 3.14e-10

여기서 3.14E10은 4.24∗10의 10승(31400000000.0), 3.14e-10은 4.24∗10의 −10승(0.000000000314)을 의미한다.

 

8진수와 16진수

8진수(octal)를 만들기 위해서는 숫자가 0o 또는 0O(숫자 0 + 알파벳 소문자 o 또는 대문자 O)으로 시작하면 된다.

exam = 0o10
print(exam)

#결과는 8

 

16진수(hexadecimal)를 만들기 위해서는 0x로 시작하면 된다.

exam_a = 0x1ff
exam_b = 0xBBB
print(exam_b)

#결과는 3003

 

8진수나 16진수는 파이썬에서 잘 사용하지 않는 형태의 숫자 자료형이므로 간단히 눈으로만 익히고 넘어가자.

 

연산자

 

사칙 연산

프로그래밍을 한 번도 해 본 적이 없는 분이라도 사칙 연산(+, -, *, /)은 알고 있을 것이다.

파이썬 역시 계산기와 마찬가지로 다음처럼 연산자를 사용해 사칙 연산을 수행한다.

a = 3
b = 4
print(a + b)

#결과는 7

print(a-b)

#결과는 -1

print(a*b)

#결과는 12

print(a/b)

#결과는 0.75

 

x의 y제곱을 나타내는 ** 연산자

 

다음으로 알아야 할 연산자로 **라는 연산자가 있다. 이 연산자는 x ** y처럼 사용했을 때 x의 y제곱값을 리턴한다.

다음 예를 통해 알아보자.

a = 3
b = 4
print(a**b)

#결과는 81

 

나눗셈 후 나머지를 리턴하는 % 연산자

 

프로그래밍을 처음 접하는 독자라면 % 연산자는 본 적이 없을 것이다. %는 나눗셈의 나머지 값을 리턴하는 연산자이다. 7을 3으로 나누면 나머지는 1, 3을 7로 나누면 나머지는 3이 될 것이다. 다음 예로 확인해 보자.

a=7
b=3
print(a%b)

#결과는 1

print(b%a)

#결과는 3

 

나눗셈 후 몫을 리턴하는 // 연산자

 

/ 연산자를 사용하여 7 나누기 4를 하면 그 결과는 예상대로 1.75가 된다.

a=7
b=4
print(a/b)

#결과는 1.75

 

이번에는 나눗셈 후 몫을 리턴하는 // 연산자를 사용한 경우를 살펴보자.

a=7
b=4
print(a//b)

#결과는 1

1.75에서 몫에 해당하는 정숫값 1만 리턴하는 것을 확인할 수 있다.

반응형
반응형

 

 파이썬(Python)은 1990년 암스테르담의 귀도 반 로섬(Guido van rossum)이 개발한 인터프리터 언어이다.

귀도는 파이썬이라는 이름을 자신이 좋아하는 코미디 쇼인

‘몬티 파이썬의 날아다니는 서커스(Monty python's flying circus)’에서 따왔다고 한다.

파이썬의 사전적 의미는 ‘고대 신화에 나오는 파르나소스 산의 동굴에 살던 큰 뱀’을 뜻하며,

아폴로 신이 델파이에서 파이썬을 퇴치했다는 이야기가 전해지고 있다.

대부분의 파이썬 책 표지와 아이콘이 뱀 모양으로 그려져 있는 이유는 바로 이 때문이다.

파이썬의 특징

1. 인간의 생각대로 써내려가는 컴퓨터 언어

a=1
b=2

print(a+b)

 

위의 소스코드를 살펴보자

파이썬을 모르는 사람도 대략적인 뜻을 이해할 수 있을것이다

'a는 1이고, b는 2인데 a+b의 값을 print하라는것 같은데?'

이렇게 생각했다면 아주 정확하다

 

2. 무료이고 배우기 쉽다

파이썬은 오픈 소스이므로 무료이다. 사용료 걱정 없이 언제 어디서든 파이썬을 내려받아 사용할 수 있다.

유명한 프로그래머인 에릭 레이먼드는 파이썬을 공부한 지 단 하루 만에

자신이 원하는 프로그램을 작성할 수 있었다고 한다. 난 못해...

파이썬은 간결하며 프로그래머가 다른 부수적인 개념이나 제한 사항 등에 신경 쓸 필요 없이

만들고자 하는 기능에만 집중할 수 있게 해 준다.

파이썬을 배우고 나면 다른 언어로 프로그래밍하는 것이 지루하다고 느낄지도 모른다.

 

 

파이썬으로 무엇을 할 수 있을까??

웹 프로그래밍

누구나 한 번쯤 크롬이나 엣지와 같은 웹 브라우저로 웹 서핑을 하면서 게시판이나 방명록에 글을 남겨 본 적이 있을 것이다. 이러한 게시판이나 방명록을 웹 프로그램이라고 한다. 파이썬은 웹 프로그램을 만들기에 매우 적합한 도구이며, 실제로 파이썬으로 제작한 웹 사이트는 셀 수 없을 정도로 많다.

인공지능과 머신러닝

최근 인공지능분야의 발전 덕분에 파이썬이 인기 언어로 떠올랐다. 인공지능은 기계가 인간처럼 생각하고 행동할 수 있는 능력을 제공하는 기술이다. 파이썬을 활용하면 자연어 처리, 음성 인식, 이미지 인식과 같은 인공지능 기술을 구현할 수 있다. 머신러닝은 인공지능의 한 분야로, 경험을 통해 자동으로 발전하는 컴퓨터 알고리즘을 연구하는 분야이다. 파이썬은 인공지능과 머신러닝 프로그래밍을 쉽게 할 수 있도록 사이킷런(scikit-learn), 텐서플로(TensorFlow), 파이토치(PyTorch), 케라스(Keras) 등과 같은 다양한 라이브러리를 제공한다.

수치 연산 프로그래밍

사실 파이썬은 수치 연산 프로그래밍에 적합한 언어가 아니다. 수치가 복잡하고 연산이 많다면 C와 같은 언어로 프로그래밍하는 것이 더 빠르기 때문이다. 하지만 파이썬은 넘파이(Numpy)라는 수치 연산 모듈을 제공한다. 이 모듈은 C로 작성했기 때문에 파이썬에서도 수치 연산을 빠르게 수행할수 있다.

데이터 분석

파이썬은 데이터 분석에 이상적인 언어로, 넘파이(NumPy), 판다스(Pandas), 맷플롯립(Matplotlib) 등과 같은 라이브러리들을 활용하여 데이터 처리, 통계 분석, 시각화를 손쉽게 수행할 수 있다. 데이터 분석을 할 때 아직까지는 데이터 분석에 특화된 R이라는 언어를 많이 사용하고 있지만, 판다스가 등장한 이래 파이썬을 사용하는 경우가 점점 많아지고 있다.

데이터베이스 프로그래밍

파이썬은 사이베이스(Sybase), 인포믹스(Infomix), 오라클(Oracle), 마이에스큐엘(MySQL), 포스트그레스큐엘(PostgreSQL) 등의 데이터베이스에 접근하기 위한 도구를 제공한다.

이런 굵직한 데이터베이스를 직접 사용하는 것 말고도 파이썬에는 재미있는 도구가 하나 더 있다. 바로 피클(pickle)이라는 모듈이다. 피클은 파이썬에서 사용하는 자료를 변형 없이 파일에 저장하거나 불러오는 일을 수행한다.

피클을 어떻게 사용하고 활용하는지는 ‘05-6 표준 라이브러리’를 참고하기 바란다.

시스템 유틸리티 제작하기

파이썬은 운영체제(윈도우, 리눅스 등)의 시스템 명령어를 사용할 수 있는 각종 도구를 갖추고 있기 때문에 이를 바탕으로 파일 관리, 로그 분석, 시스템 모니터링 등과 같은 여러 가지 시스템 유틸리티를 만드는 데 유리하다. 실제로 여러분은 시스템에서 사용 중인 서로 다른 유틸리티성 프로그램을 하나로 합쳐 보다 유용한 프로그램들을 무수히 만들어 낼 수 있다.

유틸리티란 컴퓨터를 사용하는 데 도움을 주는 여러 가지 소프트웨어를 말한다.

GUI 프로그래밍

GUI(graphic user interface) 프로그래밍이란 쉽게 말해 화면에 윈도우 창을 만들고 그 창에 프로그램을 동작시킬 수 있는 메뉴나 버튼 등을 추가하는 것을 말한다. 파이썬은 GUI 프로그래밍을 위한 도구들이 잘 갖추어져 있기 때문에 GUI 프로그램을 쉽게 만들 수 있다. 대표적인 예로 파이썬 프로그램과 함께 설치되는 Tkinter(티케이인터)를 들 수 있다. Tkinter를 사용하면 단 5줄의 소스 코드만으로 윈도우 창을 띄울 수 있다.

C언어와 결합하기

파이썬은 접착(glue) 언어라고도 부르는데, 그 이유는 다른 언어와 결합해서 사용할 수 있기 때문이다. C나 C++로 만든 프로그램을 파이썬에서 사용할 수 있고 파이썬으로 만든 프로그램도 C나 C++에서 사용할 수 있다.

사물 인터넷

파이썬은 사물 인터넷(Internet of things) 분야에서도 활용도가 높다. 한 예로 라즈베리파이(Raspberry pi)는 리눅스 기반의 매우 작은 컴퓨터이다. 라즈베리파이를 사용하면 홈시어터나 매우 작은 게임기 등 여러 가지 재미있는 것을 만들 수 있는데, 라즈베리파이를 제어할 때 파이썬을 사용한다. 예를 들어 라즈베리파이에 연결된 모터를 작동시키거나 LED에 불이 들어오게 하는 일을 파이썬으로 할 수 있다.

 

 

파이썬 설치하기

이제 실습을 해 보기 위해 컴퓨터에 파이썬을 설치해 봅시다.

자세한 사항은 파이썬 홈페이지(www.python.org)의 설명을 참고하기 바란다.

윈도우에서 파이썬 설치하기

1. 먼저 파이썬 공식 홈페이지의 다운로드 페이지(www.python.org/downloads)에서

윈도우용 파이썬 언어 패키지를 내려받는다.

Python 3.x로 시작하는 버전 중 가장 최신의 윈도우 설치 파일을 내려받자

2. 설치 파일을 실행한 후 [Install Now]를 클릭하면 설치가 진행된다. 이때 파이썬이 어느 곳에서든지 실행될 수 있도록 Add python.exe to PATH 옵션을 반드시 선택해야 한다.

3. 설치가 완료되면 [close]를 클릭하여 종료한다. 파이썬이 정상적으로 설치되었다면 [시작] 메뉴의 검색 창에서 python을 검색하여 파이썬 실행 프로그램을 찾을 수 있다.

맥에서 파이썬 설치하기

파이썬 공식 홈페이지(www.python.org)에서 [Downloads] 메뉴를 클릭하여 맥(Mac)용 파이썬 설치 파일을 내려받자.

그런 다음 내려받은 파일을 실행하여 설치한다.

설치가 완료되면 파이썬이 제대로 설치됐는지 확인하기 위해 터미널에서 다음과 같이 명령을 입력해 자신의 맥에 설치된 파이썬 버전을 확인해 보자.

pahkey@mymac ~ % python3 -V
Python 3.11.2

 

구 버전의 맥에는 파이썬 2.7 버전이 기본으로 설치되어 있기 때문에 python을 입력하면 파이썬 2.7이 실행된다. 맥에서는 항상 ‘python’ 대신 ‘python3’ 명령을 사용하자. 파이썬 버전이 제대로 출력되면 성공적으로 설치한 것이다.

 

 

파이썬 에디터의 종류

기본 제공되는 에디터 IDLE (Integrated development and learning environment)

파이썬 대화형 인터프리터는 간단한 예제를 풀 때는 편리하지만 여러 줄의 복잡한 소스 코드를 가진 프로그램을 만들 때는 불편하다. 또한 인터프리터를 종료하면 작성한 프로그램이 사라져 다시 사용하지 못한다는 단점이 있다.

따라서 여러 번 사용하기 위한 프로그램을 만들 때는 에디터를 사용해야 한다.

에디터란 소스 코드를 편집할 수 있는 프로그래밍 도구를 말한다. 에디터에는 여러 가지 종류가 있다. 이 책에서는 그중 파이썬을 설치할 때 기본으로 설치되는 파이썬 IDLE(Integrated development and learning environment)의 에디터를 사용한다.

 

추천하는 대표적인 에디터

비주얼 스튜디오 코드

비주얼 스튜디오 코드(Visual studio code)는 파이참(Pycharm)과 더불어 프로그래머에게 가장 많은 사랑을 받는 파이썬의 대표적인 에디터이다. 비주얼 스튜디오 코드는 공식 다운로드 사이트(code.visualstudio.com)에서 내려받을 수 있다.

비주얼 스튜디오 코드는 파이썬 전용 에디터가 아니기 때문에 파이썬 외에도 여러 가지 언어를 지원한다. 따라서 비주얼 스튜디오 코드를 설치한 후 파이썬을 사용하기 위해 가장 먼저 해야 할 일은 파이썬 extension을 설치하는 것이다. 파이썬 extension은 비주얼 스튜디오 코드의 [Extensions] 메뉴에서 설치할 수 있다.

코랩(COLAB)

구글 코랩(Colab)은 클라우드 기반의 무료 Jupyter 노트북 개발 환경이다.

내부적으로는 코랩 + 구글드라이브 + 도커 + 리눅스 + 구글클라우드의 기술스택으로 이루어진 것으로 알려져있다.

흔히들 딥러닝은 귀족학문이라고 말한다. 대학원에서 등록금을 지불해야 함은 물론, 꽤 긴 시간의 고찰과 연구를 필요로 하며 비싼 장비를 가진 자가 더 빠른 결과를 얻을 수 있다. 금수저에게 어울리는 분야다. GPU가 없거나 돈없는 분들은 꼭 한번 활용하시기 바란다.

파이참(PYCHARM)

파이썬에 어느 정도 익숙해졌다면 파이참을 사용해 보기를 적극 추천한다. 파이참은 가장 유명한 파이썬 에디터 중 하나로, 코드를 작성할 때 자동 완성, 문법 체크 등 편리한 기능을 많이 제공한다. 파이참 공식 다운로드 사이트(www.jetbrains.com/pycharm/download)에서 내려받을 수 있다.

파이참은 파이썬 전용 에디터이므로 별도의 extension이나 플러그인을 설치할 필요가 없다.

반응형
반응형

파이썬의 selenium 을 이용하면

브라우저로 제어 되는 모든 것이 가능합니다

그중에서 '네이버'의 자동 로그인에 대해 알아보도록 하겠습니다

 

네이버 자동 로그인 코드 분석

셀레니움 4.x 버전에서 작성한 코드입니다

전체적인 코드를 살펴보도록 하겠습니다

from selenium import webdriver
from webdriver_manager.chrome import ChromeDriverManager
from selenium.webdriver.chrome.options import Options
from selenium.webdriver.common.by import By
from selenium.webdriver.common.keys import Keys
import pandas as pd
import time
import pyperclip
from selenium.webdriver.chrome.options import Options

driver = webdriver.Chrome('chromedriver.exe')
driver.get('https://nid.naver.com/nidlogin.login?mode=form&url=https%3A%2F%2Fwww.naver.com')

while(True):

    try: 
        driver.find_element(By.CSS_SELECTOR,'#id') #예외처리에 필요 이 구문이 없으면 아이디가 클립보드에 계속 복사됨
        time.sleep(3)  
        nid='아이디'           #아이디 입력부분
        pyperclip.copy(nid)
        driver.find_element(By.CSS_SELECTOR,'#id').send_keys(Keys.CONTROL+'v')
        time.sleep(1)
        npw='비밀번호'         #비밀번호 입력부분
        pyperclip.copy(npw)
        secure='blank'
        driver.find_element(By.CSS_SELECTOR,'#pw').send_keys(Keys.CONTROL + 'v')
        pyperclip.copy(secure)  #비밀번호 보안을위해 클립보드에 blank저장
        driver.find_element(By.XPATH,'//*[@id="log.login"]').click()
        driver.get('http://cafe.naver.com')   #네이버 카페로 이동
    
    except: 
        print("no such element")          #예외처리

 

코드 안의 '아이디' '비밀번호'란은 여러분들의 네이버 아이디와 비밀번호를 넣으시면 되고요

바로 실행해 보시면 네이버 로그인 후 

네이버 카페로 이동하시는 걸 확인하실 수 있을 겁니다.

그런데 한 가지

기존 3.x버전에서는 브라우저가 자동으로 종료되는 현상이 없었으나

4.x버전에서는 브라우저가 자동 종료되는 현상이 발생이 되었습니다

이를 해결하기 위해 구글링을 통해 chrome driver의 option 속성도 조정해 봤지만

그래도 닫히더군요

 

결론적으로

while(True): 로 반복문을 돌게 만들었고

except로 예외처리를 하였습니다

 

그랬더니 브라우저가 종료되는 현상이 없어졌습니다.

다른 해결 방안이 있으시면 댓글 부탁드리겠습니다

 

pyinstaller를 이용해 exe실행파일로 만들기

누군가 소스코드를 메모장이나 편집프로그램으로 열게 되면

여러분들의 아이디와 비밀번호는 탈탈 털려버릴 것입니다

그리고 파이썬이 깔려있는 컴퓨터에서만 동작할 겁니다

그렇기 때문에 실행파일로 만드는 방법을 알려드리겠습니다

 

pyinstaller를 설치를 해야 합니다 

다음과 같이 입력

pip install pyinstaller

 

콘솔창에 pyinstaller를 입력해서 정상 작동하는지 확인합니다

이렇게 출력이 된다면 정상적으로 설치가 완료된 것입니다

 

pyinstaller의 옵션은 여러 가지가 있겠지만

본 글에서는 3가지 옵션을 사용하도록 하겠습니다.

  • --onefile : 파일을 단 하나의 exe 실행 파일로 만들어줍니다
  • --noconsole : 콘솔창을 출력하지 않습니다
  • --icon : 실행파일의 아이콘을 설정합니다.

입력형식은 위의 세 가지 옵션을 한 번에 입력해 줍니다

콘솔창에 다음과 같이 입력합니다

pyinstaller --onefile --noconsole --icon=naver.ico study.py

네이버 로그인이기 때문에 네이버의 아이콘을 사용했습니다

같은 경로에 있다면 저렇게 입력하시면 됩니다

필요하시분께서는 다운로드하시기 바랍니다

naver.ico
0.02MB

 

입력 후 실행이 모두 완료되면

build와 dist라는 폴더가 만들어지게 됩니다

 

 

 

그중에서 dist라는 폴더에 들어가 보면

이렇게 하나의 실행파일이 만들어진 것을 보실 수 있습니다

 

실행해 보면 자동으로 로그인 후에 

네이버 카페로 이동하는 걸 확인하실 수 있습니다

 

반응형
반응형

셀리니움을 활용하면 크롬 브라우저를 제어해서 여러 가지를 행할 수 있게 됩니다
그중에서 구글 사이트에서 
이미지를 검색하고
이미지를 원하는 개수만큼 
다운로드할 수 있는 코드를 작성해보도록 하겠습니다.
 

셀레니움 설치 그리고 3.x버전과 4.x 버전의 문법 차이점

pip install selenium

처음 사용하시는 분들은 pip를 이용해 셀레니움을 설치해 줍니다
 
이미 설치되어 있는 분들도 계실 텐데요
3.x버전에서 4.x버전으로 넘어오면서
문법도 조금 변화가 생겼습니다.
그래서 오류가 발생할 수 도 있죠!
기존에 3.x사용하시던 분들께서는
업그레이드를 해주도록 합니다

pip install selenium --upgrade

 
그리고 바뀐 문법에 대해 알아보도록 하겠습니다.
 

  • 3.x 버전 문법
driver.find_element_by_class_name('className')
driver.find_element_by_css_selector('.className')
driver.find_element_by_id('elementId')
driver.find_element_by_link_text('linkText')
driver.find_element_by_name('elementName')
driver.find_element_by_partial_link_text('partialText')
driver.find_element_by_tag_name('elementTagName')
driver.find_element_by_xpath('xPath')

 

  • 4.x 버전 문법
driver.find_element(By.CLASS_NAME, 'className')
driver.find_element(By.CSS_SELECTOR, '.className')
driver.find_element(By.ID, 'elementId')
driver.find_element(By.LINK_TEXT, 'linkText')
driver.find_element(By.NAME, 'elementName')
driver.find_element(By.PARTIAL_LINK_TEXT, 'partialText')
driver.find_element(By.TAG_NAME, 'elementTagName')
driver.find_element(By.XPATH, 'xPath')

 
기존에 3.x 버전을 사용하시던 분들께서
셀레니움 4.x 버전 문법코드를 실행하면
실행 시 아마 이런 오류가 발생이 될 겁니다
AttributeError: 'WebDriver' object has no attribute 'find_element_by_name' 
이건 4.x버전 문법에 맞게 수정을 해주시면 해결되는 문제입니다
 
문법에 맞게 다 바꿨는데도 오류가 발생한다면

from selenium.webdriver.common.by import By

By를 임포트 해주면 해결이 됩니다
 
 

크롬 드라이버 자동인스톨 기능 추가 (4.x 버전)

우선 본격적인 소스코드를 분석하기에 앞서서
크롬 드라이버에 대해서 말씀드려 보겠습니다.
셀레니움을 이용하셨던 분들은 아시겠지만
chromedriver.exe를 현재 크롬 버전에 맞는 버전으로 
매번 다운로드하셔야 했었죠
근데 4.x로 넘어오면서
크롬 드라이버를 다운로드할 필요도 없고
자동으로 열릴 수 있게 되는 기능이 생겼습니다
 
그 기능도 아래 코드로 설치를 해야 되겠죠?

pip install chromedriver_autoinstaller

 
설치 후에 임포트 해야 하는 것은 아래와 같으며

from selenium import webdriver
from webdriver_manager.chrome import ChromeDriverManager

 
사용하는 방법이 기존에는 크롬 드라이버를 다운로드하고 같은 경로에 있다면
driver = webdriver.Chrome('chromedriver.exe')
뭐 이런 식으로 사용을 하셨을 겁니다
 
변경된 방법은 아래와 같이 쓰시면 됩니다

driver = webdriver.Chrome(ChromeDriverManager().install())

 
 

구글에서 원하는 이미지 검색해서 자동으로 다운로드하는 방법

전체 소스 코드입니다

import requests
from selenium import webdriver
from webdriver_manager.chrome import ChromeDriverManager
from selenium.webdriver.chrome.options import Options
from selenium.webdriver.common.by import By
from selenium.webdriver.common.keys import Keys
import time
from bs4 import BeautifulSoup
import re
import urllib.request
import pandas as pd
import time
import os
import sys

## 검색 및 저장 정보 설정
url = 'https://www.google.co.kr/imghp'
keyword = input('검색어>  ')
crolcnt = int(input('다운받을 이미지 갯수 입력>  '))
print('%s 로 검색\n'%keyword)
time.sleep(1)

img_folder = 'c:/img' #미리 만들어 놓은 경로를 설정합니다

if os.path.isdir(img_folder)==True:
    print('지정한 경로에 폴더가 존재합니다. : %s'%img_folder)
    if input("지정한 경로로 다운로드가 실행됩니다. \n동의하면 [y]입력 : ") == 'y':
        pass 
    else:
        sys.exit("크롤링 종료")
else:
    print('지정한 폴더가 존재하지 않습니다. 확인 후 실행')
    sys.exit("크롤링 종료")


driver = webdriver.Chrome(ChromeDriverManager().install()) #크롬드라이버 자동인스톨
driver.get(url)
time.sleep(3)

xpath_button = '/html/body/div[1]/div[3]/form/div[1]/div[1]/div[1]/div/div[2]/textarea'   

driver.find_element(By.XPATH,xpath_button).send_keys(keyword,Keys.ENTER)

## 페이지 스크롤
last_height = driver.execute_script("return document.body.scrollHeight") 

while True:  
    # 최하단으로 스크롤 내리기
    driver.execute_script("window.scrollTo(0, document.body.scrollHeight);") 
    time.sleep(2) # 페이지 로딩 대기 (2초 미만 로딩 에러)
    new_height = driver.execute_script("return document.body.scrollHeight") 
    # 더이상 스크롤 되지 않을 2가지 경우 확인
    if new_height == last_height: 
        try: 
            driver.find_element(By.XPATH,'//*[@id="islmp"]/div/div/div/div/div[1]/div[2]/div[2]/input').send_keys(Keys.ENTER)
        except: 
            break 
    last_height = new_height 

## 찾은 이미지 src 저장
src_lst = []
images = driver.find_elements(By.CSS_SELECTOR, "img.rg_i.Q4LuWd")
for image in images:
    if image.get_attribute('src')!=None: # 다운받을 수 있는 src가 있으면 append
        src_lst.append(image.get_attribute('src'))

time.sleep(2)
print('다운로드 가능한 이미지 갯수 : ',len(src_lst))

## 다운로드 경로 자동 지정
print('다운로드를 위해 파이썬 경로를 지정한 경로로 변경합니다. \n경로 : %s'%img_folder)
os.chdir(img_folder) # 지정된 경로로 다운로드 경로 설정

## 이미지 저장
print('이미지 다운로드 시작\n')
for k,i in enumerate(src_lst[:crolcnt]):
    url = i
    start = time.time()
    urllib.request.urlretrieve(url, "./"+str(k)+".jpg") # src / 저장할 파일명 지정
    print(str(k+1)+'/'+str(len(src_lst[:crolcnt]))+' 다운로드 중....... Download time : '+str(time.time() - start)[:5]+' 초')
print('\n---다운로드 완료---')

driver.close()

 
주석문으로 어느 정도 설명을 했습니다.
실행하면 터미널 창에서 
검색어와 다운로드할 개수를 입력받습니다

그리고 자동으로 크롬이 실행되면서
"Chrome이 자동화된 테스트 소프트웨어에 의해 제어되고 있습니다."
라는 문구와 함께 이미지를 맨 아래 페이지까지 자동으로 스크롤합니다
이때 브라우저를 백그라운드로 보내거나 하면
작업이 안될것 같지만
알아서 작업을 진행한다는것이 특이점입니다
(작업중에 키보드 마우스 사용가능함)

 
이후에 더 이상 검색결과가 없으면
다운로드를 시작합니다

 
소스코드에 지정한 폴더(c:\img)에 저장된 결과물입니다.
(아이돌을 좋아할 나이는 아닌데 말입니다. 허허)

 
 
셀레니움을 활용하면
마우스제어, 키보드입력 등 브라우저에서 행해지는 모든 것을 자동화할 수 있습니다.
 
이것을 활용하면 여러분들이 뉴스에서 접했던
캠핑장 자동예약이라던지, 티켓 자동 예매라던지
그런 것도 다 가능하게 되는 것입니다.
 
이렇게 해서 이미지 자동 다운로드 하는 방법에 대한 포스팅을 마치겠습니다

반응형

+ Recent posts