728x90
반응형
교재: 파이썬으로 쉽게 풀어쓴 자료구조 (생능출판)
P2.2 숫자 맞추기 게임
#추가한 내용
#- 각 시도를 할 때마다 앞에 #n 형식으로 몇 번째 시도인지 표기
#- 시도 횟수에 제한이 있음 표기
#import random
### 변수 설정
answer = 50 #random.randint(0,99) #정답
guess = 0 #추측숫자
min = 0; max = 99 #정답범위 힌트 제공
### main문
for cnt in range(1,11):
if cnt == 1:
print(f'시도할 수 있는 최대 횟수는 10회입니다.\n\n')
print(f"#{cnt}: 숫자를 입력하세요(범위: {min}~{max})", end="")
guess = int(input(":"))
if answer == guess:
print(f"\t정답입니다. {cnt}번만에 맞추셨습니다.\n\t게임이 끝났습니다.")
break
elif answer > guess:
print("\t아닙니다. 더 큰 숫자입니다!\n")
if min <= guess:
min = guess
elif answer < guess:
print("\t아닙니다. 더 작은 숫자입니다!\n")
if max >= guess:
max = guess
if cnt == 10:
print(f'최대 시도 횟수를 넘었습니다.\n')
print(f'\t정답은 {answer}입니다.\n\t게임이 끝났습니다.')
break
실행결과
P2.3 숫자 피라미드
######규칙 발견######
# 빈칸: 지정한 높이는 h이고, 현재 출력할 위치(높이)가 n번째 행일때 필요한 빈칸 개수는 h-n개
# 증가하는 숫자: 현재 출력할 위치(높이)가 h번째 행이라면 출력할 숫자 개수=h 이고, 숫자는 1+2*n(n=0,..,h-1) 의 규칙을 가짐
# 감소하는 숫자: 현재 출력할 위치(높이)가 h번째 행이라면 출력할 숫자 개수=h-1 고, 숫자는 1+2*(h-1)-2*n 의 규칙을 갖는다.
height = int(input("피라미드의 높이를 입력하세요:"))
for h in range(1, height+1): #1부터 입력한 높이까지 출력할 반복문
for blank in range(height-h): #빈칸 출력
print(' ', end='')
for n in range(h): #증가하는 숫자 출력
print('%3d'%(1+2*n), end='')
for n in range(1, h): #감소하는 숫자 출력
print('%3d'%(1+2*(h-1)-2*n), end='')
print()
실행결과
P2.4 특수규칙 찾기
####발견한 규칙#####
# X-를 한 덩어리로 가정하고 시작
# 또한 left와 right는 'X-'를 기준으로 양 옆에 있는 '-'개의 개수로 이해하였음
# 0번째 행(row=0)에는 31개의 '-' + 'X-' + 31개의 '-'가 2의 row승(2**0 = 1)번만큼 반복되고 있음
# 1번째 행(row=1)에는 15개의 '-' + 'X-' + 15개의 '-'가 2의 row승(2**1 = 2)번만큼 반복되고 있음
# 2번째 행(row=2)에는 7개의 '-' + 'X-' + 7개의 '-'가 2의 row승(2**2 = 4)번만큼 반복되고 있음
# 이하 동일
# 이때 31 -> 15 -> 7 ... 은 (31-1)//2 = 15, (15-1)//2 = 7임을 알아냄 => left = (left-1)//2; right = right//2 를 작성한 이유
def draw_tree(row, left, right):
#print();print(left, right)
for _ in range(2**row):
print('-'*left+'X-'+'-'*right, end='')
print()
left = (left-1)//2
right = left
row = row + 1
if row < 6:
draw_tree(row, left, right)
row = 0
left = 31
right = 31
draw_tree(row, left, right)
실행결과
P2.5 클래스 이용하기
class Bag:
def __init__(self):
self.bag = []
def insert(self, str_to_insert):
self.bag.append(str_to_insert)
def remove(self, str_to_remove):
self.bag.remove(str_to_remove)
def bag(self):
for item in self.bag:
print(item, end=' ')
myBag = Bag()
myBag.insert('휴대폰')
myBag.insert('지갑')
myBag.insert('손수건')
myBag.insert('빗')
myBag.insert('자료구조')
myBag.insert('야구공')
print('내 가방 속의 물건:', myBag.bag)
myBag.insert('빗')
myBag.remove('손수건')
print('내 가방 속의 물건:', myBag.bag)
실행결과
728x90
반응형
'IT지식' 카테고리의 다른 글
NodeJS와 JavaScript 이해하기 (0) | 2021.07.29 |
---|