5.python을 이용한 알고리즘 문제(121~마지막)

30 minute read

121. 딕셔너리 항목추가[문제]

# 딕셔너리 항목추가

studentList = []
info = {"이름":"김철수", "수학":100, "국어":32}
studentList.append(info)

info = {"이름":"이만수", "수학":11, "국어":84}
studentList.append(info)

info = {"이름":"박영희", "수학":95, "국어":58}
studentList.append(info)

# 총점 항목 추가하기

studentList[0]["총점"] = studentList[0]["수학"] + studentList[0]["국어"]
# print(studentList)

for i in range(len(studentList)):
    studentList[i]["총점"] = studentList[i]["수학"] + studentList[i]["국어"]
# print(studentList)

# 문제1
# 수학이 꼴등인 학생의 이름 출력
# 정답 : 이만수

# 문제2
# 총점이 높은 순서대로 학생의 이름 출력

# 문제3
# 2등 삭제 후, 전체 출력

정답

# 딕셔너리 항목추가

studentList = []
info = {"이름":"김철수", "수학":100, "국어":32}
studentList.append(info)

info = {"이름":"이만수", "수학":11, "국어":84}
studentList.append(info)

info = {"이름":"박영희", "수학":95, "국어":58}
studentList.append(info)

# 총점 항목 추가하기

studentList[0]["총점"] = studentList[0]["수학"] + studentList[0]["국어"]
# print(studentList)

for i in range(len(studentList)):
    studentList[i]["총점"] = studentList[i]["수학"] + studentList[i]["국어"]

# print(studentList)

# 문제1
# 수학이 꼴등인 학생의 이름 출력
# 정답 : 이만수
min_score = studentList[0]["수학"]
min_idx = 0
for i in range(len(studentList)):
    if min_score > studentList[i]["수학"]:
        min_score = studentList[i]["수학"]
        min_idx = i
# print("수학점수가 꼴등인 학생 =", studentList[min_idx]["이름"])

# 문제2
# 총점이 높은 순서대로 학생의 이름 출력
for i in range(len(studentList)):
    max_tot = studentList[i]["총점"]
    max_idx = i
    for j in range(i, len(studentList)):
        if max_tot < studentList[j]["총점"]:
            max_tot = studentList[j]["총점"]
            max_idx = j
    temp = studentList[i]
    studentList[i] = studentList[max_idx]
    studentList[max_idx] = temp

    print(studentList[i]["이름"])

# 문제3
# 2등 삭제 후, 전체 출력
# 방법1) 함수 사용
# del studentList[1]
# print(studentList)

# 방법2)
del_idx = 1
temp = studentList
studentList = []
for i in range(len(temp)):
    if i != del_idx:
        studentList.append(temp[i])
print(studentList)

122. 1 to 50 딕셔너리[문제] [다시]

# 1 to 50 딕셔너리

import random

nodeList = []

for i in range(25):
    node = {}
    node["front"] = i + 1
    node["back"] = i + 26

    nodeList.append(node)
print(nodeList)

정답

# 1 to 50 딕셔너리

import random

nodeList = []

for i in range(25):
    node = {}
    node["front"] = i + 1
    node["back"] = i + 26

    nodeList.append(node)
# print(nodeList)

# 셔플(shuffle)
for i in range(100):
    r = random.randint(0, 24)

    temp = nodeList[0]["front"]
    nodeList[0]["front"] = nodeList[r]["front"]
    nodeList[r]["front"] = temp

for i in range(100):
    r = random.randint(0, 24)

    temp = nodeList[0]["back"]
    nodeList[0]["back"] = nodeList[r]["back"]
    nodeList[r]["back"] = temp

game_num = 1
while True:
    # 화면 출력
    for i in range(25):
        if nodeList[i]["front"] == 0:
            print("\t", end="")
        else:
            print(nodeList[i]["front"], end="\t")
        if i % 5 == 4:
            print()

    if game_num == 51:
        print("게임 종료")
        break

    # 위치 선택
    idx = int(input("%d의 위치 선택 : " % game_num))
    if game_num == nodeList[idx]["front"]:
        if 1 <= game_num and game_num <= 25:
            nodeList[idx]["front"] = nodeList[idx]["back"]
        else:
            nodeList[idx]["front"] = 0
        game_num += 1

123. 소코반 딕셔너리 [다시]

# 소코반 딕셔너리

ball = "b"
goal = "g"
player = "p"
item = "i"
wall = "w"
road = "r"

# 예시
# node = {"status":"r", "y":0, "x":0}

nodeList = []

for i in range(7):
    temp = []
    for j in range(7):
        node = {}
        node["status"] = "r"
        node["y"] = i
        node["x"] = j
        temp.append(node)
    nodeList.append(temp)
print(nodeList)

for i in range(7):
    for j in range(7):
        if nodeList[i][j]["status"] == "r":
            print("[ ]", end=" ")
    print()

정답

# 소코반 딕셔너리

ball = "b"
goal = "g"
player = "p"
item = "i"
wall = "w"
road = "r"

# 캐릭터의 위치
p_y = 0
p_x = 0

# 공의 위치
b_y = 0
b_x = 0

# 골의 위치
g_y = 0
g_x = 0

# 예시
# node = {"status":"r", "y":0, "x":0}
import random

nodeList = []

for i in range(7):
    temp = []
    for j in range(7):
        node = {}
        node["status"] = road
        node["y"] = i
        node["x"] = j
        temp.append(node)
    nodeList.append(temp)
# print(nodeList)

# 벽 설치
wall_count = int(input("벽을 몇 개 설치하시겠습니까?"))
while wall_count != 0:
    r_y = random.randint(0, 6)
    r_x = random.randint(0, 6)

    if nodeList[r_y][r_x]["status"] == road:
        nodeList[r_y][r_x]["status"] = wall
        wall_count -= 1

# 공 설치
while True:
    r_y = random.randint(0, 6)
    r_x = random.randint(0, 6)

    if nodeList[r_y][r_x]["status"] == road:
        nodeList[r_y][r_x]["status"] = ball
        b_y = r_y
        b_x = r_x
        break

# 골대 설치
while True:
    r_y = random.randint(0, 6)
    r_x = random.randint(0, 6)

    if nodeList[r_y][r_x]["status"] == road:
        nodeList[r_y][r_x]["status"] = goal
        g_y = r_y
        g_x = r_x
        break

# 캐릭터 설치
while True:
    r_y = random.randint(0, 6)
    r_x = random.randint(0, 6)

    if nodeList[r_y][r_x]["status"] == road:
        nodeList[r_y][r_x]["status"] = player
        p_y = r_y
        p_x = r_x
        break


# 게임 시작
while True:
    for i in range(7):
        # 화면 출력
        for j in range(7):
            if nodeList[i][j]["status"] == road:
                print("__", end=" ")
            elif nodeList[i][j]["status"] == wall:
                print("[]", end=" ")
            elif nodeList[i][j]["status"] == ball:
                print("○", end=" ")
            elif nodeList[i][j]["status"] == goal:
                print("◎", end=" ")
            elif nodeList[i][j]["status"] == player:
                print("옷", end=" ")
        print()
    print()

    # 공을 골대에 넣으면 게임종료
    if b_y == g_y and b_x == g_x:
        print("게임종료")
        break

    # 위치 입력
    move = int(input("상(1), 하(2), 좌(3), 우(4) : "))

    yy = p_y
    xx = p_x

    if move == 1:
        yy = yy - 1
    elif move == 2:
        yy = yy + 1
    elif move == 3:
        xx = xx - 1
    elif move == 4:
        xx = xx + 1

    if 7 <= yy or yy < 0:
        continue
    if 7 <= xx or xx < 0:
        continue
    if nodeList[yy][xx]["status"] != road and nodeList[yy][xx]["status"] != ball:
        continue

    # 공을 만나면
    if nodeList[yy][xx]["status"] == ball:
        yyy = b_y
        xxx = b_x

        if move == 1:
            yyy = yyy - 1
        elif move == 2:
            yyy = yyy + 1
        elif move == 3:
            xxx = xxx - 1
        elif move == 4:
            xxx = xxx + 1

        if 7 <= yyy or yyy < 0:
            continue
        if 7 <= xxx or xxx < 0:
            continue
        if nodeList[yyy][xxx]["status"] == wall:
            continue

        nodeList[b_y][b_x]["status"] = road
        b_y = yyy
        b_x = xxx
        nodeList[b_y][b_x]["status"] = ball

    nodeList[p_y][p_x]["status"] = road
    p_y = yy
    p_x = xx
    nodeList[p_y][p_x]["status"] = player

주의사항 및 Tip

TypeError: string indices must be integers

이 오류는 문자열 인덱스는 정수 여야합니다. 이다

124. 리턴이 없는 함수[문제]

# ex119_문제.py

# 문제 1) 1부터 5까지의 합을 출력하는 함수

# 문제 2) x부터 y까지의 합을 출력하는 함수

# 문제 3) 정수 3개를 입력받아 최대값을 출력하는 함수

# 문제 4) 리스트 nums를 전달받아 최대값을 출력해주는 함수
nums = [10, 87, 23, 19, 3]

# 문제 5) 리스트 nums를 전달받아,
#         인덱스 2개를 입력받고, 해당 위치의 값을 교체해주는 함수

정답

# ex119_정답.py

# 문제 1) 1부터 5까지의 합을 출력하는 함수
# 설계 1)
def tot():
    tot = 0

    i = 1
    while i <= 5:
        tot += i
        i += 1
    print("1부터 5까지의 합 = %d" % tot)
# 호출 1)
tot()

#-------------------------------------------------------------

# 문제 2) x부터 y까지의 합을 출력하는 함수
# 설계 2)
def tot(x, y):
    tot = 0

    i = x
    while i <= y:
        tot += i
        i += 1
    print("%d부터 %d까지의 합 = %d" % (x, y, tot))
# 호출 2)
tot(3, 5)

#-------------------------------------------------------------

# 문제 3) 정수 3개를 입력받아 최대값을 출력하는 함수
# 설계 3)
def max_num():
    x = int(input("x = "))
    y = int(input("y = "))
    z = int(input("z = "))

    num = x
    if num < y:
        num = y
    if num < z:
        num = z
    print("최대값 =", num)
# 호출 3)
max_num()

#-------------------------------------------------------------

# 문제 4) 리스트 scores를 전달받아 1등 성적을 출력해주는 함수
# 설계 4)
def max_num(nums):
    num = 0
    i = 0
    while i < len(scores):
        if num < scores[i]:
            num = scores[i]
        i += 1
    print("1등 성적 =", num)
# 호출 4)
scores = [10, 87, 23, 19, 3]
max_num(scores)

#-------------------------------------------------------------

# 문제 5) 리스트 nums를 전달받아,
#         인덱스 2개를 입력받고, 해당 위치의 값을 교체해주는 함수
# 설계 5)
def change_num(nums):
    idx1 = int(input("인덱스1 입력 : "))
    idx2 = int(input("인덱스2 입력 : "))

    temp = nums[idx1]
    nums[idx1] = nums[idx2]
    nums[idx2] = temp
# 호출 5)
nums = [10, 20, 30, 40, 50]

print("함수 호출 전 =", nums)

change_num(nums)

print("함수 호출 후 =", nums)

125. 리턴이 있는 함수[문제] [다시,문제 3번만 다시 풀어보자]

# ex120_문제.py

nums = [10, 20, 30, 40, 50]

# 문제 1) 전체 합을 리턴해주는 함수
# 설계 1)
# 호출 1)

# 문제 2) 4의 배수의 합을 리턴해주는 함수
# 설계 2)
# 호출 2)

# 문제 3) 4의 배수만 리스트 타입으로 리턴해주는 함수
# 설계 3)
# 호출 3)

정답

# ex120_정답.py

nums = [10, 20, 30, 40, 50]

# 문제 1)
# 리스트 nums를 전달받아
# 전체 합을 리턴해주는 함수
# 설계 1)
def get_tot(nums):
    tot = 0

    i = 0
    while i < len(nums):
        tot += nums[i]
        i += 1
    return tot
# 호출 1)
result = get_tot(nums)
print("전체 합 =", result)

# 문제 2)
# 리스트 nums를 전달받아
# 4의 배수의 합을 리턴해주는 함수
# 설계 2)
def get_tot(nums):
    tot = 0

    i = 0
    while i < len(nums):
        if nums[i] % 4 == 0:
            tot += nums[i]
        i += 1
    return tot
# 호출 2)
result = get_tot(nums)
print("4의 배수의 합 =", result)

# 문제 3)
# 리스트 nums를 전달받아
# 4의 배수만 리스트 타입으로 리턴해주는 함수
# 설계 3)
def get_list(nums):
    rs = []

    i = 0
    while i < len(nums):
        if nums[i] % 4 == 0:
            rs.append(nums[i])
        i += 1
    return rs
# 호출 3)
result = get_list(nums)
print(result)

주의사항 및 Tip

리턴이 있는 함수는 그 리턴되는 값을 받기위해 변수가 필요하다 [] 배열 즉 List를 리턴할수도있다

126. 학생성적관리[문제] [다시, 2번째 문제만]

# ex122_문제.py

import random

# 문제 1) score 리스트에 1~100사이의 랜덤 값 5개를 저장해주는 함수
# 설계 1)

# 문제 2) 성적이 60점 이상이면 합격.
#         합격생들의 방번호(index)와 성적을 리턴해주는 함수
#         [ [인덱스, 성적]]
# 설계 2)

# 문제 3) 1등 학생의 방번호(index)를 리턴해주는 함수
# 설계 3)

#--------------------------------------------------------------------

# 학생성적관리
score = []
# 호출 1)
# 호출 2)
# 호출 3)

정답

# ex122_정답.py

import random

# 문제 1) score 리스트에 1~100사이의 랜덤 값 5개를 저장해주는 함수
# 설계 1)
def test1(score):
    i = 0
    while i < 5:
        r = random.randint(1, 100)
        score.append(r)

        i += 1

# 문제 2) 성적이 60점 이상이면 합격.
#         합격생들의 방번호(index)와 성적을 리턴해주는 함수
#         [ [인덱스, 성적]]
# 설계 2)
def test2(score):
    info = []
    i = 0
    while i < len(score):
        if score[i] >= 60:
            temp = []
            temp.append(i)
            temp.append(score[i])

            info.append(temp)
        i += 1
    return info

def print_info(info):
    i = 0
    while i < len(info):
        print(info[i][0], ":", info[i][1])
        i += 1

# 문제 3) 1등 학생의 방번호(index)를 리턴해주는 함수
# 설계 3)
def test3(score):
    index = 0
    max_score = 0
    i = 0
    while i < len(score):
        if max_score < score[i]:
            max_score = score[i]
            index = i
        i += 1
    return index

#--------------------------------------------------------------------

# 학생성적관리
score = []

# 호출 1)
test1(score)
print(score)

# 호출 2)
info = test2(score)
print_info(info)

# 호출 3)
index = test3(score)
print(index)

127. 영수증 출력[문제]

# ex124_문제.py

# 영수증 출력하기 : 함수
# 메뉴를 주문 받아 영수증을 출력한다.
# 출력내용은 각 메뉴의 주문 수량과 총 금액 및 잔돈을 표시한다.

def show_menu(p1, p2, p3):
    print("=== 롯데리아 ===")
    print("1.치즈버거 : %d원" % p1)
    print("2.새우버거 : %d원" % p2)
    print("3.감자튀김 : %d원" % p3)
    print("4.계산하기")

#-----------------------------------------
p1 = 2500
p2 = 3000
p3 = 1500
cnt1 = 0
cnt2 = 0
cnt3 = 0
money = 10000

while True:
    show_menu(p1, p2, p3)

    sel = int(input("메뉴 선택 : "))
    if sel == 1:
        pass
    elif sel == 2:
        pass
    elif sel == 3:
        pass
    elif sel == 4:
        break

정답

# ex124_정답.py

# 영수증 출력하기 : 함수
# 메뉴를 주문 받아 영수증을 출력한다.
# 출력내용은 각 메뉴의 주문 수량과 총 금액 및 잔돈을 표시한다.

def show_menu(p1, p2, p3):
    print("=== 롯데리아 ===")
    print("1.치즈버거 : %d원" % p1)
    print("2.새우버거 : %d원" % p2)
    print("3.감자튀김 : %d원" % p3)
    print("4.계산하기")

def sel1(cnt1):
    cnt1 += 1
    return cnt1

def sel2(cnt2):
    cnt2 += 1
    return cnt2

def sel3(cnt3):
    cnt3 += 1
    return cnt3

def sel4(p1, p2, p3, cnt1, cnt2, cnt3, money):
    tot = p1 * cnt1 + p2 * cnt2 + p3 * cnt3
    print("총 금액 =", tot)

    charge = money - tot
    if charge >= 0:
        print("=== 롯데리아 영수증===")
        print("1.치즈버거 : %d개" % cnt1)
        print("2.새우버거 : %d개" % cnt2)
        print("3.감자튀김 : %d개" % cnt3)
        print("총금액 : %d원" % tot)
        print("잔돈 : %d원" % charge)
    else:
        print("돈이 부족합니다.")
    return money

#-----------------------------------------
p1 = 2500
p2 = 3000
p3 = 1500
cnt1 = 0
cnt2 = 0
cnt3 = 0
money = 10000

while True:
    show_menu(p1, p2, p3)

    sel = int(input("메뉴 선택 : "))
    if sel == 1:
        cnt1 = sel1(cnt1)
    elif sel == 2:
        cnt2 = sel2(cnt2)
    elif sel == 3:
        cnt3 = sel3(cnt3)
    elif sel == 4:
        money = sel4(p1, p2, p3, cnt1, cnt2, cnt3, money)
        break

128. OMR카드[문제]

# ex125_문제.py

# OMR카드
# 1. 리스트 answer는 시험문제의 정답지이다.
# 2. answer와 hgd 값을 비교해 정오표를 출력한다.
# 3. 한 문제당 20점이다.
# 예)
# answer = [1, 3, 4, 2, 5]
# hgd    = [1, 1, 4, 4, 3]
# 정오표 = [O, X, O, X, X]
# 성적   = 40점

# 실행 함수
def run():
    score = 0

    answer = [1, 3, 4, 2, 5]
    hgd = [1, 1, 4, 4, 3]

#-----------------------------------
run()

정답

# ex125_정답.py

# OMR카드
# 1. 리스트 answer는 시험문제의 정답지이다.
# 2. answer와 hgd 값을 비교해 정오표를 출력한다.
# 3. 한 문제당 20점이다.
# 예)
# answer = [1, 3, 4, 2, 5]
# hgd    = [1, 1, 4, 4, 3]
# 정오표 = [O, X, O, X, X]
# 성적   = 40점

# 성적확인 함수
def check_score(answer, hgd):
    count = 0

    i = 0
    while i < len(answer):
        if answer[i] == hgd[i]:
            count += 1
        i += 1
    return count

# 정오표 출력 함수
def print_score(answer, hgd):
    print("[", end="")
    i = 0
    while i < len(answer):
        if answer[i] == hgd[i]:
            print("O", end="")
        else:
            print("X", end="")

        if i != len(answer) - 1:
            print(end=", ")
        i += 1
    print("]")

# 실행 함수
def run():
    score = 0

    answer = [1, 3, 4, 2, 5]
    hgd = [1, 1, 4, 4, 3]

    print(answer)
    print(hgd)

    print_score(answer, hgd)

    score = check_score(answer, hgd) * 20
    print("성적 = %d점" % score)

#-----------------------------------
run()

129. 영화관 좌석예매[문제]

# ex126_문제.py

# 영화관 좌석예매
# 1. 사용자로부터 좌석번호(index)를 입력받아 예매하는 시스템이다.
# 2. 예매가 완료되면 해당 좌석 값을 1로 변경한다.
# 3. 이미 예매가 완료된 좌석은 재구매할 수 없다.
# 4. 한 좌석당 예매 가격은 12000원이다.
# 5. 프로그램 종료 후, 해당 영화관의 총 매출액을 출력한다.
# 예)
# seat = 0 0 0 0 0 0 0
#
# 좌석선택 : 1
# seat = 0 1 0 0 0 0 0
#
# 좌석선택 : 3
# seat = 0 1 0 1 0 0 0
#
# 좌석선택 : 3
# seat = 0 1 0 1 0 0 0
# 이미 예매가 완료된 자리입니다.
#-----------------------------------
# 매출액 : 24000원

# 실행 함수
def run():
    total = 0   # 총 매출액
    seat = [0, 0, 0, 0, 0, 0, 0]
    while True:
        print("[1]예매하기")
        print("[2]종료하기")

        sel = int(input("메뉴를 선택하세요 : "))
        if sel == 1:
            pass
        else:
            break
#-----------------------------------
run()

정답

# ex126_정답.py

# 영화관 좌석예매
# 1. 사용자로부터 좌석번호(index)를 입력받아 예매하는 시스템이다.
# 2. 예매가 완료되면 해당 좌석 값을 1로 변경한다.
# 3. 이미 예매가 완료된 좌석은 재구매할 수 없다.
# 4. 한 좌석당 예매 가격은 12000원이다.
# 5. 프로그램 종료 후, 해당 영화관의 총 매출액을 출력한다.
# 예)
# seat = 0 0 0 0 0 0 0
#
# 좌석선택 : 1
# seat = 0 1 0 0 0 0 0
#
# 좌석선택 : 3
# seat = 0 1 0 1 0 0 0
#
# 좌석선택 : 3
# seat = 0 1 0 1 0 0 0
# 이미 예매가 완료된 자리입니다.
#-----------------------------------
# 매출액 : 24000원

# 좌석 현황 출력 함수
def print_seat(seat):
    print("[MEGA MOVIE]")
    i = 0
    while i < len(seat):
        if seat[i] == 0:
            print("[ ]", end="")
        elif seat[i] == 1:
            print("[O]", end="")
        i += 1
    print()

# 좌석 선택 함수
def select_seat(seat):
    print_seat(seat)

    index = int(input("좌석번호를 입력하세요[1~7] : "))
    if seat[index] == 0:
        seat[index] = 1
    else:
        print("이미 예매가 완료된 자리입니다.")

# 매출 계산 함수
def tot(seat):
    count = 0
    i = 0
    while i < len(seat):
        if seat[i] == 1:
            count += 1
        i += 1
    return count * 12000

# 실행 함수
def run():
    total = 0   # 총 매출액
    seat = [0, 0, 0, 0, 0, 0, 0]

    while True:
        print("[1]예매하기")
        print("[2]종료하기")

        sel = int(input("메뉴를 선택하세요 : "))
        if sel == 1:
            select_seat(seat)
        else:
            total = tot(seat)
            print("총 매출액 : %d원" % total)
            break

#-----------------------------------
run()

130. 숫자이동[문제] [다시]

# ex127_문제.py

# 숫자이동
# 1. 숫자2는 캐릭터이다.
# 2. 숫자1을 입력하면, 캐릭터가 왼쪽으로
#    숫자2를 입력하면, 캐릭터가 오른쪽으로 이동한다.
# 3. 단, 좌우 끝에 도달했을 때, 예외처리를 해야한다.

# 캐릭터의 위치 저장 함수
def set_player(game):
    index = 0
    i = 0
    while i < 7:
        if game[i] == 2:
            index = i
        i = i + 1
    return index

# 실행 함수
def run():
    game = [0, 0, 2, 0, 0, 0, 0]

    player = set_player(game)

    while True:
        move = int(input("좌(1), 우(2) 입력 : "))
        if move == 1:
            pass
        elif move == 2:
            pass
#-----------------------------------
run()

정답

# ex127_정답.py

# 숫자이동
# 1. 숫자2는 캐릭터이다.
# 2. 숫자1을 입력하면, 캐릭터가 왼쪽으로
#    숫자2를 입력하면, 캐릭터가 오른쪽으로 이동한다.
# 3. 단, 좌우 끝에 도달했을 때, 예외처리를 해야한다.

# 게임화면 출력 함수
def print_game(game):
    i = 0
    while i < len(game):
        if game[i] == 0:
            print("__", end="")
        elif game[i] == 2:
            print("옷", end="")
        i += 1
    print()
    print()

# 캐릭터의 위치 저장 함수
def set_player(game):
    index = 0
    i = 0
    while i < 7:
        if game[i] == 2:
            index = i
        i = i + 1
    return index

# 실행 함수
def run():
    game = [0, 0, 2, 0, 0, 0, 0]

    player = set_player(game)

    while True:
        print_game(game)

        move = int(input("좌(1), 우(2) 입력 : "))
        if move == 1:
            if player != 0:
                game[player] = 0
                player -= 1
                game[player] = 2
        elif move == 2:
            if player != len(game) - 1:
                game[player] = 0
                player += 1
                game[player] = 2

#-----------------------------------
run()


def set_player(game):
    index = 0
    i = 0
    while i < 7:
        if game[i] == 2:
            player = i
        i = i + 1
    return player


def move_left(game,player) :


    if player != 0 :
        game[player]=0
        player-=1
        game[player]=2

def move_right(game,player) :


    if player != 6 :

        game[player]=0
        player+=1
        game[player]=2


# 실행 함수
def run():
    game = [0, 0, 2, 0, 0, 0, 0]

    while True:
        move = int(input("좌(1), 우(2) 입력 : "))
        if move == 1:

            player = set_player(game)
            move_left(game,player)

        elif move == 2:

            player = set_player(game)
            move_right(game,player)


        print(game)
#-----------------------------------
run()

주의사항 및 Tip

아래의 코드가 동작하지 않았던 이유는 내가 오른쪽 왼쪽을 누를때마다 player의 위치를 알아야하는데, 아래의 코드는 player의 위치가 같은체 진행하기 때문이다. 따라서 두번째 방법처럼 버튼을 누를때마다 player의 위치를 할당해야한다.


def set_player(game):
    index = 0
    i = 0
    while i < 7:
        if game[i] == 2:
            player = i
        i = i + 1
    return player


def move_left(game,player) :


    if player != 0 :
        game[player]=0
        player-=1
        game[player]=2

def move_right(game,player) :


    if player != 6 :

        game[player]=0
        player+=1
        game[player]=2

# 실행 함수
def run():
    game = [0, 0, 2, 0, 0, 0, 0]

    player = set_player(game)

    while True:
        move = int(input("좌(1), 우(2) 입력 : "))
        if move == 1:

            move_left(game,player)
        elif move == 2:
            move_right(game,player)

        print(game)
#-----------------------------------
run()

131. 학생성적관리 프로그램(1단계)[문제]

# 학생성적관리 프로그램

class School:
    scores = [87, 100, 11, 72, 92]

mega = School()

# 예)
size = len(mega.scores)
print("size =", size)
for i in range(size):
    print(mega.scores[i])

# 문제 1) 전체 합 출력
# 정답 1) 362
# 문제 2) 4의 배수의 합 출력
# 정답 2) 264
# 문제 3) 4의 배수의 개수 출력
# 정답 3) 3
# 문제 4) 짝수의 개수 출력
# 정답 4) 3

정답

# 학생성적관리 프로그램

class School:
    scores = [87, 100, 11, 72, 92]

mega = School()

# 예)
size = len(mega.scores)
print("size =", size)
for i in range(size):
    print(mega.scores[i])

# 문제 1) 전체 합 출력
# 정답 1) 362
tot = 0
for i in range(size):
    tot += mega.scores[i]
print("tot =", tot)

# 문제 2) 4의 배수의 합 출력
# 정답 2) 264
tot = 0
for i in range(size):
    if mega.scores[i] % 4 == 0:
        tot += mega.scores[i]
print("tot =", tot)

# 문제 3) 4의 배수의 개수 출력
# 정답 3) 3
count = 0
for i in range(size):
    if mega.scores[i] % 4 == 0:
        count += 1
print("count =", count)

# 문제 4) 짝수의 개수 출력
# 정답 4) 3
count = 0
for i in range(size):
    if mega.scores[i] % 2 == 0:
        count += 1
print("count =", count)

주의사항 및 Tip

함수를 선언하기 위해서는 함수를 받을 변수가 필요하다

132. 학생성적관리 프로그램(2단계)[문제]

class School:
    hakbuns = [1001, 1002, 1003, 1004, 1005]
    scores = [0, 0, 0, 0, 0]

# 문제1) scores배열에 1~100점 사이의 정수를 5개 저장
# 예   1) 87, 11, 92, 14, 47

# 문제2) 전교생의 총점과 평균 출력
# 예   2) 총점(251) 평균(50.2)

# 문제3) 성적이 60점 이상이면 합격. 합격생 수 출력
# 예   3) 2명

# 문제4) 인덱스를 입력받아 성적 출력
# 정답4) 인덱스 입력 : 1    성적 : 11점

# 문제5) 성적을 입력받아 인덱스 출력
# 정답5) 성적 입력 : 11        인덱스 : 1

# 문제6) 학번을 입력받아 성적 출력
# 정답6) 학번 입력 : 1003    성적 : 45점

# 문제7) 학번을 입력받아 성적 출력
#         단, 없는학번 입력 시 예외처리
# 예   7)
# 학번 입력 : 1002        성적 : 11점
# 학번 입력 : 1000        해당학번은 존재하지 않습니다.

# 문제8) 1등학생의 학번과 성적 출력
# 정답8) 1004번(98점)

정답

import random

class School:
    hakbuns = [1001, 1002, 1003, 1004, 1005]
    scores = [0, 0, 0, 0, 0]

mega = School()

size = len(mega.hakbuns)
# 문제1) scores배열에 1~100점 사이의 정수를 5개 저장
# 예   1) 87, 11, 92, 14, 47
for i in range(size):
    r = random.randint(1, 100)
    mega.scores[i] = r
print(mega.scores)

# 문제2) 전교생의 총점과 평균 출력
# 예   2) 총점(251) 평균(50.2)
tot = 0
for i in range(size):
    tot += mega.scores[i]
avg = tot / size
print("총점 =", tot)
print("평균 =", avg)

# 문제3) 성적이 60점 이상이면 합격. 합격생 수 출력
# 예   3) 2명
count = 0
for i in range(size):
    if mega.scores[i] >= 60:
        count += 1
print("count =", count)

# 문제4) 인덱스를 입력받아 성적 출력
# 정답4) 인덱스 입력 : 1    성적 : 11점
idx = int(input("인덱스 입력 : "))
for i in range(size):
    if i == idx:
        print(mega.scores[i])

# 문제5) 성적을 입력받아 인덱스 출력
# 정답5) 성적 입력 : 11        인덱스 : 1
score = int(input("성적 입력 : "))
for i in range(size):
    if mega.scores[i] == score:
        print(i)

# 문제6) 학번을 입력받아 성적 출력
# 정답6) 학번 입력 : 1003    성적 : 45점
hakbun = int(input("학번 입력 : "))
for i in range(size):
    if mega.hakbuns[i] == hakbun:
        print(mega.scores[i])

# 문제7) 학번을 입력받아 성적 출력
#        단, 없는학번 입력 시 예외처리
# 예   7)
# 학번 입력 : 1002        성적 : 11점
# 학번 입력 : 1000        해당학번은 존재하지 않습니다.
hakbun = int(input("학번 입력 : "))
check = -1
for i in range(size):
    if mega.hakbuns[i] == hakbun:
        check = i
if check == -1:
    print("해당학번은 존재하지 않습니다.")
else:
    print(mega.scores[check])

# 문제8) 1등학생의 학번과 성적 출력
# 정답8) 1004번(98점)
max_score = 0
max_idx = 0
for i in range(size):
    if max_score < mega.scores[i]:
        max_score = mega.scores[i]
        max_idx = i
print("%d번(%d점)" % (mega.hakbuns[max_idx], mega.scores[max_idx]))

133. OMR카드[문제]

# OMR카드
# 1. 리스트 answer는 시험문제의 정답지이다.
# 2. 리스트 hgd에 1~5 사이의 랜덤 숫자 5개를 저장한다.
# 3. answer와 hgd의 값을 비교해 정오표를 출력한다.
# 4. 한 문제당 20정으로 성적도 함께 출력한다.

import random

class ScoreMng:
    answer = [1, 3, 4, 2, 5]
    hgd = []

    cnt = 0          # 정답을 맞춘 개수
    score = 0        # 성적

정답

# OMR카드
# 1. 리스트 answer는 시험문제의 정답지이다.
# 2. 리스트 hgd에 1~5 사이의 랜덤 숫자 5개를 저장한다.
# 3. answer와 hgd의 값을 비교해 정오표를 출력한다.
# 4. 한 문제당 20정으로 성적도 함께 출력한다.

import random

class ScoreMng:
    answer = [1, 3, 4, 2, 5]
    hgd = []

    cnt = 0          # 정답을 맞춘 개수
    score = 0        # 성적

#------------------------------------------
sm = ScoreMng()

for i in range(5):
    r = random.randint(1, 5)
    sm.hgd.append(r)

for i in range(5):
    print(sm.answer[i], end=" ")
print()

for i in range(5):
    print(sm.hgd[i], end=" ")
print()

for i in range(5):
    if sm.answer[i] == sm.hgd[i]:
        sm.cnt += 1
        print("O", end=" ")
    else:
        print("X", end=" ")
print()

sm.score = sm.cnt * 20
print("성적 =", sm.score)

134. 숫자이동(3단계)[문제] [다시, 기존답은 첫번째와 맨끝에 1이 있을때 그냥 넘어가지만 , 내가 만든 답은 뿌실수 있다.]

# 숫자이동[3단계]
# 1. 숫자2는 캐릭터이다.
# 2. 숫자1을 입력하면 캐릭터가 왼쪽으로
#    숫자2를 입력하면 캐릭터가 오른쪽으로 이동한다.
# 3. 숫자 1은 벽이다. 벽을 만나면 이동할 수 없다.
# 4. 단, 숫자3을 입력하면 벽을 격파할 수 있다.
# 5. 좌우 끝에 도달해도 계속 반대편으로 이동도 가능하다.

class Game:
    map = [0, 0, 1, 0, 2, 0, 0, 1, 0]

정답

# 1. 숫자2는 캐릭터이다.
# 2. 숫자1을 입력하면 캐릭터가 왼쪽으로
#    숫자2를 입력하면 캐릭터가 오른쪽으로 이동한다.
# 3. 숫자 1은 벽이다. 벽을 만나면 이동할 수 없다.
# 4. 단, 숫자3을 입력하면 벽을 격파할 수 있다.
# 5. 좌우 끝에 도달해도 계속 반대편으로 이동도 가능하다.

class Game:
    map = [1, 0, 1, 0, 2, 0, 0, 1, 1]


#캐릭터 위치 파악

g = Game()
i = 0
lenth = len(g.map)

while i < lenth :

    if g.map[i] == 2 :

        player = i

    i+=1


run = True

while run :

    num = int(input("숫자 1을 입력하면 왼쪽, 숫자 2를 입력하면 오른쪽"))

    if num == 1 :


        if player != 0 :


            if g.map[player-1] == 1 :

                destroy = int(input("숫자 3을 입력하면 벽을 격파하실수 있습니다"))

                if destroy != 3 :

                    continue

        g.map[player] = 0
        player-=1

        if player < 0 :

            player = 8

            if g.map[player] == 1 :

                destroy = int(input("숫자 3을 입력하면 벽을 격파하실수 있습니다"))

                if destroy != 3 :

                    continue

        g.map[player] =2

    if num == 2:


            if player != 8 :

                if g.map[player+1] == 1 :

                    destroy = int(input("숫자 3을 입력하면 벽을 격파하실수 있습니다"))

                    if destroy != 3 :

                        continue


            g.map[player] = 0
            player+=1

            if player == 9:

                player = 0

                if g.map[player] == 1 :

                    destroy = int(input("숫자 3을 입력하면 벽을 격파하실수 있습니다"))

                if destroy != 3:

                    continue

            g.map[player] =2

    print(g.map)

135. 영화관 좌석예매[문제]

# 영화관 좌석예매
# 1. 사용자로부터 좌석번호(index)를 입력받아 예매하는 시스템이다.
# 2. 예매가 완료되면 해당 좌석 값을 1로 변경한다.
# 3. 이미 예매가 완료된 좌석은 재구매할 수 없다.
# 4. 한 좌석당 예매 가격은 12000원이다.

class MegaBox:
    seat = [0 for i in range(7)]
    money = 0

while True:
    print("[1]좌석예매")
    print("[2]종료하기")

    sel = int(input("메뉴 선택 : "))

    if sel == 1:
        pass
    elif sel == 2:
        break

정답

# 영화관 좌석예매
# 1. 사용자로부터 좌석번호(index)를 입력받아 예매하는 시스템이다.
# 2. 예매가 완료되면 해당 좌석 값을 1로 변경한다.
# 3. 이미 예매가 완료된 좌석은 재구매할 수 없다.
# 4. 한 좌석당 예매 가격은 12000원이다.

class MegaBox:
    seat = [0 for i in range(7)]
    money = 0

#----------------------------------------------------

mb = MegaBox()

count = 0
while True:

    for i in range(len(mb.seat)):
        if mb.seat[i] == 0:
            print("[ ]", end="")
        else:
            print("[O]", end="")
    print()

    print("[1]좌석예매")
    print("[2]종료하기")

    sel = int(input("메뉴 선택 : "))

    if sel == 1:
        idx = int(input("좌석번호 선택(0 ~ 6) : "))
        if mb.seat[idx] == 0:
            mb.seat[idx] = 1
            count += 1
        else:
            print("이미 선택한 자리입니다.")
    elif sel == 2:
        mb.money = count * 12000
        print(mb.money)
        break

136. 기억력 게임[문제]

# 기억력 게임 : 클래스 + 변수
# 1. front 배열 카드 10장을 섞는다.
# 2. front 배열에서 같은 카드를 골라 카드의 위치를 입력한다.
# 3. 선택한 2장의 카드가 같은 카드이면, back 배열에 표시한다.
# 4. 모든 카드가 뒤집히면(back배열의 0이 사라지면) 게임은 종료된다.

class MemoryGame:
    front = [1, 1, 2, 2, 3, 3, 4, 4, 5, 5]
    back = [0 for i in range(10)]

    cnt = 0

정답

# 기억력 게임 : 클래스 + 변수
# 1. front 배열 카드 10장을 섞는다.
# 2. front 배열에서 같은 카드를 골라 카드의 위치를 입력한다.
# 3. 선택한 2장의 카드가 같은 카드이면, back 배열에 표시한다.
# 4. 모든 카드가 뒤집히면(back배열의 0이 사라지면) 게임은 종료된다.

import random

class MemoryGame:
    front = [1, 1, 2, 2, 3, 3, 4, 4, 5, 5]
    back = [0 for i in range(10)]

    cnt = 0

#-------------------------------------------------
mg = MemoryGame()

# 셔플(shuffle)
for i in range(len(mg.front)):
    r = random.randint(0, len(mg.front) - 1)

    temp = mg.front[0]
    mg.front[0] = mg.front[r]
    mg.front[r] = temp

while True:
    print(mg.front)
    print(mg.back)

    if mg.cnt == 5:
        print("게임종료")
        break

    idx1 = int(input("인덱스1 입력 : "))
    idx2 = int(input("인덱스2 입력 : "))

    if mg.front[idx1] == mg.front[idx2]:
        mg.back[idx1] = mg.front[idx1]
        mg.back[idx2] = mg.front[idx2]
        mg.cnt += 1

137. 당첨복권 1셋트[문제] [다시 , 당첨복권의 조건을 잘 보기 , 그전 당첨복권 문제와 차이점이 뭔지 알기, 그전 방식으로 해도 같은 결과값 나옴]

# 당첨복권 1셋트
# 1. 3이 연속으로 3번 등장하면 당첨복권이다.
# 2. 랜덤으로 5개의 복권을 생성하되,
#    당첨복권은 한 개만 생성되도록 설정한다.

import random

lotto_set = [
    [0, 0, 0, 0, 0, 0, 0],
    [0, 0, 0, 0, 0, 0, 0],
    [0, 0, 0, 0, 0, 0, 0],
    [0, 0, 0, 0, 0, 0, 0],
    [0, 0, 0, 0, 0, 0, 0]   ]

정답

# 당첨복권 1셋트
# 1. 3이 연속으로 3번 등장하면 당첨복권이다.
# 2. 랜덤으로 5개의 복권을 생성하되,
#    당첨복권은 한 개만 생성되도록 설정한다.

import random

lotto_set = [
    [0, 0, 0, 0, 0, 0, 0],
    [0, 0, 0, 0, 0, 0, 0],
    [0, 0, 0, 0, 0, 0, 0],
    [0, 0, 0, 0, 0, 0, 0],
    [0, 0, 0, 0, 0, 0, 0]   ]

win = -1
i = 0
while i < len(lotto_set):
    for j in range(len(lotto_set[i])):
        r = random.randint(0, 1)

        if r == 1:
            lotto_set[i][j] = 3
        else:
            lotto_set[i][j] = 0

    check = -1
    cnt = 0
    for j in range(len(lotto_set[i])):
        if lotto_set[i][j] == 3:
            cnt += 1
        else:
            cnt = 0
        if cnt == 3:
            check = 1

    # 당첨복권이 처음 발생했을 때
    if check == 1 and win == -1:
        win = 1
    # 당첨복권이 두번째 발생했을 때
    elif check == 1 and win == 1:
        i -= 1
    # 당첨복권이 한번도 발생하지 않았을 때
    elif check == -1 and win == -1:
        i -= 1
    i += 1

for i in range(len(lotto_set)):
    for j in range(len(lotto_set[i])):
        print(lotto_set[i][j], end=" ")
    print()

138. 클래스와 메서드 기본[문제]

class Ex01:
    def test1(self):
        pass
    def test2(self):
        pass

e = Ex01()
# 문제 1) 1부터 5까지의 합을 출력하는 메서드
e.test1()

# 문제 2) 정수 3개를 입력받아 최대값을 출력하는 메서드
e.test2()

정답

class Ex01:
    def setNum(self):
        self.num = 10

    def test1(self):
        tot = 0
        for i in range(1, 6):
            tot += i
        print("1부터 5까지의 합 =", tot)

    def test2(self):
        lst = []
        for i in range(3):
            num = int(input("정수 입력 : "))
            lst.append(num)

        max_num = 0
        for i in range(3):
            if max_num < lst[i]:
                max_num = lst[i]
        print("최대값 =", max_num)

e = Ex01()

# 문제 1) 1부터 5까지의 합을 출력하는 메서드
e.test1()

# 문제 2) 정수 3개를 입력받아 최대값을 출력하는 메서드
e.test2()

주의사항 및 Tip

메서드와 함수의 차이점을 두기위해 메서드는 self라는 매개변수를 가지며, 클래스변수를 사용하기 위해서는 이 self를 무조건 사용해야한다 클래스의 메소드에는 self라는 매개변수가 있지만 , 사용할때는 self 매개변수를 넣지 않는다.

139. 클래스와 메서드 연습문제(1단계)[문제]

class Ex02:

    def test1(self, x, y):
        pass

    def test2(self, lst):
        pass

    def test3(self, lst, x, y):
        pass

e = Ex02()

# 문제 1) x부터 y까지의 합을 출력하는 메서드
x = 1
y = 10
e.test1(x, y)

# 문제 2) lst를 전달받아 최대값을 출력하는 메서드
lst = [87, 100, 35, 12, 46]
e.test2(lst)

# 문제 3) lst를 전달받아 인덱스 2개를 입력받고, 해당 위치의 값을 교체하는 메서드
idx1 = 1
idx2 = 4
e.test3(lst, idx1, idx2)

정답

class Ex02:

    def test1(self, x, y):
        tot = 0
        for i in range(x, y+1):
            tot += i
        print("%d부터 %d의 합 = %d" % (x, y, tot))

    def test2(self, lst):
        max_num = 0
        for i in range(len(lst)):
            if max_num < lst[i]:
                max_num = lst[i]
        print("최대값 =", max_num)

    def test3(self, lst, x, y):
        temp = lst[x]
        lst[x] = lst[y]
        lst[y] = temp

e = Ex02()

# 문제 1) x부터 y까지의 합을 출력하는 메서드
x = 1
y = 10
e.test1(x, y)

# 문제 2) lst를 전달받아 최대값을 출력하는 메서드
lst = [87, 100, 35, 12, 46]
e.test2(lst)

# 문제 3) lst를 전달받아 인덱스 2개를 입력받고, 해당 위치의 값을 교체하는 메서드
idx1 = 1
idx2 = 4
e.test3(lst, idx1, idx2)
print(lst)

140. 클래스와 메서드 연습문제(2단계)[문제]

class Ex03:

    def test1(self, lst):
        pass

    def test2(self, lst):
        pass

e = Ex03()

lst = [87, 12, 21, 56, 100]

# 문제 1) 4의 배수의 개수를 리턴해주는 메서드
e.test1(lst)

# 문제 2) 4의 배수만 리스트 타입으로 리턴해주는 메서드
temp = e.test2(lst)

정답

class Ex03:

    def test1(self, lst):
        cnt = 0
        for i in range(len(lst)):
            if lst[i] % 4 == 0:
                cnt += 1
        return cnt

    def test2(self, lst):
        cnt = self.test1(lst)
        temp = [0] * cnt
        j = 0
        for i in range(len(lst)):
            if lst[i] % 4 == 0:
                temp[j] = lst[i]
                j += 1
        return temp

e = Ex03()

lst = [87, 12, 21, 56, 100]

# 문제 1) 4의 배수의 개수를 리턴해주는 메서드
cnt = e.test1(lst)
print("4의 배수의 개수 =", cnt)

# 문제 2) 4의 배수만 리스트 타입으로 리턴해주는 메서드
temp = e.test2(lst)
print(temp)

141. 클래스와 메서드 연습문제(3단계)[문제] [다시]

class Calc:

    def add(self, x, y):
        return 0

    def sub(self, x, y):
        return 0

    def mul(self, x, y):
        return 0

    def div(self, x, y):
        return 0

    def showInfo(self, x, y):
        pass

c = Calc()
c.showInfo(5, 3)

정답

# 계산기 프로그램

class Calc:

    def add(self, x, y):
        return x + y

    def sub(self, x, y):
        return x - y

    def mul(self, x, y):
        return x * y

    def div(self, x, y):
        return x / y

    def showInfo(self, x, y):
        print("%d + %d = %d" % (x, y, self.add(x, y)))
        print("%d - %d = %d" % (x, y, self.sub(x, y)))
        print("%d * %d = %d" % (x, y, self.mul(x, y)))
        if y != 0:
            print("%d / %d = %.1f" % (x, y, self.div(x, y)))
        else:
            print("0으로 나눌 수 없습니다.")

c = Calc()
c.showInfo(5, 3)

주의사항 및 Tip

print()함수는 return값을 안받아도 출력이 되네

 print("%d + %d = %d" % (x, y, self.add(x, y)))

142. OMR 카드[문제]

# OMR카드 : 클래스 + 메서드
import random

class ScoreMng:
    omr = [1, 4, 3, 2, 2]       # 모범답안
    me = []                     # 학생답안

    cnt = 0                     # 정답 맞춘 개수
    score = 0                   # 성적

정답

# OMR카드 : 클래스 + 메서드
import random

class ScoreMng:
    omr = [1, 4, 3, 2, 2]       # 모범답안
    me = []                     # 학생답안

    cnt = 0                     # 정답 맞춘 개수
    score = 0                   # 성적

    def set_my_answer(self):
        for i in range(5):
            r = random.randint(1, 5)
            self.me.append(r)

    def check_score(self):
        for i in range(5):
            if self.omr[i] == self.me[i]:
                self.cnt += 1
        self.score = self.cnt * 20

    def check_omr(self):
        print("[", end="")
        for i in range(5):
            if self.omr[i] == self.me[i]:
                print("O", end="")
            else:
                print("X", end="")
            if i != 4:
                print(", ", end="")
        print("]")

    def run(self):
        self.set_my_answer()
        self.check_score()

        print(self.omr)
        print(self.me)
        self.check_omr()
        print(self.score)


#----------------------------------------------------
sm = ScoreMng()
sm.run()

143. 숫자이동[문제]

# 숫자이동 : 클래스 + 메서드

class Game:

    move = [0, 0, 0, 0, 8, 0, 0, 0, 0, 0]
    player = 0                            # 캐릭터의 위치

정답

# 숫자이동 : 클래스 + 메서드

class Game:

    move = [0, 0, 0, 0, 8, 0, 0, 0, 0, 0]
    player = 0                            # 캐릭터의 위치

    def set_player(self):
        for i in range(len(self.move)):
            if self.move[i] == 8:
                self.player = i

    def print_game(self):
        for i in range(len(self.move)):
            if self.move[i] == 0:
                print("[ ]", end=" ")
            else:
                print("옷", end=" ")
        print()

    def move_left(self):
        if self.player - 1 >= 0:
            self.move[self.player] = 0
            self.player -= 1
            self.move[self.player] = 8
        else:
            print("더 이상 이동할 수 없습니다.")

    def move_right(self):
        if self.player + 1 < len(self.move):
            self.move[self.player] = 0
            self.player += 1
            self.move[self.player] = 8
        else:
            print("더 이상 이동할 수 없습니다.")

    def run(self):
        self.set_player()

        while True:
            self.print_game()

            number = int(input("1)좌 2)우 3)종료 : "))

            if number == 1:
                self.move_left()
            elif number == 2:
                self.move_right()
            elif number == 3:
                break
#----------------------------------------------------------
g = Game()
g.run()

144. 기억력 게임[문제] [다시]

# 기억력 게임 : 클래스 + 메서드

import random

class MemoryGame:
    count = 0                  # 정답을 맞춘 개수
    size = 10
    front = []
    back = []

    def set_game(self):
        j = 1
        for i in range(10):
            self.back.append(0)
            if i % 2 == 0 and i != 0:
                j += 1
            self.front.append(j)


    def run(self):
        self.set_game()

        print(self.front)
        print(self.back)
#------------------------------------------------------------------
mg = MemoryGame()
mg.run()

정답

# 기억력 게임 : 클래스 + 메서드

import random

class MemoryGame:
    count = 0                  # 정답을 맞춘 개수
    size = 10
    front = []
    back = []

    def set_game(self):
        j = 1
        for i in range(10):
            self.back.append(0)
            if i % 2 == 0 and i != 0:
                j += 1
            self.front.append(j)

    def suffle_front(self):
        for i in range(100):
            r = random.randint(0, 9)

            temp = self.front[0]
            self.front[0] = self.front[r]
            self.front[r] = temp

    def run(self):
        self.set_game()
        self.suffle_front()

        while True:
            print(self.front)
            print(self.back)

            if self.count == 5:
                print("게임 종료")
                break

            index1 = int(input("인덱스1 입력 : "))
            index2 = int(input("인덱스2 입력 : "))

            if self.front[index1] == self.front[index2]:
                self.back[index1] = self.front[index1]
                self.back[index2] = self.front[index2]

                self.count += 1


#------------------------------------------------------------------
mg = MemoryGame()
mg.run()

Leave a comment