파이썬 반복문에서 리스트 삭제시 유의점

이미지
개요 오늘은 파이썬에서 많이 사용되는 자료형 (Data Type) 인 list 의 삭제 방법 에 대해 깊이 살펴보고자 합니다.   리스트 추가, 삽입, 검색 은 비교적 쉽게 구현 가능하지만, 삭제 는 상황에 따라 생각할 부분이 많습니다. [리스트의 다양한 삭제 경우] 리스트 특정 값 1개 삭제 리스트 인덱스 기반 (몇 번째 요소인지) 삭제 리스트 특정 값 전체 삭제 리스트 복사본을 이용한 삭제  지능형 리스트 (List Comprehension) 를 이용한 삭제

정보올림피아드 (햄버거 문제)

이미지
개요 안녕하세요.  학원생 중 정보올림피아드 대회를 준비하는 심화반 학생이 있어 같이 풀어본 문제입니다. 먼저 문제를 살펴보겠습니다. [출처 : 한국정보올림피아드, 2020년 중등부 2교시 문제]   예를 들어 입력 이 아래와 같다면, 12 1 HPHPHPHHPPHP 출력 은 아래와 같아야 합니다. 5   K가 2 라면 (햄거버를 먹을 수 있는 거리), 12 2 HPHPHPHHPPHP 출력 은 아래와 같아야 합니다. 6 문제풀이 1. 왼쪽부터 HPHPHP... 을 진행하며 P(사람)을 검색. 2. 사람(P)을 찾은 경우, 사람인덱스 기준 -K~+K 까지 햄버거 검색. 3. 햄버거가 있다면 (H를 만나면) 먹고, 햄버거 위치에 먹었다는 표시. (예, 'X') 4. 햄버거를 먹었다는 표시를 하는 이유는, 다음 P(사람)이 이미 먹은 햄버거를 또 먹는 것을 방지.  5. 전체적으로 테이블(HPHPHP...)을 반복하는 루프와 테이블 내 사람(P)를 만났을때 -K~+K를 반복하는 이중 루프로 구현. 6. 단, 테이블의 왼쪽에 사람이 있는 경우 -K가 0보다 작은 경우 , 테이블의 오른쪽 끝에 사람이 있는 경우, +K가 테이블의 길이를 초과 하는 경우를 주의. [햄버거 분배문제 해결 알고리즘]   소스코드 (파이썬) x = input('식탁길이, 선택거리:') y = input('햄버거, 사람 배치(H, P):') xx = x.split(' ') #n:식탁길이, k:거리 n = int(xx[0]) k = int(xx[1]) yy =

파이썬으로 구현한 윈도우 파일탐색기

이미지
개요 이번 시간에는 Python, PyQt5 QTreeWidget 을 이용해 윈도우 탐색기 를 만들어 보겠습니다. Windows API 함수를 이용해 논리 드라이브를 찾고, 찾은 드라이브를 더블 클릭하면 하위 디렉토리, 파일을 검색해 트리 위젯에 추가합니다. 찾은 경로가 디렉토리인 경우에는 하위 디렉토리를 다시 검색 하고, 파일인 경우 기본 연결 프로그램으로 연결 해 파일을 열어서 보여줍니다. [윈도우 탐색기 앱 실행화면] 완성된 앱의 동작은 아래 동영상을 참조 바라며, 기능은 다음과 같습니다. 1. 윈도우 운영제체의 드라이브 찾기 2. 드라이브의 하위 디렉토리 or 파일 탐색 및 구분 (더블 클릭시) 3. 파일의 경우 더블 클릭시 기본 연결프로그램으로 연결 (*.txt는 메모장 등) 개발 환경 Windows 10 Pro 64bit Python 3.8.8 64bit, Pycharm PyQt5 5.15.3 소스코드 main.py 단일 파일로 구성되어 있으며, 소스코드를 먼저 살펴보고 설명을 이어가겠습니다. from PyQt5.QtWidgets import QApplication, QWidget, QLineEdit, QTreeWidget, QTreeWidgetItem,QVBoxLayout from PyQt5.QtCore import Qt from ctypes import windll import sys import socket import string import os QApplication.setAttribute(Qt.AA_EnableHighDpiScaling, True) class Form(QWidget): def __init__(self): super().__init__() self.

Qt Mouse Wheel Event 처리하기

이미지
개요  이번 시간에는 다양한 곳에서 사용되는 마우스 휠 이벤트 (Wheel Event) 를 Python +PyQt5 에서 어떻게 감지하고 활용하는지 살펴보겠습니다.   마우스 휠 이벤트가 필요한 대표적인 경우는 다음과 같습니다. 화면 이동, 웹페이지 업, 다운 처리 이미지 줌인, 줌 아웃    먼저 완성된 결과물을 먼저 살펴보면 아래와 같습니다. [마우스 휠 이벤트 처리]   아래와 같은 순서로 진행됩니다. 1. 빈 위젯을 하나 생성 2. Ctrl 키 눌러진 상태에서 휠 이벤트가 발생 (줌인, 아웃으로 처리) 3. Ctrl 키 떨어진 상태에서 휠 이벤트가 발생 (일반적인 스크롤로 처리) 4. 휠 이벤트 발생시 Ctrl 키 여부를 감지, 각 변수에 저장 후 출력 사실 줌 이나 일반스크롤 로 처리하나 둘 다 개념은 같지만 줌의 경우는 휠 이벤트시(Ctrl O) 1씩 변화량을 가져가고 스크롤(Ctrl X) 은 좀 더 변화량이 크게 적용해 보았습니다. 개발 환경  Windows 10 Pro 64bit Python 3.8.8 64bit, Pycharm 2021.1 PyQt 5.15.3 소스코드 from PyQt5.QtWidgets import QApplication, QWidget from PyQt5.QtGui import QPainter, QFont from PyQt5.QtCore import Qt, QPointF import sys QApplication.setAttribute(Qt.AA_EnableHighDpiScaling, True) class Form(QWidget): def __init__(self): super().__init__() self.setW

파이썬의 오류처리 방식

이미지
 오늘은 파이썬의 오류처리구문 (Try...) 에 대해 살펴보고자 합니다.  프로그래밍을 하다보면 다양한 오류들을 만나게되는데, 이때 적절한 오류처리구문이 없다면 런타임 (실행시간) 오류 로 이어지게 되고 이는 소프트웨어의 결함 이라 볼 수 있습니다. 특히 상업적인 목적의 코드라면 절대 런타임 오류는 피해야 하겠죠. [이미지 출처 : Pixabay, mohamed hassan ] 정상적인 형변환의 경우 예를 들면 두 수를 입력받아 사칙연산을 수행하는 코드를 아래와 같이 작성하고, x = int( input('Input number:') ) y = int( input('Input number:') ) print(x, '+', y, '=', x + y) print(x, '-', y, '=', x - y) print(x, '*', y, '=', x * y) print(x, '/', y, '=', x / y) 아래와 같이 숫자 를 정상적으로 입력하면 결과는 다음과 같습니다. Input number:5 Input number:2 5 + 2 = 7 5 - 2 = 3 5 * 2 = 10 5 / 2 = 2.5

2D 게임의 기본 벡터 이동, 회전 변환 행렬이해하기

이미지
개요 이번에는 Python + PyQt5를 이용해 마우스를 따라 다니며 회전 하는 물체 를 구현해 보았습니다. 벡터, 회전행렬 연산 을 이용해 구현되어 있으며, 자세한 수식유도과정은 소스코드 설명부에서 진행하고 결과만 먼저 살펴보겠습니다. 전반적인 동작방식은 아래와 같습니다. 1. 마우스 포인터 위치와 사각형의 위치 비교 후 (벡터 차연산) 가속도벡터 를 만들고 이를 속도벡터 에 더해 속도 구하기. (가속도는 속도에 영향) 2. 속도는 사각형의 위치에 영향을 미치므로 속도벡터와 사각형위치벡터를 합연산 . 3. 사각형은 가속하며 마우스위치로 이동. 4. 사각형 이동시 속도 벡터의 각도 를 구해 사각형 4개 꼭지점을 원점을 중심으로 회전. (회전변환 행렬) 5. 회전된 사각형의 4개 꼭지점을 이어서 선을 그리면 사각형 이동시 방향이 전환됨.

처음 시작하는 딥러닝, Keras 활용

이미지
들어가며 이 글이 처음 딥러닝(Deep Learning) 을 공부하는 분들에게 도움이 되었으면 합니다. 저도 딥러닝을 공부하며 자주 찾는 아래 사이트의 게시물을 사견 + 번역해 옮긴 내용입니다. 딥러닝을 처음 공부하면, 대부분 TensorFlow 를 찾아 자료를 검색하고 공부해 가는데, 경험상 처음은 Keras 를 이용해 간단한 예제부터 시작해 개념을 파악한 후 깊게 진행하는 방식이 저는 쉬웠습니다. [자료 출처] Your First Deep Learning Project in Python with Keras (링크) , Jason Brownlee, PhD 

파이썬을 활용한 PID 제어기 GUI 구현

이미지
들어가며 이번 시간에는 PID 제어기를 Python, PyQt5, Matplotlib 를 이용해 만들어 보았습니다. 결과물을 먼저 살펴보면 아래와 같습니다. [완성 결과물]

C++에서 여러값을 리턴해야 하는 경우

이미지
들어가며 코드를 작성하다 보면 함수에서 여러 값을 리턴해야 하는 경우 를 종종 만나게 됩니다. 예를 들면 두수를 전달받아 덧셈, 뺄셈, 곱셈, 나숫셈을 리턴 (4가지 값) 해주고 싶은 경우도 해당되겠지요. C++ 11이 등장하기 전 여러 값을 함수에서 리턴하는 경우, 구조체 or 클래스 선언하고 값을 리턴 해야 했습니다. 물론 동일한 타입의 여러값들을 리턴한다면 std::vector로 가능하지만 늘 타입들이 같은건 아닙니다.

Qt WebEngine을 활용한 웹페이지 PDF 변환

이미지
들어가며 바로 이전 게시물의 주제가 파이썬을 이용해 " 웹페이지 PDF변환, 인쇄 " 예제 입니다. 이번 예제는 같은 주제를 C++ 로 구현해 보았습니다. 실행시 웹브라우저(X)가 아니라 만든 앱을 이용해 아래와 같이 웹페이지를 표시하고, 이를 PDF 저장 or 인쇄 가 가능합니다. [네이버 페이지 표시] [PDF로 저장된 모습] [웹페이지 인쇄 화면]

이 블로그의 인기 게시물

Qt Designer 설치하기

PyQt5 기반 동영상 플레이어앱 만들기