[파이썬]파이썬으로 주식 등 시세를 가져오기
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