steam 15

[TIL] 동전 앞면/뒷면 맞추기 게임

※ 두 동전의 앞면/뒷면 맞추기 게임하기 - 첫 동전에서 앞면이 나올 확률 P(A)는 1/2고, 두 번째 동전에서 앞면이 나올 확률 P(B)는 1/2일 때, 두 개의 동전을 동시에 던졌을 때 모두 앞면이 나올 확률은 1/4 이다. 이를 터틀 스크린을 이용한 게임을 프로그램으로 코딩하면 다음과 같다. import turtle as t import random import time coin_face = [ "coin-100-f.gif", "coin-100-b.gif"]# 실행하는 파일 경로에 해당하는 파일이 위치해야 작동 def coin_game(): global c_cnt t.clear() coin1 = random.randint(0, 1) coin2 = random.randint(0, 1) cq1 = i..

[TIL] 피보나치 트리 그리기 (21.12.08)

※ 피보나치 트리 그리기 import turtle as t def fibo(n): if n == 0: return 0 elif n == 1: return 1 else: return fibo(n-1) + fibo(n-2) def fibo_tree(length, n): if n > 0: t.forward(length) t.right(30) fibo_tree(length*3/4, n-1) t.left(60) fibo_tree(length*3/4, n-2) t.right(30) t.backward(length) t.setup(600, 600) s = t.Screen() t.left(90) t.color("green") t.penup() t.goto(0, -200) t.pendown() t.speed(0) n =..

[TIL] 피보나치 수열 계산 (21.12.07)

※ 피보나치 수열 계산하기 - 피보나치 수(Fibonacci Numbers)는 0과 1로 시작하며, F0 = 0, F1 = 1, Fi = Fi-1 + Fi-2(i>=2) 의 재귀식으로 정의가 된다. def fibo(n): if n == 0: return 0 elif n == 1: return 1 else: return fibo(n-1) + fibo(n-2) n = int(input("f(n), n :")) for i in range(0, n+1): rst = fibo(i) print("fibo(%d) = %d"%(i, rst)) 피보나치 수열은 위와같이 재귀함수를 이용해 풀이할 수 있다. 피보나치 수열은 0일때 0, 1일때 1, 2 이상부터는 해당하는 수열보다 1과 2가 작은 수열의 합이므로 fibo(n..

[TIL] 음계/주파수 이용 피아노 연주 (21.12.03)

※ 음계와 주파수를 이용한 피아노 건반 연주하기 - 피아노의 기본 음계인 A4(라)음의 표준 주파수는 440Hz다. A4음을 기준으로 1 옥타브가 증가할 때마다 주파수는 2배가 되고, 1 옥타브가 감소할 때마다 주파수는 1/2배가 된다. 예를 들어 A5의 주파수는 880Hz 이고 A3의 주파수는 220Hz인 것과 같다. 아래와 같이 0옥타브 A0음부터 8옥타브 G8#음까지의 각 음계별 주파수를 계산할 수 있다. a4base = 440 for i in range(9): abase = a4base / 2 ** (4-i) for j in range(12): freq = round(abase * 2**(j/12)) print(freq, end=" ") print("") print("") import turtle..

[TIL] 마우스와 키보드로 그림 그리기 (21.12.02)

※ 마우스와 키보드를 이용한 그림 그리기 - 터틀 그래픽에서는 마우스와 키보드를 이용해 간략한 도형이나 그림을 그릴 수 있다. 마우스를 이용해 곡선이나 도형 등을 그릴수 있고, 키보드를 이용해 선의 두께 조정, 형태 변경이나 펜 올리기와 내리기와 같은 동작을 할 수 있다. import turtle as t draw_action = 1 oldx = 0 oldy = 0 def new_clear(): global draw_action global oldx global oldy t.clear() t.pensize(1) t.pendown() draw_action = 1 oldx = 0 oldy = 1 def draw(x, y): global oldx global oldy if draw_action == 1: # ..

[TIL] 문자열과 서식문자 (21.12.01)

※ 문자열 선언 - 문자열(string)은 문자나 기호가 순서대로 나열되어 있는 자료이며, 글자를 뜻하는 텍스트(text) 혹은 스트링(string)으로 부른다. 문자열의 선언은 작은따옴표나 큰따옴표를 이용하고, 두 따옴표를 서로 조합해 이용할 수 있다. 큰따옴표를 연속으로 3개 사용(""" """)하여 문자열을 감쌀 경우 문자열 중간에 줄바꿈이 있더라도 해당 줄바꿈을 포함한 모든 문자열을 하나의 문자열로 선언한다. st1 = 'Text' str2 = "String" str3 = """Text String """ str4 = "Text's string" str5 = 'Text "in" string' print(str1) print(str2) print(str3) print(str4) print(str5)..

[TIL] ISBN코드 활용 도서번호 검증(21.11.30)

※ ISBN 코드를 이용해 도서 번호 검증하기 - ISBN(International Standard Book Number) 코드는 각 출판사가 펴낸 도서의 국제 표준에 맞추어 붙이는 도서 고유 번호이다. ISBN 코드는 10~13자리로 구성되며 13자리 ISBN 코드의 경우 다음과 같은 형식으로 구성됨. 예시로 979(접두부)-11(국별번호)-957304(발행자번호)-3(서명식별번호)-8(체크기호) 와 같다. ISBN 코드의 유효성을 검증하는 방법은 ISBN 코드 12자리 숫자에 가중치 1과 3을 번갈아 곱해 값을 더하고 가중치의 합을 10으로 나누어 나머지를 구하며 10에서 나머지를 뺀 값이 체크기호가 되며, 나머지가 0인 경우 체크기호가 0이 된다. def isbn_check(isbn): s = 0 ..

[TIL] 리스트 원소 (21.11.29)

※ 리스트의 원소 추가 - 리스트 객체의 append() 함수를 통해 리스트의 마지막 위치에 새로운 원소를 추가할 수 있으며 insert() 함수를 통해 리스트의 특정 위치에 새로운 원소를 삽입할 수 있다. 또한, len() 함수는 리스트 객체의 원소 개수를 반환한다. example = [] example.append("가")# example 리스트에 "가" 추가 example.append("나")# example 리스트에 "나" 추가 example.append("다")# example 리스트에 "다" 추가 print(example) for i in range(len(example): print(i, example[i]) example.insert(2, "라") print(example) for i in..

[TIL] 로봇 청소기 움직임 (21.11.28)

※ 로봇 청소기 이동과 귀환하기 - 우리의 생활에서 흔히 볼 수 있는 로봇청소기는 보통 제조사에서 정해둔 모드에 알맞게 미리 정해진 모드에 따라 경로를 정해 이동한다. 이번엔 이러한 특성에 맞게 프로그래밍을 해볼 것 이다. import turtle as t robot_fn = "robotic_vacuum.gif"# 경로내에 robotic_vacuum.gif 파일이 있어야 함 rx = [] ry = [] move_cnt = 0 def move_robot(action): t.clear() if action == 0: for i in range(move_cnt): t.goto(rx[i], ry[i]) elif action == 1: for i in range(move_cnt-1, -1, -1): t.goto(..

[TIL] 7세그먼트 개별 LED 숫자 표시

※ 7세그먼트의 개별 LED를 이용해 숫자 표현하기 - 7세그먼트는 a~g 단자를 이용해 개별 LED를 켜고 끌 수 있는데 그 방식을 두가지로 나눌 수 있다. 공통 캐소드 타입(common-cathode type)은 전류를 보낸 단자를 통해 연결된 각 LED가 켜지게 되며 공통 애노드 타입(common-anode type)은 전류를 보내지 않은 단자와 연결된 LED가 켜지게 된다. 위 예시와 같이 애노드 타입은 세그먼트에서 1을 표현하고자 하는 경우 a, d, e, f, g에 전류를 보내 b, c의 led가 켜지게 되어 1이 표시가 된다. 캐소드 타입의 경우 1을 표현하고자 하는 경우는 b, c 에만 전류를 보내 1을 표시하게 된다. 이를 프로그램 내에서 코드예시로 본다면 다음과 같다 s7seg_num ..