[Python] APScheduler가 좋은점
in Development on Python
APScheduler가 좋은점 소비하기 정리
in Development on Python
APScheduler가 좋은점 소비하기 정리
in Development on Python
Docker+RabbitMQ 하고 Python으로 메시지 생성하고 소비하기 정리
in Development on Python
VSCODE에서 디버깅 기능을 내식대로 쓰다가 유튜브에 정리하신분이 있어서 간단히 정리한다.
in Development on Python
데이터프레임에서 메모리 사용을 최저고하 하는 방법 정리
in Development on Python
Docker+MySQL후, 파이썬으로 데이터 DB에 적재해보자. 나중에 써먹을거같다.
in Development on Python
MLflow Example을 한번 해보자. 모델서빙 기능은 미친게 확실하다.
in Development on Python
당장 장고 프로젝트 할건 아닌데, 주말에 시간도 남고 해서 그냥 이런게 있었구나 기억용으로 써놓는다.(그래서 정확하게 안썼다.)
in Development on Python
나는 백엔드가 아니여서 그런가 너무 용어들이 헷갈린다. 친한동생이 잘 설명해줘 서 까먹기전에 정리하자.
in Development on Python
코드 테스트를 하기위해 Pytest에 관해 간단하게 쓰려고한다. 좋은 블로그가 있어서 간단하게만 정리하자.
in Development on Python
세상엔 모르는거 투성이다. 모르고 넘어가면 후회할거 같아서 남겨본다. 이번 주제는 set, get 그리고 프로퍼티다.
in Development on Python
내 사수가 떠난다. 슬프다. 이젠 스스로 학습 놀이를 시작해야한다. 나에게 집중력따윈 없으므로 쓰면서 공부한다.
in Development on Python
모듈과 패키지 만드는것이 매일 헷갈려서 내 방식대로 정리해 두려고 한다.
이번 요약은 패키지에 대해서 해본다.
in Development on Python
모듈과 패키지 만드는것이 매일 헷갈려서 내 방식대로 정리해 두려고 한다.
이번 요약은 모듈만 하려고 한다.
in Development on Python
nonlocal
이라는 생소한 것이 나와서, 코딩도장 강의를 보고 파이썬의 함수 안에서 함수 만들기 요약하려 한다.
in Development on Python
코딩도장 강의를 보고 파이썬의 데코레이터 요약하려 한다.
in Development on Python
생활코딩 강의를 보고 파이썬의 다중 상속 요약하려 한다.
in Development on Python
생활코딩 강의를 보고 파이썬의 오버라이드, 모듈 import 요약하려 한다.
in Development on Python
생활코딩 강의를 보고 파이썬의 객체와 변수, 상속, 클래스 멤버 요약하려 한다.
in Development on Python
생활코딩 강의를 보고 파이썬의 객체 지향 프로그래밍 요약하려 한다.
in Development on Python
copy 모듈에 대한 글을 남긴다.
in Development on Python
평소에 클래스에 대해 재정리를 하고 싶은 생각이 들어서 글을 씀.
내 정리
in Development on Python
파이썬에서 함수가 무엇인지에 대한 정의를 내리고 싶어서 자기전에 쭉 적어본다.
또한 다음 블로그에서는 객체에 대한 심층적인 공부가 필요할 것 같다. 일단은 함수에 대해 궁금한 점이 많아 적어본다.
in Development on Python
파이참을 써야되는 이유와 단축키를 정리
in Development on Python
Cosine Similarity for matrix with NANs using Python
in Development on Python
in Development on Python
파이썬 팀랩 강좌에서 배운것을 토대로 코딩을 짜보려고 한다.
in Development on Python
파이썬 강좌_CS50_K-MOOC(가천대)유튜브 의 과제 중 노트와 노트북을 만들어 보겠습니다.
class라는 것을 처음 배워서 약간 어렵긴했지만 강의를 반복해서 듣고 나서 이해를 함. 아래 코드처럼 클래스를 이용해서 def들을 정의 해주면 됨.
class Note(object):
def __init__(self, content=None):
self.content = content
# 컨텐츠의 기본값을 넣어서 굳이 안넣어줘도 되는 편안함이 있다.
def write_content(self, content):
self.content = content
def remove_all(self):
self.content = ""
def __str__(self):
return self.content
#출력
class NoteBook(object):
def __init__(self, title):
self.title = title
self.page_number = 1
self.notes = {}
# 노트라는 오브젝트를 넣어라
def add_note(self, note, page=0):
if self.page_number < 300:
if page == 0:
self.notes[self.page_number] = note
# 딕트 타입이니깐 {1 : a } 이렇게 나온다
self.page_number += 1
else:
self.notes = {page : note}
self.page_number += 1
else:
print("Page가 모두 채워졌습니다.")
def remove_note(self, page_number):
if page_number in self.notes.keys():
# key에 있다면
return self.notes.pop(page_number)
# 찢는다.
else:
print("해당 페이지는 존재하지 않습니다.")
def get_number_of_pages(self):
return len(self.notes.keys())
#전체 페이지의 수
이렇게 클래스를 정해준다음 실제로 돌아가는지 테스트를 해보자.
from note_module import NoteBook
from note_module import Note
quote_book = NoteBook("The Quote Book")
new_note = Note()
new_note.write_content("Don't cry because it's over smile because it happened. -Dr. Seuss")
quote_book.add_note(new_note)
print(quote_book.get_number_of_pages())
quote_book.add_note(Note("Hello, World"))
quote_book.add_note(Note("Hello, World"))
quote_book.add_note(Note("Hello, World"))
quote_book.add_note(Note("Hello, World"))
quote_book.add_note(Note("Hello, World"))
print(quote_book.get_number_of_pages())
my_note = quote_book.remove_note(1)
print(my_note)
print(quote_book.get_number_of_pages())
이렇게 해보면 노트북과 노트를 이용해 추가도 해보고 삭제도 해보고 노트의 갯수도 찍어볼 수 있다.
in Development on Python
파이썬 강좌_CS50_K-MOOC(가천대) 의 과제 중 하나였던 베이스볼 게임을 만들어 보도록 하겠습니다.
랜덤한 3자리 정수를 만든다.
import random
def get_random_number():
# Helper Function - 지우지 말 것
# 100부터 999까지 수를 램덤하게 반환함
return random.randrange(100, 1000)
정수인지를 체킹할때 사용할 함수를 만든다.
def is_digit(user_input_number):
# '''
# Input:
# - user_input_number : 문자열 값
# Output:
# - user_input_number가 정수로 변환 가능할 경우는 True,
# 그렇지 않을 경우는 False
# Examples:
# >>> import baseball_game as bg
# >>> bg.is_digit("551")
# True
# >>> bg.is_digit("103943")
# True
# >>> bg.is_digit("472")
# True
# >>> bg.is_digit("1032.203")
# False
# >>> bg.is_digit("abc")
# False
# '''
# ===Modify codes below=============
# 조건에 따라 변환되어야 할 결과를 result 변수에 할당
result = user_input_number.isdigit()
# ==================================
return result
3자리 숫자이면 True를 출력한다.
def is_between_100_and_999(user_input_number):
# '''
# Input:
# - user_input_number : 문자열 값
# 입력된 값은 숫자형태의 문자열 값임이 보장된다.
# Output:
# - user_input_number가 정수로 변환하여 100이상 1000미만일 경우 True,
# 그렇지 않을 경우는 False
# Examples:
# >>> import baseball_game as bg
# >>> bg.is_between_100_and_999("551")
# True
# >>> bg.is_between_100_and_999("103943")
# False
# >>> bg.is_between_100_and_999("472")
# True
# >>> bg.is_between_100_and_999("0")
# False
# '''
# ===Modify codes below=============
# 조건에 따라 변환되어야 할 결과를 result 변수에 할당
result = False
if len(user_input_number) == 3:
result = True
# ==================================
return result
중복되는 수가 있으면 True를 출력하게 한다.
def is_duplicated_number(three_digit):
# '''
# Input:
# - three_digit : 문자열로 된 세자리 양의 정수 값
# 문자열로 된 세자리 양의 정수값의 입력이 보장된다.
# Output:
# - three_digit 정수로 변환하였을 경우 중복되는 수가 있으면 True,
# 그렇지 않을 경우는 False
# ex) 117 - True, 123 - False, 103 - False, 113 - True
# Examples:
# >>> import baseball_game as bg
# >>> bg.is_duplicated_number("551")
# True
# >>> bg.is_duplicated_number("402")
# False
# >>> bg.is_duplicated_number("472")
# False
# >>> bg.is_duplicated_number("100")
# True
# '''
# ===Modify codes below=============
# 조건에 따라 변환되어야 할 결과를 result 변수에 할당
result = False
if three_digit[0] == three_digit[1] or three_digit[1] == three_digit[2] or three_digit[0] == three_digit[2]:
result = True
# ==================================
return result
지금까지 했던 내용을 조합하여 1) 숫자형 문자열이며, 2) 100이상 1000미만이며, 3) 중복되는 숫자가 없을 경우 True를 출력해준다.
def is_validated_number(user_input_number):
# '''
# Input:
# - user_input_number : 문자열 값
# Output:
# - user_input_number 값이 아래 조건이면 True, 그렇지 않으면 False를 반환
# 1) 숫자형 문자열이며, 2) 100이상 1000미만이며, 3) 중복되는 숫자가 없을 경우
# Examples:
# >>> import baseball_game as bg
# >>> bg.is_validated_number("amvd")
# False
# >>> bg.is_validated_number("402")
# True
# >>> bg.is_validated_number("472")
# True
# >>> bg.is_validated_number("100")
# False
# >>> bg.is_validated_number("1000")
# False
# '''
# ===Modify codes below=============
# 조건에 따라 변환되어야 할 결과를 result 변수에 할당
result = False
if is_digit(user_input_number) is True and is_between_100_and_999(user_input_number) is True and is_duplicated_number(user_input_number) is False:
result = True
# ==================================
return result
중복이 없는 3자리 정수를 랜덤하게 출력한다.
def get_not_duplicated_three_digit_number():
# '''
# Input:
# - None : 입력값이 없음
# Output:
# - 중복되는 숫자가 없는 3자리 정수값을 램덤하게 생성하여 반환함
# 정수값으로 문자열이 아님
# Examples:
# >>> import baseball_game as bg
# >>> bg.get_not_duplicated_three_digit_number()
# 125
# >>> bg.get_not_duplicated_three_digit_number()
# 634
# >>> bg.get_not_duplicated_three_digit_number()
# 583
# >>> bg.get_not_duplicated_three_digit_number()
# 381
# '''
# ===Modify codes below=============
# 조건에 따라 변환되어야 할 결과를 result 변수에 할당
# get_random_number() 함수를 사용하여 random number 생성
result = None
while True:
result = str(get_random_number())
if is_duplicated_number(result) is False:
result
break
# ==================================
result = int(result)
return result
읽어가면서 strike인 경우 하나씩 늘리고 ball인 경우 하나씩 늘린다.
def get_strikes_or_ball(user_input_number, random_number):
# '''
# Input:
# - user_input_number : 문자열값으로 사용자가 입력하는 세자리 정수
# - random_number : 문자열값으로 컴퓨터가 자동으로 생성된 숫자
# Output:
# - [strikes, ball] : 규칙에 따라 정수형 값인 strikes와 ball이 반환됨
# 변환 규칙은 아래와 같음
# - 사용자가 입력한 숫자와 컴퓨터가 생성한 숫자의
# 한 숫자와 자릿수가 모두 일치하면 1 Strike
# - 자릿수는 다르나 입력한 한 숫자가 존재하면 1 Ball
# - 세자리 숫자를 정확히 입력하면 3 Strike
# Examples:
# >>> import baseball_game as bg
# >>> bg.get_strikes_or_ball("123", "472")
# [0, 1]
# >>> bg.get_strikes_or_ball("547", "472")
# [0, 2]
# >>> bg.get_strikes_or_ball("247", "472")
# [0, 3]
# >>> bg.get_strikes_or_ball("742", "472")
# [1, 2]
# >>> bg.get_strikes_or_ball("472", "472")
# [3, 0]
# '''
# ===Modify codes below=============
# 조건에 따라 변환되어야 할 결과를 result 변수에 할당
strike = 0
ball = 0
for i in range(0, len(user_input_number)):
if user_input_number[i] in random_number[i]:
strike += 1
elif user_input_number[i] in random_number:
ball += 1
result = [strike, ball]
# ==================================
return result
Yes의 다른 표현도 포함해준다.
def is_yes(one_more_input):
# '''
# Input:
# - one_more_input : 문자열값으로 사용자가 입력하는 문자
# Output:
# - 입력한 값이 대소문자 구분없이 "Y" 또는 "YES"일 경우 True,
# 그렇지 않을 경우 False를 반환함
# Examples:
# >>> import baseball_game as bg
# >>> bg.is_yes("Y")
# True
# >>> bg.is_yes("y")
# True
# >>> bg.is_yes("Yes")
# True
# >>> bg.is_yes("YES")
# True
# >>> bg.is_yes("abc")
# False
# >>> bg.is_yes("213")
# False
# >>> bg.is_yes("4562")
# False
# '''
# ===Modify codes below=============
# 조건에 따라 변환되어야 할 결과를 result 변수에 할당
result = False
upper_input = one_more_input.upper()
if upper_input == "Y" or upper_input == "YES":
result = True
# ==================================
return result
No의 다른 표현도 포함해준다.
def is_no(one_more_input):
# '''
# Input:
# - one_more_input : 문자열값으로 사용자가 입력하는 문자
# Output:
# - 입력한 값이 대소문자 구분없이 "N" 또는 "NO"일 경우 True,
# 그렇지 않을 경우 False를 반환함
# Examples:
# >>> import baseball_game as bg
# >>> bg.is_no("Y")
# False
# >>> bg.is_no("b")
# False
# >>> bg.is_no("n")
# True
# >>> bg.is_no("NO")
# True
# >>> bg.is_no("nO")
# True
# >>> bg.is_no("1234")
# False
# >>> bg.is_no("yes")
# False
# '''
# ===Modify codes below=============
# 조건에 따라 변환되어야 할 결과를 result 변수에 할당
result = False
one_more_input = one_more_input.upper()
if one_more_input == "NO" or one_more_input == "N":
result = True
# ==================================
return result
스트라이크가 3개 미만일때까지 돌아가는 while문을 짜준다. 그리고 게임이 끝났을때 다시 할지에 대한 반복문을 만들어준다. 여기서 가장 중요한 부분.
def main():
print("Play Baseball")
user_input = 999
EndGame = False
while EndGame is False:
strikeAndBalls = [0, 0]
random_number = str(get_not_duplicated_three_digit_number())
print("Random Number is : ", random_number)
# ===Modify codes below=============
# 위의 코드를 포함하여 자유로운 수정이 가능함
while strikeAndBalls[0] < 3: #스트라이크가 3개 미만일 때에만
user_input = input("Input guess number : ")
if user_input == "0":
EndGame = True
break
elif is_validated_number(user_input):
strikeAndBalls = get_strikes_or_ball(user_input, random_number)
print("Strikes : ", strikeAndBalls[0], " , Balls : ", strikeAndBalls[1])
else:
print("Wrong Input, Input again")
while EndGame is False:
OneMore = input("You win, one more(Y/N) ?")
if is_no(OneMore):
EndGame = True
break
elif is_yes(OneMore):
break
else:
print("Wrong Input, Input again")
# ==================================
print("Thank you for using this program")
print("End of the Game")
if __name__ == "__main__":
main()
in Development on Python
일단 파이썬 강좌_CS50_K-MOOC(가천대) 의 과제 중 하나였던 팩토리얼 계산기를 만들어 보도록 하겠습니다.
모든 내용은 파이썬 강좌_CS50_K-MOOC(가천대) 링크를 모두 읽었다고 가정하고 써내려가보도록 하겠습니다.
아래 코드를 보자.
def is_positive_number(integer_str_value):
try:
integer_str_value = int(integer_str_value) # 먼저 숫자형으로 바꾸고 난 후 처리해야 에러를 막을 수 있음
if int(integer_str_value) == integer_str_value and integer_str_value > 0:
return True
else:
return False
# ==================================
except ValueError:
return False
# x = input("숫자 입력 : ") # 잘돌아가나 체크용
# print(is_positive_number(x))
try, except에 대해서는 몰라도 된다고 하지만 오류 예외 처리 기법으로 알면 될거같다. 더 자세히 알고 싶다면 점프투파이썬을 참조 하도록 하자. 플로우는 int로 변환했을때 그대로 숫자형이 나오고 0보다 크다면 True를, 나머지는 다 Fasle로 하라는 것이다.
아래 코딩을 보도록 하자.
def get_factorial_value(integer_value):
factorial = 1
for i in range(1, integer_value+1):
factorial = factorial * i
return factorial
# x = int(input("숫자 입력 : "))
# print(get_factorial_value(x))
팩토리얼을 어떻게 구현할까 고민했다. 결국 factorial 변수를 하나 설정해서 for문으로 1부터 내가 정해준 숫자까지 곱해주는 것을 선택했다.
이제 마지막인 메인 함수를 작성해보도록 하자.
def main():
user_input=999
while(user_input is not 0):
user_input = input("Input a positive number : ")
if is_positive_number(user_input) is True:
user_input = int(user_input)
real = get_factorial_value(user_input)
print(real)
elif is_positive_number(user_input) is False and user_input is '0':
print("Thank you for using this program")
else:
print("Input again, Please")
if __name__ == "__main__":
main()
딱히 어려운 것은 없었던 것 같다. 중요한 점은 이전에 만든 함수들을 main 함수에 넣어서 작성했다. is_positive_number가 True이면 factorial 값을 나오게 하고 그게 아니라면 끝이나던지 다시한번더 기회를 주는 식으로 만들었다.
다음 시간에는 베이스볼 게임을 만들어 보려 한다. 잘 될진 모르겠지만 화이팅 하자. 아자
in Development on Python