물론 앞으로 내 길이기도 하지만
일단은 자바 스프링을 까먹기 전에 최대한 flask와 비교하는 것을 작성해보려 함..
시간 나는 대로 튜토리얼을 따라하며 spring과 비교 후 기존에 내 서비스를 flask로 리팩토링 하는게 목표.
기간은 무한대...
'파이썬 > flask' 카테고리의 다른 글
sqlalchemy 간략 정리 (0) | 2018.09.02 |
---|
물론 앞으로 내 길이기도 하지만
일단은 자바 스프링을 까먹기 전에 최대한 flask와 비교하는 것을 작성해보려 함..
시간 나는 대로 튜토리얼을 따라하며 spring과 비교 후 기존에 내 서비스를 flask로 리팩토링 하는게 목표.
기간은 무한대...
sqlalchemy 간략 정리 (0) | 2018.09.02 |
---|
1. ls -al과 ls -l의 차이점 : 숨겨진 파일을 보여주는가 아닌가
2. cp와 mv의 차이점: cp는 파일을 복사해가고 mv는 잘라넣기 한다(mv는 dos상에서 move)
3. apt-get update는 기존의 apt 목록을 최신화 하는 것이고 upgrade는 말 그대로 업그레이드 하는 것
htop를 찾아서 실행하고 업그레이드 하고 삭제하는 사진..
4. wget -o 파일명 src
특정 파일명으로 다운 받고 있음.
5. git clone 명령으로 react 전부를 react_src 폴더에..
6. >, < 방향을 통해서 output을 조절할 수 있다.
linux.txt > one.txt를 통해서 결과물을 txt로 바꾸는 모습.(기존에는 화면에 출력함)
7. >>. <<를 통해서 추가한 모습
ls -al >> result.txt를 통해서 기존에 result.txt에 내용을 추가하였다(원래는 덮어쓰기)
리눅스, 생활코딩, 10, 11회차 (0) | 2018.08.15 |
---|
1. 책 두권 읽고 정리
2. 스터디 : 리눅스, 생활코딩
3. 파이썬 플라스크
2일차 용어정리 (0) | 2018.08.08 |
---|---|
1일차 용어 정리 (0) | 2018.08.06 |
오픈소스에 대한 고찰 (0) | 2018.06.05 |
DB 서버가 날라갔다(도망갔다...) (0) | 2018.05.25 |
Java로 바애눈 자료구조, 연결리스트 개념과 기본연산(마지막) (0) | 2018.04.20 |
1장
메뉴 클릭에 따른 행동이 있을 때 이를 if / else 로 처리하게 되면 요구사항이 추가될 때마다 코드가 늘어남.
1.2 수정하기 좋은 코드
비슷한 동작을 찾자.
클릭, 보여주기
1.3 소프트웨어란...
여러 요구사항이 계속 추가됨.
2장 객체지향
1.2 객체지향
객체 단위로 묶는다.
객체만 변화가 발생
21 객체의 핵심은 기능을 제공
소리 증가, 감소, 음소거 등의 기능
22 인터페이스와 클래스
즉 객체는 operation 으로 정의
2.3 메시지
. 기능을 할당하는 게 가장 어려움. 다만 책임의 크기는 작을수록 좋다.
의존
. A ← B ← c
(가 B에, B가 A에 의존하고 있다. A가 변경된다면 B, c 모두 영향
. 내가 변경되면 나에게 의존하고 있는 코드에 영향을 준다.
. 내부의 기능이 어떻게 구현하는지 감추는 것.
. 데이터를 중심으로 작성
5.2 캡슐화코드
예) 회원가입 만료를 계산할때 절차: 여성, vip 등 데이터에 집중
캡슐: member 클래스에 is Expired 메서드 기능 수정.
5.4 캡슐화 2개 규칙
member.get Some ().get Some x
3장 다형성과 추상타입.
. Turbo Plane extends Plane implements Turbo
= Plane 도 되고 Turbo 도 된다.
의미가 비슷한 개념이나 표현으로 정의.
. FTP에서 파일 다운로드,소켓에서 데이터 읽기,
DB 테이블에서 데이터를 조회
3.2 추상 E1 입자 교체의 유연함
. 콘크리트 직접 사용?
책임을 분리시킨다.
3.4 인터페이스에 대고 프로그래밍
3.5 인터페이스는 인터페이스 사용자 입장에서 만들기
사용자: Flow Con 이므로 Bk Source 가 좋음.
(안 그러면 모든 소스가 file로 부터 오는줄 암)
3.6 인터페이스와 테스트
test 할때도 완성까지 기다려야 함.
4장 재사용: 상속보단 조립.
1.1 상위클래스 변경 어려움
1.2 클래스 불필요 증가
갖는다 = 다른 객체 사용
2.1 위임
. 내가 할 일을 다른 객체에게 넘김
5장 설계원칙, DI
1.1 SRP 위반시 문제
1.2 책임이란 변화에 대한 것
메서드 사용시 그 메서드는 각각 다른 책임 속할 가능성이 높다.
최범균, 객체지향과 디자인 패턴(3회) (0) | 2018.08.12 |
---|---|
최범균, 객체지향과 디자인 패턴 (0) | 2018.07.28 |
위에 내용을 적용한 코드는 아래와 같다.
def solution(n, works): tot_left_time = sum(works) -n; # 총 일해야하는 시간 - 남은 시간을 뺀것, [4,3,3], 4 이면 6이 나옴 avg_part_time = round(tot_left_time / len(works)) # 야근해야하는 시간을 종류의 갯수로 남아서 반올림함, 6 / 3 이므로 2 # 평균값에 근접하도록 각 종류를 바꾸는게 포인트 ans = 0; if tot_left_time < n: # 야근할 필요가 없으니 0 return 0; elif avg_part_time == 1: # [2,1,2], 1 의 경우 1이 평균값이므로 1,1,2 이렇게 구성이 되어야함. ans = (len(works) - 1) + (tot_left_time- ((len(works)-1)))**2 return ans elif (tot_left_time) % avg_part_time == 0: # 야근해야하는 총시간이 6시간이고 temp가 2시간이면 return avg_part_time**2 * len(works) else: # 7시간 야근해야하고 종류가 4개인 경우, 2,2,2,1 이렇게 해야함 ans = (tot_left_time - avg_part_time * (len(works)-1))**2 + avg_part_time**2 * (len(works)-1) return ans
위에 처럼 해서 끝이나면 정말 아름다웠을 것이다..
하지만 이러한 풀이 방법 역시 제대로 적용되지 않는다..
왜냐하면 최초의 야근 양이 평균값보다 작을경우 오히려 일을 늘리는 경우가 발생하기 때문..
(4,2,1이 주어지고 평균이 2가 나왔다고 가정하면 1이 오히려 2가 되는 기이한 상황이 발생)
그렇기에 이를 해결하기 위해선 처음부터 다시 생각해봐야한다...
2017 팁스타운, 예상대진표 (0) | 2018.08.15 |
---|---|
레벨2, N개의 최소 공배수 (0) | 2018.08.12 |
프로그래머스, 레벨3, 가장 긴 펠린드롬 (0) | 2018.07.31 |
프로그래머스, 레벨2) 행렬의 곱셈 (0) | 2018.07.26 |
프로그래머스, 레벨3, 2*n 타일링 (0) | 2018.07.26 |
def solution(str): lst = [] for i in range(len(str)): for j in range(i+1, len(str)+1): ans = str[i:j]; print(ans) if ans == ans[::-1]: lst.append(len(ans)) return max(lst)
def solution(s): return max([len(s[i:j+1]) for i in range(len(s)) for j in range(i, len(s)) if s[i:j+1]==s[i:j+1][::-1]])
위 코드와 아래코는 똑같은 내용인데 축약형에 대해 정리하려고 두개 다 넣었다.
위 코드 기준 A-B-C 순의 코드를 축약할 경우 C-B-A로 쓸줄 알았는데 동일하게 A-B-C로 사용한다.
물론 제일 아래 마지막부분은 제일 앞에 나와있다.
레벨2, N개의 최소 공배수 (0) | 2018.08.12 |
---|---|
프로그래머스, 레벨3, 야근지수(못품) (0) | 2018.08.02 |
프로그래머스, 레벨2) 행렬의 곱셈 (0) | 2018.07.26 |
프로그래머스, 레벨3, 2*n 타일링 (0) | 2018.07.26 |
프로그래머스, 레벨3) 줄세우기 (0) | 2018.07.23 |
구입목적 : 내가 작성한 내용을 텍스트로 바꾸기 위함.
가격: 약 7천원
사용기간: 약 일주일
사용평: 필기감은 굿노트와 비슷하거나 살짝 안좋다. 잘 안써지는것 같기도 함.
다만 텍스트 인식률은 상당히 높다. 흘려쓰거나 뭉쳐쓰지만 않으면 거의 대부분 다 인식함.
물론 인식을 안하고 그냥 일반 노트 앱처럼 사용할 수도 있지만 이 앱의 목적 자체가 텍스트 전환이니까..
제일 신기한 점은 HTML로도 내보낼수가 있다는점.
그렇기에 앞으로 책의 내용을 정리할때 사용하려고 함.
텍스트로 정리해야할 내용등이 있다면 네보 어플을 사용하는것이 좋아보임.
(손으로 쓰고 나중에 키보드로 옮기는 중복작업을 피하고 싶다면...)
추천여부 : 무언가 정리할때 손으로 쓰는 것을 선호 하면서 동시에 텍스트로도 남기고 싶으신 분들
분노의 리뷰 : LG HBS-S80 (0) | 2018.06.18 |
---|---|
분노의 리뷰 : 카미노 (0) | 2018.06.09 |
1장
메뉴 클릭에 따른 행동이 있을 때 이를 if / else 로 처리하게 되면 요구사항이 추가될 때마다 코드가 늘어남.
1.2 수정하기 좋은 코드
비슷한 동작을 찾자.
클릭, 보여주기
1.3 소프트웨어란...
여러 요구사항이 계속 추가됨.
2장 객체지향
1.2 객체지향
객체 단위로 묶는다.
객체만 변화가 발생
21 객체의 핵심은 기능을 제공
소리 증가, 감소, 음소거 등의 기능
2.2 인터페이스와 클래스
즉 객체는 operation 으로 정의
2.3 메시지
기능을 할당하는 게 가장 어려움. 다만 책임의 크기는 작을수록 좋다.
. A ← B ← c
(가 B에, B가 A에 의존하고 있다. A가 변경된다면 B, c 모두 영향
. 내가 변경되면 나에게 의존하고 있는 코드에 영향을 준다.
. 내부의 기능이 어떻게 구현하는지 감추는 것.
. 데이터를 중심으로 작성
5.2 캡슐화코드
예) 회원가입 만료를 계산할때 절차: 여성, vip 등 데이터에 집중
캡슐: member 클래스에 is Expired 메서드 기능 수정.
5.4 캡슐화 2개 규칙
member.get Some ().get Some x
최범균, 객체지향과 디자인 패턴(3회) (0) | 2018.08.12 |
---|---|
최범균, 객체지향과 디자인 패턴(2회) (0) | 2018.08.02 |
이번에 수정한 부분은 위와 같다.
chart 클래스가 버튼을 생성하고, 그 버튼의 값을 entry에 보여줘야 하므로
chart클래스가 entry타입을 받게끔 하였다.
그리고 버튼을 클릭하면 값이 보이게 하는 메서드를 밖으로 빼서 만들었다.
문제는 문장을 보여줘야하므로 바뀌는 값이 계속 저장되게끔 해야하는데 이 구성을 어떻게 매끄럽게 할지가 가장 큰 고민이다.
from tkinter import *; from chart import *; from display import *; window = Tk(); window.title("Maplotlib Calc"); window.geometry("500x400"); # 결과들을 보여주는 아웃풋 output = display(window, 0, 0); out_entry = output.make_Entry(0,0,70,"light green") # class를 생성할시엔 무조건 frame row, col을 받게끔 해야함 chart = chart(window,2,0,out_entry); # 버튼을 만들기 위함 chart.make_button(); window.mainloop();
from tkinter import *; class chart: def __init__(self, window, row, column, output_entry): self.window = window; self.pad = Frame(window); self.row = row; self.column = column; self.outentry= output_entry; self.pad.grid(row = self.row, column = self.column,sticky = W); def make_button(self): char_lst = ['LINE', 'SCATTER'] r , c = 0,0 for k, v in enumerate(char_lst): def inner(index = k): self.show(index) Button(self.pad, text = v, width =10, command = inner).grid(row = r, column = c) c +=1; def show(self, index): # 버튼만 보여주는 메서드 button_pad = Frame(self.window) button_pad.grid(row =3, column =0, sticky = N); if index == 0: cr = {'black' : 'k', 'green':'g', 'red':'r'}; ls = {'solid' : '-', 'dashed' : '--', 'dashed dot' : '-.'}; marker = {'point' : '.', 'circle' : 'o', 'triangle_up' : '^'}; category = [cr, ls, marker]; r = 0; c = 0; record_lst = []; for i in range(len(category)): for key,value in category[i].items(): def inner(k = key, v = value, index =i): print(i) del record_lst[i:i+1]; record_lst.insert(i,{k,v}); self.button_action(k,record_lst); Button(button_pad,text = i, width = 10, command = inner).grid(row = r, column=c); c += 1; if c > 2: c = 0; r += 1; def button_action(self,key,lst): #str = "plt.plot([10, 20, 30, 40], [1, 4, 9, 16], c= '%s', ls='%s', marker='%s')" %(lst[0][key],lst[1][key], lst[2][key]); print(lst); self.outentry.delete(0, END); self.outentry.insert(END, "Test");
Matplot calculatior 다시 시작(클래스 분류화) (0) | 2018.07.26 |
---|---|
matplotlib calculator 클래스화 (0) | 2018.07.11 |
matplotlib calculator 2회차 (0) | 2018.07.10 |
matplotlib 계산기) 1차 대략적 구성 (0) | 2018.07.07 |
계산기 모듈화 하기 (0) | 2018.07.04 |
기존에 진행중이던 것들이 어느정도 끝났기에 얼른 이것을 마무리 하려한다.
지난번에는 main 클래스에 모든것을 다 넣고서 돌아가게끔 하는게 목적이었고 이번엔 지난번 것을 바탕으로
나름 클래스화 하여 구성해보려 한다.
메인 화면은 크게
1. 내가 선택한 파라미터 명령어가 나오게 하는 것
2. 차트 종류를 선택하면 그에 해당하는 파라미터가 등장
3. 파라미터 버튼 클릭시 1번 화면 업데이트
4. 생성 버튼 클릭시 matplot 화면을 보여줌
5. 파라미터 클릭시 실시간 변화...
이렇게 5개의 기능이 목표이다.
from tkinter import *; from chart import *; from display import *; window = Tk(); window.title("Maplotlib Calc"); window.geometry("400x300"); # 결과들을 보여주는 아웃풋 output = display(window, 0, 0); output.make_Entry(0,0,70,"light green") # class를 생성할시엔 무조건 frame row, col을 받게끔 해야함 chart = chart(window,2,0); # 버튼을 만들기 위함 chart.make_button(); window.mainloop();
기본적으로 tkinter를 이용해 gui를 구성, 현재 위 메인단에서 클래스는 하나는 버튼용, 하나는 out풋 용으로 만들었다
from tkinter import *; class display(): def __init__(self, window, row,col): self.window = window; self.row = row; self.col = col; self.tpfr = Frame(window); self.tpfr.grid(row = self.row, column = self.col, sticky = N); def make_Entry(self, row, col, width, color): display = Entry(self.tpfr, width = width, bg=color) display.grid(row = row, column = col);
단순히 엔트리(녹색 입력창?) 을 만들기 위한 클래스, 모든 클래스는 frame 생성을 위해 row, col을 받게끔 설정
from tkinter import *; class chart: def __init__(self, window, row, column): self.window = window; self.pad = Frame(window); self.row = row; self.column = column; self.pad.grid(row = self.row, column = self.column,sticky = W); def make_button(self): char_lst = ['LINE', 'SCATTER'] r , c = 0,0 for k, v in enumerate(char_lst): def inner(index = k): self.show(index) Button(self.pad, text = v, width =10, command = inner).grid(row = r, column = c) c +=1; def show(self, index): button_pad = Frame(self.window) button_pad.grid(row =3, column =0, sticky = N); print("show show", index) if index == 0: cr = {'black' : 'k', 'green':'g', 'red':'r'}; ls = {'solid' : '-', 'dashed' : '--', 'dashed dot' : '-.'}; marker = {'point' : '.', 'circle' : 'o', 'triangle_up' : '^'}; category = [cr, ls, marker]; r = 0; c = 0; for i in range(len(category)): for key,value in category[i].items(): Button(button_pad,text = key, width = 10).grid(row = r, column=c); c += 1; if c > 2: c = 0; r += 1;
문제의 버튼 클래스, 처음에 차트 종류를 보여주고, 클릭하면 파라미터가 보여질수있게끔 코드를 짜다보디 이런모양이 되었다..
matplotlib, entry에 값 보여주기 중 (0) | 2018.07.27 |
---|---|
matplotlib calculator 클래스화 (0) | 2018.07.11 |
matplotlib calculator 2회차 (0) | 2018.07.10 |
matplotlib 계산기) 1차 대략적 구성 (0) | 2018.07.07 |
계산기 모듈화 하기 (0) | 2018.07.04 |