5.python을 이용한 알고리즘 문제(121~마지막)
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