4/25 제작코드
목차
개발진행 및 완료상황
개발완료보고서
제작 코드
구현 사진
만난 오류 + 해결
해야할 것
개발진행 및 완료상황
오늘은 조동현 교수님이 갑자기 개복치를 키워내라고 문제를 주셨다.
덕분에 내 멘탈이 개복치가 되었지만.. 시간도 빨리가고 알다가도 모를 파이썬에 대해 더 알아가는 시간을 가졌다.
일단 1차 구현은 완료한 상태이나(문제 조건에 있는 부분) 예외처리나 코드 모양이 좀 깔끔하지가 않은게 마음에 좀 걸린다. 함수를 배운 이후에 다시 도전해보는걸로..!
순서도
개발 완료 보고서
코드
main.py
import random
from art import bokki_style, die_ment_food, MENU, state, die_art, adventure_name, adventure_ment_failure, table_head, table_bottom, eating_cnt_dict
import os
import time
# 전역 변수들
bokki_weight = 0 # 복치 몸무게
bokki_point = 0.0 # 복치 포인트(mp)
bokki_size = 0 #복치 크기
die_cnt = 0 # 돌연사 횟수
eating_count = 7 # 먹이 랜덤 갯수 기본은 7
eating_upgrade_cnt = 0 #먹이 확률 때문에 존재. 먹이 업그레이드 하면 초기화
eating_cnt = 0 # 먹는 횟수(3번 먹으면 모험포인트 +=1 )
journey_point = 0 # 모험포인트
adventure_ugrade = 0 #모험 업그레이드
grow_cnt_2 = 0 # 진화할 때마다 초기화
eating_base = 0 # 어떤 메뉴를 먹는지
def assistant_ment(num):
"""안내 멘트"""
ment = [
'먹이를 먹기로 선택했습니다.', #0
'모험을 떠나기로 선택했습니다.', #1
'상점으로 갑니다.', #2
'게임이 종료됩니다.', #3
'MP가 부족해서 구매할 수 없습니다.'#4
]
print(ment[num-1])
def eating():
"""복치가 먹고 증가한 몸무게 반환"""
bokki_food = MENU[eating_base][0] # 복치가 먹는 음식
plus_wight = round(MENU[eating_base][1][0] * eating_count, 2) # 증가 체중 = 먹는 음식 * 몇개
print(f"{bokki_food}먹이를 {eating_count}만큼 섭취합니다.") # 어떤 먹이를 몇 개 먹는지 알려주기
print(f"체중이 {plus_wight}kg만큼 증가합니다.")
return plus_wight
def bokki_random_die_adventure(num):
"""복치가 모험에서 돌연사할 확률 반환(돌연사 횟수)"""
survival_per = 0
if num == 0:
survival_per = 50
elif num == 1:
survival_per = 75
elif num == 2:
survival_per = 95
else:
survival_per = 99
if survival_per >= random.randint(0, 100):
print("생존했습니다!")
return 1
else:
print("돌연사했습니다!")
return 0
def bokki_random_die_food(num, eating):
"""복치가 먹이를 먹고 돌연사할 확률 반환 (돌연사횟수, 먹이종류)"""
survival_per = 0
if eating == '동물성 플랑크톤':
survival_per = 100
else:
survival_per = 92
if num > 0:
survival_per = 99.9
if survival_per >= random.randint(0, 100):
print("생존했습니다!")
return 1
else:
print("돌연사했습니다!")
return 0
def bokki_size_return(weight):
"""복치 몸무게 체크해서 반환"""
global state
if 0 <= weight <= 1.9:
state_num = 0
elif 2 <= weight <= 19.9:
state_num = 1
elif 20 <= weight <= 89.9:
state_num = 2
elif 90 <= weight <= 319.9:
state_num = 3
elif 320 <= weight <= 999.9:
state_num = 4
elif 1000 <= weight <= 2499.9:
state_num = 5
elif 2500 <= weight <= 4999.9:
state_num = 6
else:
print('진화성공')
bokki_state = list(state.keys())[state_num]
return state_num
def journey_point_plus(eat_cnt):
"""모험포인트 1 증가 출력(사실 필요없을지도)"""
if eat_cnt % 3 == 0:
print("3번 이상 먹어서 모험포인트가 1 증가합니다.")
return 1
else:
return 0
def store_buy(num):
"""상점 메뉴판 출력"""
if num == 1:
print("먹이 업그레이드 입니다.")
print("====현재 구매할 수 있는 먹이====")
for i in range(eating_base+1,9):
print(f"{i+1}번 메뉴:{MENU[i][0]} / 가격:{MENU[i][1][1]}원 ")
print("="*32)
if num == 3:
print("모험 업그레이드 입니다.")
print("====현재 구매할 수 있는 모험====")
for i in range(1, 9):
print(f"{i + 1}번 모험:{adventure_name[i][0]} / 가격:{adventure_name[i][1][1]}포인트 ")
print("=" * 32)
if num == 2:
print("먹이 최대갯수 업그레이드 입니다.")
item_cnt = 1
for i, j in eating_cnt_dict.items():
print(f"{item_cnt:<2}번 | {i:>2}개: {j}MP")
item_cnt += 1
user_choice_upgrade = int(input("몇 번 구매를 선택하시겠습니까?: "))
return user_choice_upgrade
def adventure_sucess(adventure_ugrade):
"""모험 성공시 늘어난 체중과 mp반환"""
print(f"몸무게가 {adventure_name[adventure_ugrade][1][0]}만큼 증가합니다.")
print(f"mp가 {adventure_name[adventure_ugrade][1][1]}만큼 증가합니다.")
weight = adventure_name[adventure_ugrade][1][0]
point = adventure_name[adventure_ugrade][1][1]
return (weight, point)
print("개복치 키우기에 어서오세요")
# 게임 규칙 설명
game_start = 'y' # input("시작하시겠습니까?(y/n): ").lower()
if game_start == 'y':
os.system("cls")
while True:
# 복치 사이즈 확인
bokki_change_size = bokki_size_return(bokki_weight)
if bokki_size != bokki_change_size:
print(f"복치가 {list(state.keys())[bokki_change_size]}로 진화했습니다!")
bokki_size += 1 # 사이즈 증가
grow_cnt_2 = 0 # 진화하면 횟수만큼 mp얻는거 초기화
# 복치왕 되었을 때
if bokki_size == 6:
print(f"당신은 {die_cnt}번만에 개복치를 환생시키고 수족관의 주인을 만들었습니다.")
break
# 복치 상태창
bokki_table = f"상태: {list(state.keys())[bokki_size]}, 몸무게: {round(bokki_weight, 2)}kg, MP: {bokki_point}, 모험포인트: {journey_point}"
base_table = table_head + bokki_style[bokki_size] + table_bottom + bokki_table
print(base_table)
print("1. 먹이, 2.모험, 3.상점, 4.종료")
while True:
user_choice = int(input("개복치가 무엇을 할 지 선택하세요: "))
if user_choice in [1, 2, 3, 4]:
break
else:
print("1부터 4사이의 숫자를 선택해 주세요!")
assistant_ment(user_choice)
#먹는것 선택
if user_choice == 1:
bokki_weight += eating()
eating_cnt += 1 # 먹은 횟수 증가
journey_point += journey_point_plus(eating_cnt) # 3번 먹을 때마다 여행포인트 1 증가
if bokki_random_die_food(eating_upgrade_cnt, MENU[eating_base][0]) == 0:
print(die_art)
die_cnt += 1 # 돌연사 횟수 +=1 -> 죽을 확률 감소
print(f"돌연사 이유는...{die_ment_food[eating_base]}") # 어떤 사인으로 죽었는지 출력
print(f"MP가 {list(state.values())[bokki_size][2]}만큼 증가합니다.")
bokki_point += float(list(state.values())[bokki_size][2])
grow_cnt_2 = 2 #돌연사시 얻는 mp늘려줌
else:
bokki_size_num = bokki_size
input("enter>>")
os.system('cls')
#모험 선택
elif user_choice == 2:
if journey_point > 0:
print("포인트 1점을 사용해서 모험을 떠납니다.", end='')
# for i in range(3):
# print('.', end='', flush=True)
# time.sleep(1)
# print('')
journey_point -= 1
print(f"현재 도전할 수 있는 모험은\n[{adventure_name[adventure_ugrade][0]}]입니다.")
# 도전에 성공했을 때
if bokki_random_die_adventure(die_cnt) == 1:
ad_weight, ad_point = adventure_sucess(adventure_ugrade)
bokki_weight += ad_weight
bokki_point += float(ad_point)
# 도전에 실패했을 때
else:
print(die_art)
die_cnt += 1
print(f"돌연사 이유는...\n{adventure_ment_failure[adventure_ugrade]}")
print(f"MP가 {list(state.values())[bokki_size][2]}만큼 증가합니다.")
bokki_point += float(list(state.values())[bokki_size][2])
grow_cnt_2 = 2 #돌연사 시 얻는 mp늘려줌
else:
assistant_ment(5)
input("enter>>")
os.system('cls')
#상점 선택
elif user_choice == 3:
user_buy_choice = int(input("어떤것을 업그레이드 하시겠습니까?\n(1.먹이종류/2.먹이갯수/3.모험/4.돌아가기): "))
if user_buy_choice in [1,2,3]:
##메뉴 보여주기. 이 부분 더러워서 함수로 바꾸고 싶음
user_pick = store_buy(user_buy_choice)
if user_buy_choice == 1 and MENU[user_pick-1][1][1] < bokki_point:
print(f"먹이 {MENU[user_pick][0]}을 구매합니다.")
bokki_point -= MENU[user_pick-1][1][1]
eating_base = user_pick-1
elif user_buy_choice == 2 and int(list(eating_cnt_dict.values())[user_pick-1]) < bokki_point:
print(f"먹이갯수를 {list(eating_cnt_dict.keys())[user_pick-1]}으로 업그레이드 합니다.")
eating_count = int(list(eating_cnt_dict.keys())[user_pick-1])
elif user_buy_choice == 3 and adventure_name[user_pick-1][1][2] < bokki_point:
print(f"모험 {adventure_name[user_pick-1][0]}을 구매합니다.")
bokki_point -= adventure_name[user_pick-1][1][2]
adventure_ugrade = user_pick-1
else:
assistant_ment(5)
input("enter>>")
os.system('cls')
else:
print("돌아갑니다.")
os.system("cls")
continue
bokki_size_num = bokki_size
else:
break
else:
print("게임이 종료됩니다.")
art.py
""",
1: """
⠀⠀⢠⢤⡀⠀⠀⢀⠠⡀⠀⢀⣀⣠⠤⠴⣒⠖⠂⠀⠀
⠀⠀⠸⡄⠙⣷⣰⠚⠋⠉⠉⠙⡤⣤⠶⠏⢀⡴⠋⠃⠀
⠀⠀⠀⡵⠞⠉⠀⠀⠀⠀⠀⠀⠈⠚⢶⢤⡞⠀⠀⡇⠀
⠀⠀⢰⠃⠀⠀⡀⠀⠀⠀⠀⠀⠀⠀⠀⡨⡑⣤⣰⠃⠀
⠀⠀⡏⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⣿⡁⠀⠀
⠀⠀⢱⡀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⢸⠀⠹⠀⠀
⠀⠀⠀⠘⠤⡀⠀⠀⠀⠀⠀⠀⠀⠀⠀⢀⣜⠀⠀⡇⠀
⠀⠀⠀⢀⡴⠋⠤⣀⣀⣀⣀⣀⣀⣀⡤⢿⡘⠷⠼⠃⠀
⠀⠀⡐⣩⠒⠒⠋⠁⠈⠊⠀⠘⡐⠁⠂⣀⡉⢢⡀⠀⠀
⠀⠀⠈⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠈⠉⠀⠀⠀
""",
2: """
⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⢀⡀⠀⠀⠀⠀
⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⢀⠔⢸⡇⠀⠀⠀⠀
⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⢀⠄⠁⢀⣸⠅⠀⠀⠀⠀
⠀⠀⠀⠀⠀⡠⠔⠂⠉⠉⠉⠁⠀⠈⠉⠉⠒⠢⣀⠀⠀
⠀⠀⠀⡀⠈⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠙⣧⠀
⠀⡠⢴⠀⠀⠘⠃⠀⠀⠀⠀⠀⠀⠀⠀⠀⢀⣠⣾⣿⡄
⠀⡇⠈⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⣠⣾⣿⣿⣿⠄
⠀⠈⠁⡀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠉⠉⠉⠉⢉⡿⠀
⠀⠀⠀⠀⠂⢄⣀⡀⠀⠀⠀⠀⠀⠀⠀⠀⠀⢀⡸⠃⠀
⠀⠀⠀⠀⠀⠀⠀⠈⠛⠷⠶⠶⠶⡀⠰⣶⡟⠛⠀⠀⠀
⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠑⠀⣹⠇⠀⠀⠀⠀
⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠉⠀⠀⠀⠀⠀
""",
3: """
⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⢀⡀⠀⠀⠀⠀
⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⢀⠀⠃⣾⠀⠀⠀⠀
⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠔⠁⠀⣸⡟⠀⠀⠀⠀
⠀⠀⠀⠀⠀⠀⠀⠠⠐⠒⠊⠉⠉⠉⠛⠛⠣⠤⣀⡀⠀
⠀⠀⠀⠄⠀⠀⠀⠀⠀⠐⠂⣄⠀⠀⠀⠀⠀⠀⠈⢻⡀
⡎⢣⠆⠀⠀⠛⠃⠀⠀⠀⣠⣿⠆⠀⠀⠀⠀⠀⣀⣾⡇
⠀⢸⠀⠀⠀⠀⠀⠀⠀⠸⠛⠉⠀⠀⠀⠀⣠⣿⣿⣿⡇
⢰⣼⡄⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠐⠚⠛⠋⠉⢹⠃
⠀⠀⠈⠢⢀⡀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⣯⠀
⠀⠀⠀⠀⠀⠉⠉⠒⠲⠦⠤⠤⣤⣤⣤⣤⣶⠚⠋⠀⠀
⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠁⠀⢹⡿⠀⠀⠀⠀
⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠘⠁⠀⠀⠀⠀
""",
4: """
⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⢀⠄⠷⡀⠀⠀⠀⠀⠀⠀⠀⠀
⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⡠⠒⠈⠀⠀⢀⡇⠀⠀⠀⠀⠀⠀⠀⠀
⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⢠⠊⠀⠀⠀⠀⣠⡟⠃⠀⠀⠀⠀⠀⠀⠀⠀
⠤⢤⣤⡤⠤⠤⢼⣧⣤⣤⣤⣤⣴⣿⣧⣤⡄⠘
⠀⠀⠀⠀⠀⠀⠀⠀⠀⠔⠊⠉⠁⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠙⠳⣆⣀⣴⢮⠀⠀⠀
⠀⠀⠀⠀⠀⠀⡠⠊⠀⠀⠀⠀⠀⠀⠀⣀⣀⡀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⢸⣯⠁⢈⡆⠀⠀
⠀⡠⠊⠑⣦⠎⠀⠀⠀⠀⠀⠀⠀⠀⠞⠀⡄⢹⣶⡄⠀⠀⠀⠀⠀⠀⠀⠀⠀⢻⣴⠾⠀⠀⠀
⠀⡇⠀⠀⡏⠀⠀⠀⠀⠿⠇⠀⠀⢀⠀⣠⢡⢺⣿⣷⠀⠀⠀⠀⠀⠀⠀⠀⠀⢸⣏⠀⢣⠀⠀
⠀⠑⢄⠀⠁⠀⠀⠀⠀⠒⠚⠀⠀⠘⠀⠀⡀⣻⣿⡟⠀⠀⠀⠀⠀⠀⠀⠀⠀⣸⣿⡃⡜⠀⠀
⠀⠀⡘⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠛⠛⠛⠃⠀⠀⠀⠀⠀⠀⠀⠀⠀⢰⣿⣿⣷⡇⠀⠀
⠀⣸⠀⢰⡆⠐⢤⢠⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠂⠛⣿⡟⢟⠀⠀⠀
⠀⠹⣶⣾⡷⣄⠸⡀⡆⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⢀⣿⠁⠈⡆⠀⠀
⠀⠀⠀⠀⠀⠈⠲⡇⡇⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⣀⣀⣀⣴⣿⣟⡀⠀⣱⠀⠀
⠀⠀⠀⠀⠀⠀⠀⢣⠹⡦⣄⡀⠀⠀⠀⠀⠀⢀⣀⣀⣀⣽⣶⣿⣿⣿⣿⠻⢧⣝⣛⣻⠉⠀⠀
⠀⠀⠀⠀⠀⠀⠀⠀⠣⡐⠤⢍⠉⠓⠒⠉⠉⠙⠻⣉⠉⠉⠈⠙⢿⣿⠃⠀⠀⠉⠉⠁⠀⠀⠀
⠀⠀⠀⠀⠀⠀⠀⠀⠀⠈⠉⠁⠀⠀⠀⠀⠀⠀⠀⠀⠑⠤⣀⠀⠀⢿⡄⠀⠀⠀⠀⠀⠀⠀⠀
⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠐⠤⠾⠃⠀⠀⠀⠀⠀⠀⠀⠀
""",
5: """
⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⣀⢀⣀⡄⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀
⠀⠀⠀⠀⠀⠀⠀⣿⡶⡟⠀⠀⣠⣠⠄⣀⡀⠀⠀⠀⠀⠀⠁⠀⢀⡀⠆⠀⠀⠀⣷⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀
⠀⠀⠀⠀⠀⠀⠘⢃⡷⢋⣟⣭⣤⣤⡈⡄⠹⡀⠀⠀⠀⠀⡠⠎⠀⠀⠀⠀⠀⣼⣿⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀
⠀⠀⠀⠀⠀⣴⠛⠋⢹⣯⠈⣿⣿⣿⣿⢸⠀⡇⠀⠀⠀⣼⠃⠀⠀⠀⠀⢀⣿⡿⠁⠀⠀⠀⣤⣤⠀⠀⠀⠀⠀
⢲⢸⡀⣼⣿⣿⣇⣘⢿⠿⠟⣈⣫⡷⠖⠒⠛⠒⠒⠒⠒⠲⠶⠿⠿⠷⣶⣆⠀⠉⠁⠀⢩⠖
⠀⠀⠀⠀⠸⣄⠳⣝⡿⠟⠉⣀⠤⠖⠛⠉⠁⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠸⢿⣀⣠⡿⢧⠀⠀⠀⠀
⠀⠀⠀⠀⠀⠀⠹⢥⡤⠖⠋⠁⢀⠀⠀⠀⠀⢀⣀⡀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠈⣿⡍⠀⢈⡆⠀⠀⠀
⠀⠀⡀⠐⠢⣄⡄⠁⠀⠠⠐⠈⠀⠀⠀⠀⡠⠃⠀⡘⣦⣤⡀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠸⣧⣰⣾⠀⠀⠀⠀
⠀⢸⠀⠀⠀⡟⠀⠀⠀⠀⣾⣿⡇⠀⠀⢰⠀⠀⢀⠂⢿⠿⣿⣄⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⣿⡃⠀⢦⠀⠀⠀
⠀⠸⡀⠀⠀⠇⠀⠀⠀⠀⠉⣉⣡⡄⠀⣸⠀⠐⠚⢐⡼⣰⣾⡿⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⣿⣧⡀⢸⠀⠀⠀
⠀⠀⠈⢁⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⢠⣴⣶⣾⠿⠋⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⢰⣿⣷⣆⡏⠀⠀⠀
⠀⠀⡄⠋⢀⠀⠀⠀⠀⠂⠀⠀⠀⠀⠀⠀⠀⠈⠉⠉⠁⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⢀⣿⣿⣿⣿⠇⠀⠀⠀
⠀⢠⠃⠀⢸⡇⠑⡄⠆⢰⢸⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠐⠒⠐⠀⠈⢹⣿⠙⢻⠀⠀⠀⠀
⠀⠈⢦⣤⣾⡷⡄⣣⠀⢸⢸⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⣸⡏⠀⠈⡇⠀⠀⠀
⠀⠀⠀⠀⠀⠀⠈⢹⢸⠀⠠⠣⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⢠⣾⣿⡟⠀⠀⣹⠀⠀⠀
⠀⠀⠀⠀⠀⠀⠀⠈⠆⢻⣤⣱⠍⠁⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⣐⣠⣬⣾⣿⣿⣿⣿⣿⡛⠿⠶⢶⠟⠀⠀⠀
⠀⠀⠀⠀⠀⠀⠀⠀⠑⠢⣑⣒⠝⠒⠦⠤⠤⠤⠤⠖⢾⣿⠿⠿⠛⠛⠛⣿⣿⣿⡏⠀⠈⠛⠓⠒⠋⠀⠀⠀⠀
⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠑⠂⠀⠀⠀⠈⠛⣿⡁⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀
⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠉⠑⢆⠀⠀⢹⣧⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀
⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠐⠒⠛⠋⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀
""",
6: """
⠀⠀⠀⠀⠀⠀⠀⢰⠤⡴⠟⠀⢀⡀⢀⣀⢀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⣀⡄⠶⠶⠓⡆⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀
⠀⠀⠀⠀⠀⠀⠸⠋⢢⠽⢢⠄⠀⠉⡅⠠⡉⣦⡄⠄⢀⡀⠀⠀⠀⠀⡠⠄⠉⠁⠀⠀⠀⢠⡇⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀
⠀⠀⠀⠀⠀⠀⢀⡠⠇⢶⠋⢢⣤⣄⣦⡠⠤⣷⢾⣃⣽⠩⣀⠀⢠⠊⠀⠀⠀⠀⠀⠀⣀⣾⡇⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀
⠀⠀⠀⠀⢴⠋⣁⡀⢀⣸⣆⠈⢿⣿⣿⡯⣷⣻⢾⠷⠁⠰⡱⠉⠁⠀⠀⠀⠀⠀⠀⣸⣿⡿⠀⠀⠀⠀⢠⣤⡄⠀⠀⠀⠀
⠒⠇⢸⡁⢶⣿⡿⣿⡄⢨⣿⣿⣵⡏⣁⣤⣇⠛⠁⠀⠒⠒⠒⠒⠒⠒⠦⠾⠿⠿⢷⣶⠂⠀⠀⠀⠀⠉⡱
⠀⠀⠀⠀⡅⡎⣿⣔⡛⢓⣿⣿⣇⣸⠿⠚⠉⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠹⣆⠀⢀⣠⣾⡁⠀⠀⠀
⠀⠀⠀⢔⠪⡸⠝⣓⡟⣛⠿⠟⠉⠀⠀⠀⠀⠀⠀⠀⠠⠄⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⢻⣟⠋⠀⢁⠄⠀⠀
⠀⠀⠀⠀⠑⠔⠴⠿⠛⠀⢀⠀⠀⠀⠀⠀⠀⠀⠀⡆⠀⠠⢦⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⣿⠀⢀⡞⠀⠀⠀
⠀⢠⠀⠀⠀⠹⡞⠀⠀⠀⢠⣤⣤⠀⠀⠀⠀⢀⠊⠀⠀⠀⢸⡿⢿⣆⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⢸⠾⠛⠃⡀⠀⠀
⠀⢸⠀⠀⠀⢰⠀⠀⠀⠀⢸⣿⣿⠀⢐⡊⠁⢸⠀⠀⢀⣶⠉⣴⠉⣿⣿⣷⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⢸⡇⠀⠀⠁⠀⠀
⠀⠈⢣⣀⠀⢸⠀⠀⠀⠀⠀⠠⠤⠖⠂⠀⠀⠼⠀⠈⠉⢠⣼⣷⣾⡿⠋⠁⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⢸⡇⠀⢀⡄⠀⠀
⠀⠀⠀⠈⡇⢸⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠠⣴⣶⣿⣿⠟⠉⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⣿⣿⣆⣸⠀⠀⠀
⠀⠀⡐⠉⠁⢸⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠱⠄⠀⠀⠀⠀⠀⠀⠀⢀⣼⣿⣿⣿⡿⠀⠀⠀
⠀⢠⠃⠀⠀⣿⠀⠀⠒⠀⠒⠀⠀⡀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠑⠂⠀⠂⠀⠀⠀⠀⠀⠀⠈⠁⣿⠉⠛⠣⠀⠀⠀
⠀⠈⢤⣤⣤⣿⣶⢈⣸⠰⢀⢸⠀⢤⢀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠈⠀⠀⠀⠀⠀⠀⠀⠀⠀⢀⣿⠀⠀⠘⠄⠀⠀
⠀⠀⠀⠀⠀⠀⠹⣯⡎⡄⡇⢸⠀⠸⡐⠄⡀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⢀⣤⣾⡟⠀⠀⠈⡁⠀⠀
⠀⠀⠀⠀⠀⠀⠀⡇⡇⡇⣷⠀⡧⡘⠇⡀⠃⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⣀⣠⣤⣤⣤⣤⣾⣿⡟⢧⣄⣀⣠⡇⠀⠀
⠀⠀⠀⠀⠀⠀⠀⢃⢹⢰⡘⠀⣷⠷⣌⠉⣼⣀⣀⣀⣀⣀⣤⣶⣶⠶⠶⠟⠻⠿⣿⣿⣿⣿⡿⠙⠛⠳⠦⠤⠤⠏⠀⠀⠀
⠀⠀⠀⠀⠀⠀⠀⠀⢿⡘⡷⣤⠙⠊⢹⢆⠱⠦⡡⢄⠀⠀⠈⠓⠒⢀⠀⠀⠀⠀⠘⢿⣿⣿⠇⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀
⠀⠀⠀⠀⠀⠀⠀⠀⠀⢡⠘⢤⡌⣉⠁⠀⠟⠀⢤⠜⣀⠀⠀⠀⠀⠀⠐⠤⠄⣀⠀⠀⠀⢿⡆⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀
⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠉⠂⠈⠀⠇⠀⠈⠑⠂⠁⠀⠃⠀⠀⠀⠀⠀⠀⠀⠘⠀⠀⡀⣸⡧⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀
⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠉⠉⠉⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀
"""
}
table_head = """
╭┈────────────────복치상태창──────────────────┈┈╮
"""
table_bottom = '''
╰───────────────────────────────────────────────╯
'''
die_art = '''
'두-둥!''
_人人人人_
> 돌연사 <
 ̄Y^Y^Y^Y ̄
'''
state = {
'별사탕': [0, 0, 30],
'아기': [40, 20, 120],
'어린이': [70, 60, 240],
'젊은이': [230, 90, 560],
'사회의 일원': [600, 140, 900],
'개복치왕': [1950, 360, 1950],
'수족관 주인': [3340, 680, 3340],
}
print(list(state.values())[0][2])
eating_cnt_dict = {
'8' : 24,
'9' : 64,
'10' : 96,
'11' : 128,
'12' : 192,
'13' : 400,
'14' : 60,
'15' : 800,
'16' : 1200,
'17' : 2080,
'18' : 3120,
'19' : 4000,
'20' : 6000,
}
MENU = [
['동물성 플랑크톤', [0.1, 0]],
['해파리', [0.2, 110]],
['오징어', [0.4, 220]],
['새우', [0.7, 600]],
['정어리', [1.0, 1200]],
['게', [1.4, 3200]],
['가리비', [2.5, 6500]],
['굴', [4.0, 11000]],
['닭새우', [4.0, 11000, 23000]],
]
die_ment_food = [
'이유 없음: 개복치가 동물성 플랑크톤을 실증내해서 죽었습니다.',
'비닐봉투: 개복치는 해파리와 비닐봉투를 착각하여 잘 질식하여 죽는다.',
'오징어를 너무 먹었어: 개복치는 내장도 약하여 정말 좋아하는 오징어를 너무 많이 먹어 소화를 전혀 시키지 못해서 죽는다.',
'새우의 껍질: 개복치는 내장도 약하여 새우를 완전히 삼켜 그 껍질이 식도를 찔러 가끔 죽는다.',
'정어리의 뼈: 개복치는 식도도 약해서 정어리의 작은 뼈가 찔러서 고름이 생겨 죽는다.',
'게의 다리: 개복치는 내장도 약하여 게의 다리가 찔러서 고름이 생겨 죽는다.',
'가리비의 껍질: 개복치는 내장도 약하여 가리비의 껍질이 찔러 고름이 생겨 죽는다.',
'굴의 껍질: 아마 개복치가 아니라도 껍질을 먹으면 내장을 찔러서 고름이 생겨 죽을 것이다.',
'닭새우의 껍질: 개복치는 수족관에서 닭새우를 먹는 등 아주 비용이 많이 든다. 껍질이 남아있으면, 물론 죽을 것이다.',
]
'''모험 제목/ 성공 시 얻는 체중/ 성공 시 얻는 mp/ 구입시 필요한 mp'''
adventure_name = [
['몸이 가려워', [2.6, 30, 0]],
['해저에는 진수성찬이', [3.9, 30, 0]],
['바위의 그림자에는 보물이', [4.9, 40, 0]],
['햇몉 쬐기', [11.8, 40, 0]],
['바다거북아, 안녕', [21.5, 50, 0]],
['물고기 천국', [23.7, 60, 0]],
['새들은 친구들', [49.9, 110, 0]],
['동료를 구해라!', [87.4, 220, 0]],
['빛의 방향으로', [120, 300, 0]],
]
adventure_ment_failure = [
'착수 시의 충격: 개복치는 기생충을 떨쳐내기 위해 점프하지만 그 착수 시의 충격으로 까끔 죽는다.',
'물이 차가워서: 개복치는 맛있는 먹이를 찾아서 한 번에 심해로 잠수하지만 물이 너무 차서 쇼크사한다.',
'바위에 격돌: 개복치는 거의 앞으로만 헤엄칠 수 있기 때문에 바위를 피하지 못하고 자주 부딪혀 죽는다.',
'바짝 말라버린다: 개복치는 일광욕한 채로 자버려서 가끔 육지로 떠올라 죽는다.',
'바다거북이 무서워서: 개복치는 바다거북에게 충돌하는 것을 예감하고 패닉이 되어 호흡법을 잊어버려 죽는다.',
'인간에게 먹힌다: 개복치는 잘 그물에 걸려 인간에게 먹혀 죽는다.',
'새들의 발톰에 고름: 개복치는 일광욕을 하여 몸의 기생충을 먹게 하지만 자주 새들의 발톱에 상처를 입어 고름이 생겨 죽는다.',
'동료의 죽음: 개복치는 눈 앞에서 동료가 죽는 모습을 보고 그 스트레스로 죽는다.',
'아침해가 너무 강해서: 개복치는 섬세하기 때문에, 아침해가 너무 밝으면 놀라서 죽는다. 그런데도 영문명은 선피쉬.',
]
4. 구현사진
복치 성장
어린이로 성장한 복치
돌연사시 그 이유를 알려준다.
젊은이로 진화한 복치
메뉴판 1번
먹이갯수 메뉴판은 for문으로 나오게 구현
부족하면 구매할 수 없다고 알려줌
사회의 일원으로 성장한 복치. 이제 좀 부담스럽다.
더 부담스러운 개복치왕
성장완~!!🤗👏👏
아스키코드는 시연님이 제공해주셨다. 감사합니다.
만난 오류
1.
"AttributeError: 'int' object has no attribute 'items'"
이 오류는 일반적으로 딕셔너리가 아닌 정수형(integer)을 순회하려고 할 때 발생한다. 따라서 해당 에러가 발생하면, 코드를 수정하여 정수형을 순회하지 않도록 해야 한다고 한다. 하지만 나는..
eating_cnt 가 딕셔너리로 되어있는지 확인하는 과정에서 cnt가 아니라 count 임을 알아냈다.(변수 실수)
그래서 eating_cnt가 아니라 eating_count를 사용해야 했다..
2.
TypeError: 'int' object is not callable 오류
TypeError: 'int' object is not callable 오류는 코드에서 함수를 호출할 때, 함수 이름 다음에 ()를 붙이지 않아서 발생하는 오류이다.
수정한 부분
def adventure_sucess(adventure_ugrade):
print(f"몸무게가 {adventure_name[adventure_ugrade][1][0]}만큼 증가합니다.")
print(f"mp가 {adventure_name[adventure_ugrade][1][1]}만큼 증가합니다.")
weight = adventure_name[adventure_ugrade][1][0]
point = adventure_name[adventure_ugrade][1][1]
return (weight, point)
ad_weight, ad_point = adventure_ugrade(adventure_ugrade)
여기서는 함수 이름을 잘못 써서 실수를 했다. 이때쯤 집중력이 바닥나고 있었나보다.
해야할 것
오늘 개복치 만드느라 함수를 예습하지 못했다. 내일은 함수 진도를 나가신다고 하니까.. 열공해야지
- 파이썬 함수들 종류에 대해서 복습하기
- 우리반 사람들 개복치 코드 리뷰하기
- 내 코드 예외처리 및 아쉬운 부분 수정
'개발공부 > Python' 카테고리의 다른 글
[파이썬] 간단한 버스 정류장 조회 시스템 만들기 (0) | 2023.04.29 |
---|---|
[파이썬] 간단한 로그인, 회원가입 창 만들기(함수 활용) (0) | 2023.04.26 |
[파이썬] 숫자야구 함수화해서 만들기 (0) | 2023.04.26 |
[파이썬] 60갑자 조합 만들어보기 (0) | 2023.04.24 |
(4.23) 파이썬 예외처리 공부(try except, raise) (0) | 2023.04.23 |