5.python을 이용한 알고리즘 문제(31~59)
31. 영수증 출력(2단계)[문제]
# ex44_문제.py
# 영수증 출력[2단계]
# 1. 5번 주문을 받는다.
# 2. 주문이 끝난 후, 돈을 입력받는다.
# 3. 각 메뉴별 주문수량과 총금액을 출력한다.
# 예)
# 메뉴 선택 : 1
# 메뉴 선택 : 1
# 메뉴 선택 : 2
# 메뉴 선택 : 2
# 메뉴 선택 : 3
# 총 금액 = 31300원
# 현금 입력 : 32000
# === 롯데리아 영수증 ===
# 1. 불고기 버거 : 2개
# 2. 새우 버거 : 2개
# 3. 콜 라 : 1개
# 4. 총 금 액 : 31300원
# 5. 잔 돈 : 700원
price1 = 8700
price2 = 6200
price3 = 1500
print("=== 롯데리아 ===")
print("1.불고기 버거 :", price1)
print("2.새우 버거 :", price2)
print("3.콜 라 :", price3)
정답
# ex44_정답.py
# 영수증 출력[2단계]
# 1. 5번 주문을 받는다.
# 2. 주문이 끝난 후, 돈을 입력받는다.
# 3. 각 메뉴별 주문수량과 총금액을 출력한다.
# 예)
# 메뉴 선택 : 1
# 메뉴 선택 : 1
# 메뉴 선택 : 2
# 메뉴 선택 : 2
# 메뉴 선택 : 3
# 총 금액 = 31300원
# 현금 입력 : 32000
# === 롯데리아 영수증 ===
# 1. 불고기 버거 : 2개
# 2. 새우 버거 : 2개
# 3. 콜 라 : 1개
# 4. 총 금 액 : 31300원
# 5. 잔 돈 : 700원
price1 = 8700
price2 = 6200
price3 = 1500
print("=== 롯데리아 ===")
print("1.불고기 버거 :", price1)
print("2.새우 버거 :", price2)
print("3.콜 라 :", price3)
cnt1 = 0
cnt2 = 0
cnt3 = 0
i = 1
while i <= 5:
choice = int(input("메뉴를 선택하세요 : "))
if choice == 1:
cnt1 = cnt1 + 1
elif choice == 2:
cnt2 = cnt2 + 1
elif choice == 3:
cnt3 = cnt3 + 1
i = i + 1
total = cnt1*price1 + cnt2*price2 + cnt3*price3
print("총 금액 =", total)
my_money = int(input("돈을 입력하세요 : "))
charge = my_money - total
if charge < 0:
print("현금이 부족합니다.")
else:
print("=== 롯데리아 영수증===")
print("1.불고기 버거 :", cnt1)
print("2.새우 버거 :", cnt2)
print("3.콜 라 :", cnt3)
print("총 금액 =", total)
print("잔돈 =", charge)
32. 반복문 종료[문제]
# ex45_문제.py
# 반복문 종료(-100)
# 1. 무한 반복을 하면서 숫자를 입력받는다.
# 2. 입력한 숫자가 -100이면, 프로그램은 종료된다.
정답
# ex45_정답.py
# 반복문 종료(-100)
# 1. 무한 반복을 하면서 숫자를 입력받는다.
# 2. 입력한 숫자가 -100이면, 프로그램은 종료된다.
run = True
while run:
exit_num = int(input("숫자 입력(-100은 종료) : "))
if exit_num == -100:
run = False
i =0;
while i != -100:
i = int(input("숫자를 입력하세요"))
i =1;
while i:
input_number = int(input("숫자를 입력하세요"))
if input_number == -100:
break;
33. Up & Down 게임(2단계)[문제]
# ex46_정답.py
# Up & Down 게임[2단계]
# 1. 정답을 맞추면 게임은 종료된다.
# 2. 100점부터 시작해 오답을 입력할 때마다 5점씩 차감된다.
# 3. 게임 종료 후, 점수를 출력한다.
import random
r_num = random.randint(1, 100)
print("치트키 =", r_num)
count = 0
my_answer = 0
while r_num != my_answer:
my_answer = int(input("정답 입력 : "))
if r_num != my_answer:
count = count + 1
score = 100 - (count * 5)
print("성적 =", score)
정답
import random
answer = 33;
run = true;
total = 100
while run:
my_answer = int(input("정답을 입력하세요"))
if my_answer == answer:
run=false
else
total = total - 5
print(total)
34. ATM(3단계:로그인/로그아웃)[문제]
# ex47_문제.py
# ATM[3단계]
# 1. 로그인
# . 로그인 후 재 로그인 불가
# . 로그아웃 상태에서만 이용 가능
# 2. 로그아웃
# . 로그인 후 이용가능
db_acc1 = 1111
db_pw1 = 1234
db_acc2 = 2222
db_pw2 = 2345
log = -1 # -1(로그아웃), 1(dbAcc1로그인), 2(dbAcc2로그인)
run = True
while run:
print("1.로그인")
print("2.로그아웃")
print("0.종료")
choice = int(input("메뉴 선택 : "))
if choice == 1:
pass
elif choice == 2:
pass
elif choice == 0:
run = False
print("프로그램 종료")
정답
# ex47_정답.py
# ATM[3단계]
# 1. 로그인
# . 로그인 후 재 로그인 불가
# . 로그아웃 상태에서만 이용 가능
# 2. 로그아웃
# . 로그인 후 이용가능
db_acc1 = 1111
db_pw1 = 1234
db_acc2 = 2222
db_pw2 = 2345
log = -1 # -1(로그아웃), 1(dbAcc1로그인), 2(dbAcc2로그인)
run = True
while run:
print("1.로그인")
print("2.로그아웃")
print("0.종료")
choice = int(input("메뉴 선택 : "))
if choice == 1:
if log == -1:
my_id = int(input("ID 입력 : "))
my_pw = int(input("PW 입력 : "))
if my_id == db_acc1 and my_pw == db_pw1:
log = 1
print(db_acc1, "환영합니다.")
elif my_id == db_acc2 and my_pw == db_pw2:
log = 2
print(db_acc2, "환영합니다.")
else:
print("계좌번호와 비밀번호를 확인해주세요.")
else:
if log == 1:
print(db_acc1, "로그인 중...")
elif log == 2:
print(db_acc2, "로그인 중...")
elif choice == 2:
if log != -1:
log = -1
print("로그아웃 되었습니다.")
else:
print("로그인 후 이용해주세요.")
elif choice == 0:
run = False
print("프로그램 종료")
35. ATM(3단계:입금/출금/이체/조회)[문제]
# ex48_문제.py
# ATM[3단계]
# 1. 입금
# . 입금할 금액을 입력받아, myMoney에 입금
# 2. 출금
# . 출금할 금액을 입력받아, myMoney에서 출금
# . 단, 출금할 금액이 myMoney 잔액을 초과할 경우 출금불가
# 3. 이체
# . yourAcc 계좌번호를 입력받아, 이체
# . 이체할 금액이 myMoney 잔액을 초과할 경우 이체 불가
# . 이체 후 yourMoney 잔액 증가
# 4. 조회
# . myMoney와 yourMoney 잔액 모두 출력
my_acc = 1111
my_money = 50000
your_acc = 2222
your_money = 70000
run = True
while run:
print("1.입금")
print("2.출금")
print("3.이체")
print("4.조회")
print("0.종료")
choice = int(input("메뉴 선택 : "))
if choice == 1:
pass
elif choice == 2:
pass
elif choice == 3:
pass
elif choice == 4:
pass
elif choice == 0:
run = False
print("프로그램 종료")
정답
# ex48_정답.py
# ATM[2단계]
# 1. 입금
# . 입금할 금액을 입력받아, myMoney에 입금
# 2. 출금
# . 출금할 금액을 입력받아, myMoney에서 출금
# . 단, 출금할 금액이 myMoney 잔액을 초과할 경우 출금불가
# 3. 이체
# . yourAcc 계좌번호를 입력받아, 이체
# . 이체할 금액이 myMoney 잔액을 초과할 경우 이체 불가
# . 이체 후 yourMoney 잔액 증가
# 4. 조회
# . myMoney와 yourMoney 잔액 모두 출력
my_acc = 1111
my_money = 50000
your_acc = 2222
your_money = 70000
run = True
while run:
print("1.입금")
print("2.출금")
print("3.이체")
print("4.조회")
print("0.종료")
choice = int(input("메뉴 선택 : "))
if choice == 1:
money = int(input("입금할 금액 입력 : "))
my_money = my_money + money
elif choice == 2:
money = int(input("출금할 금액 입력 : "))
my_money = my_money - money
elif choice == 3:
acc = int(input("이체할 계좌번호 입력 : "))
if acc == your_acc:
money = int(input("이체할 금액 입력 : "))
if money <= my_money:
my_money -= money # my_money = my_money - money
your_money += money
else:
print("계좌잔액이 부족합니다.")
else:
print("계좌번호를 확인해주세요.")
elif choice == 4:
print("my_money =", my_money)
print("your_money =", your_money)
elif choice == 0:
run = False
print("프로그램 종료")
36. ATM(3단계:종합)[문제]
# ex49_문제.py
# ATM[3단계]
# 1. 로그인
# . 로그인 후 재 로그인 불가
# . 로그아웃 상태에서만 이용 가능
# 2. 로그아웃
# . 로그인 후 이용가능
# 3. 입금
# . 로그인 후 이용가능
# 4. 출금
# . 로그인 후 이용가능
# 5. 이체
# . 로그인 후 이용가능
# 6. 조회
# . 로그인 후 이용가능
# 7. 종료
db_acc1 = 1111
db_pw1 = 1234
db_money1 = 50000
db_acc2 = 2222
db_pw2 = 2345
db_money2 = 70000
log = -1
run = True
while run:
print("1.로그인")
print("2.로그아웃")
print("3.입금")
print("4.출금")
print("5.이체")
print("6.조회")
print("0.종료")
choice = int(input("메뉴 선택 : "))
if choice == 1:
pass
elif choice == 2:
pass
elif choice == 3:
pass
elif choice == 4:
pass
elif choice == 5:
pass
elif choice == 6:
pass
elif choice == 0:
run = False
print("프로그램 종료")
정답
# ex49_정답.py
# ATM[3단계]
# 1. 로그인
# . 로그인 후 재 로그인 불가
# . 로그아웃 상태에서만 이용 가능
# 2. 로그아웃
# . 로그인 후 이용가능
# 3. 입금
# . 로그인 후 이용가능
# 4. 출금
# . 로그인 후 이용가능
# 5. 이체
# . 로그인 후 이용가능
# 6. 조회
# . 로그인 후 이용가능
# 7. 종료
db_acc1 = 1111
db_pw1 = 1234
db_money1 = 50000
db_acc2 = 2222
db_pw2 = 2345
db_money2 = 70000
log = -1
run = True
while run:
print("<로그인 상태>")
if log == 1:
print(db_acc1, "로그인 중...")
elif log == 2:
print(db_acc2, "로그인 중...")
else:
print("로그아웃")
print("1.로그인")
print("2.로그아웃")
print("3.입금")
print("4.출금")
print("5.이체")
print("6.조회")
print("0.종료")
choice = int(input("메뉴 선택 : "))
if choice == 1:
if log == -1:
acc = int(input("ID 입력 : "))
pw = int(input("PW 입력 : "))
if acc == db_acc1 and pw == db_pw1:
log = 1
print(db_acc1, "환영합니다.")
elif acc == db_acc2 and pw == db_pw2:
log = 2
print(db_acc2, "환영합니다.")
else:
print("계좌번호와 비밀번호를 확인해주세요.")
else:
if log == 1:
print(db_acc1, "로그인 중...")
elif log == 2:
print(db_acc2, "로그인 중...")
elif choice == 2:
if log != -1:
log = -1
print("로그아웃 되었습니다.")
else:
print("로그인 후 이용해주세요.")
elif choice == 3:
if log != -1:
money = int(input("입금할 금액 입력 : "))
if log == 1:
db_money1 += money
elif log == 2:
db_money2 += money
else:
print("로그인 후 이용해주세요.")
elif choice == 4:
if log != -1:
money = int(input("출금할 금액 입력 : "))
if log == 1:
if money <= db_money1:
db_money1 -= money
else:
print("계좌잔액이 부족합니다.")
elif log == 2:
if money <= db_money2:
db_money2 -= money
else:
print("계좌잔액이 부족합니다.")
else:
print("로그인 후 이용해주세요.")
elif choice == 5:
if log != -1:
acc = int(input("이체할 계좌번호 입력 : "))
if log == 1:
if acc == db_acc2:
money = int(input("이체할 금액 입력 : "))
if money <= db_money1:
db_money1 -= money
db_money2 += money
else:
print("계좌잔액이 부족합니다.")
else:
print("계좌번호를 확인해주세요.")
elif log == 2:
if acc == db_acc1:
money = int(input("이체할 금액 입력 입력 : "))
if money <= db_money2:
db_money2 -= money
db_money1 += money
else:
print("계좌잔액이 부족합니다.")
else:
print("계좌번호를 확인해주세요.")
else:
print("로그인 후 이용해주세요.")
elif choice == 6:
if log != -1:
print("db_money1 =", db_money1)
print("db_money2 =", db_money2)
else:
print("로그인 후 이용해주세요.")
elif choice == 0:
run = False
print("프로그램 종료")
37. 베스킨라빈스31[문제]
정답
# ex50_문제.py
# 베스킨라빈스31
# 1. p1과 p2가 번갈아가면서 1~3을 입력한다.
# 2. br은 p1과 p2의 입력값을 누적해서 저장한다.
# 3. br이 31을 넘으면 게임은 종료된다. (넘긴쪽이 패배)
# 4. 승리자를 출력한다.
#
# 예)
# 1턴 : p1(2) br(2)
# 2턴 : p2(1) br(3)
# 3턴 : p1(3) br(6)
p1 = 0
p2 = 0
br = 0
turn = 0
정답
p1 = 0
p2 = 0
br = 0
turn = 0
while br<=31:
if turn % 2 == 0:
p1 = int(input("p1 입력(1~3) : "))
if 1 <= p1 and p1 <= 3:
br = br + p1
turn = turn + 1
elif turn % 2 == 1:
p2 = int(input("p2 입력(1~3) : "))
if 1 <= p2 and p2 <= 3:
br = br + p2
turn = turn + 1
print("br =", br)
if br > 31:
if turn % 2 == 0:
print("p1승리")
elif turn % 2 == 1:
print("p2승리")
print("게임 종료")
# ex50_문제.py
# 베스킨라빈스31
# 1. p1과 p2가 번갈아가면서 1~3을 입력한다.
# 2. br은 p1과 p2의 입력값을 누적해서 저장한다.
# 3. br이 31을 넘으면 게임은 종료된다. (넘긴쪽이 패배)
# 4. 승리자를 출력한다.
#
# 예)
# 1턴 : p1(2) br(2)
# 2턴 : p2(1) br(3)
# 3턴 : p1(3) br(6)
p1 = 0
p2 = 0
br = 0
turn = 0
while True :
p1 = int(input("p1 : 1~3을 입력하세요"))
br += p1
print(br)
turn = "p2"
if br > 31:
print("승자는",turn)
break;
p2 = int(input("p2 : 1~3을 입력하세요"))
br += p2
print(br)
turn = "p1"
if br > 31:
print("승자는",turn)
break;
주의사항 및 tip
이런식으로 할경우, p1이 br의 31을 넘어갔을때 바로 p2가 이겼다고 나와야하는데 그러지 못하고 p2차례로 넘어가버리게 된다
따라서 이 문제는 입력하고 결과확인하고, 입력하고 결과확인하는 순서로 진행되어야한다
p1 = 0
p2 = 0
br = 0
turn = 0
while br < 31 :
p1_value = int(input("1~3 중 하나를 입력하세요"))
turn+=1
br += p1_value
print(f"{turn}턴 : p1{p1_value} br{br}")
p2_value = int(input("1~3 중 하나를 입력하세요"))
turn+=1
br += p2_value
print(f"{turn}턴 : p1{p2_value} br{br}")
38. 369게임(2단계)[문제]
# ex51_문제.py
# 369게임[2단계]
# 1. 1~50까지 반복을 한다.
# 2. 그 안에서 해당 숫자의 369게임의 결과를 출력한다.
# 예) 1 2 짝 4 5 짝 7 8 짝 10 11 12 짝 ...
정답
# ex51_정답.py
# 369게임[2단계]
# 1. 1~50까지 반복을 한다.
# 2. 그 안에서 해당 숫자의 369게임의 결과를 출력한다.
# 예) 1 2 짝 4 5 짝 7 8 짝 10 11 12 짝 ...
i = 1
while i <= 50:
x = i // 10 # 십의 자리
y = i % 10 # 일의 자리
cnt = 0
if x != 0 and x % 3 == 0:
cnt = cnt + 1
if y != 0 and y % 3 == 0:
cnt = cnt + 1
if cnt == 2:
print("짝짝")
elif cnt == 1:
print("짝")
else:
print(i)
i = i + 1
# ex51_문제.py
# 369게임[2단계]
# 1. 1~50까지 반복을 한다.
# 2. 그 안에서 해당 숫자의 369게임의 결과를 출력한다.
# 예) 1 2 짝 4 5 짝 7 8 짝 10 11 12 짝 ...
count = 1
# 나머지를 3으로 나눴을때 0 이 나오면 짝
# 몫을 3으로 나눴을때도 0이 나오면 짝
while count<50:
share = count // 10 #몫
remainder = count % 10 #나머지
if(share !=0 and share % 3 ==0 and remainder !=0 and remainder % 3 ==0) :
print("짝짝")
count+=1
elif(share !=0 and share % 3 ==0):
print("짝")
count+=1
elif(remainder !=0 and remainder % 3 ==0):
print("짝")
count+=1
else :
print(count)
count+=1
39. 소수찾기(1단계)[문제]
정답
# ex52_정답.py
# 소수찾기[1단계]
# 1. 소수란, 1과 자기자신으로만 나눠지는 수
# 2. 예) 2, 3, 5, 7, 11, 13, ..
# 정수 한 개를 입력받아, 해당 숫자가 소수인지 아닌지 판별한다.
num = int(input("정수 입력 : "))
cnt = 0
i = 1
while i <= num:
if num % i == 0:
cnt = cnt + 1
i = i + 1
if cnt == 2:
print("소수이다.")
else:
print("소수가 아니다.")
40. 최대값 구하기(2단계)[문제]
# ex53_문제.py
# 최대값 구하기[2단계]
# 1. 3회 반복을 하면서 정수를 입력받는다.
# 2. 입력받은 3개의 숫자 중 가장 큰 값을 출력한다.
정답
# ex53_정답.py
# 최대값 구하기[2단계]
# 1. 3회 반복을 하면서 정수를 입력받는다.
# 2. 입력받은 3개의 숫자 중 가장 큰 값을 출력한다.
max_num = 0
i = 1
while i <= 3:
num = int(input("정수 입력 : "))
if max_num < num:
max_num = num
i = i + 1
print("최대값 =", max_num)
41. 랜덤학생[문제]
# ex54_문제.py
# 랜덤학생
# 1. 10회 반복을 한다.
# 2. 1~100 사이의 랜덤 숫자를 저장한다.(학생의 성적)
# 3. 성적이 60점 이상이면 합격생이다.
# ---------------------------------------
# . 전교생(10명)의 총점과 평균을 출력한다.
# . 합격자 수를 출력한다.
# . 1등 학생의 번호와 성적을 출력한다.
정답
# ex54_정답.py
# 랜덤학생
# 1. 10회 반복을 한다.
# 2. 1~100 사이의 랜덤 숫자를 저장한다.(학생의 성적)
# 3. 성적이 60점 이상이면 합격생이다.
# ---------------------------------------
# . 전교생(10명)의 총점과 평균을 출력한다.
# . 합격자 수를 출력한다.
# . 1등 학생의 번호와 성적을 출력한다.
import random
count = 0
total = 0
max_score = 0
max_idx = 0
i = 1
while i <= 10:
score = random.randint(1, 100)
print(score, end=" ")
if score >= 60:
count = count + 1
if max_score < score:
max_score = score
max_idx = i
total = total + score
i = i + 1
print()
print("총점 =", total)
avg = total / 10
print("평균 =", avg)
print("1등 점수 =", max_score)
print("1등 번호 =", max_idx)
42. 카카오 택시[문제]
# ex56_문제.py
# 카카오 택시
# 1. 손님을 태워 목적지까지 이동하는 게임이다.
# 2. -10~10 사이의 랜덤 숫자 2개를 저장해 목적지로 설정한다.
# 3. 메뉴는 아래와 같다.
# 1) 속도설정 : 1~3까지만 가능
# 2) 방향설정 : 동(1)서(2)남(3)북(4)
# 3) 이동하기 : 설정된 방향으로 설정된 속도만큼 이동
# 4. 거리 2칸 당 50원씩 추가되어 요금도 출력한다.
# 예) 1(50) 2(50) 3(100) 4(100) ...
# 목적지(destination)
des_x = 0
dex_y = 0
# 현재 위치
x = 0
y = 0
# 방향(direction)
direc = 0
# 속도
speed = 0
# 요금
fee = 0
run = True
while run:
print("=== 카카오 택시 ===")
print("목적지 :", des_x, des_y)
print("현위치 :", x, y)
print("방 향 :", direc)
print("속 도 :", speed)
print("1.방향설정")
print("2.속도설정")
print("3.이동하기")
choice = int(input("메뉴 선택 : "))
if choice == 1:
pass
elif choice == 2:
pass
elif choice == 3:
pass
정답
# ex56_정답.py
# 카카오 택시
# 1. 손님을 태워 목적지까지 이동하는 게임이다.
# 2. -10~10 사이의 랜덤 숫자 2개를 저장해 목적지로 설정한다.
# 3. 메뉴는 아래와 같다.
# 1) 속도설정 : 1~3까지만 가능
# 2) 방향설정 : 동(1)서(2)남(3)북(4)
# 3) 이동하기 : 설정된 방향으로 설정된 속도만큼 이동
# 4. 거리 2칸 당 50원씩 추가되어 요금도 출력한다.
# 예) 1(50) 2(50) 3(100) 4(100) ...
import random
# 목적지(destination)
des_x = random.randint(-10, 10)
des_y = random.randint(-10, 10)
# 현재 위치
x = 0
y = 0
# 방향(direction)
direc = 0
# 속도
speed = 0
# 요금
fee = 0
# 이동 칸 수
count = 0
run = True
while run:
print("=== 카카오 택시 ===")
print("목적지 :", des_x, des_y)
print("현위치 :", x, y)
print("방 향 :", direc)
print("속 도 :", speed)
print("1.방향설정")
print("2.속도설정")
print("3.이동하기")
choice = int(input("메뉴 선택 : "))
if choice == 1:
direc = int(input("동(1)서(2)남(3)북(4) 입력 : "))
elif choice == 2:
speed = int(input("속도 입력(1~3) : "))
elif choice == 3:
if direc == 1:
x = x + speed
elif direc == 2:
x = x - speed
elif direc == 3:
y = y + speed
elif direc == 4:
y = y - speed
count = count + speed
if des_x == x and des_y == y:
print("목적지에 도착하였습니다.")
run = False
fee = count // 2 * 50
if count % 2 != 0:
fee = fee + 50
print("요금 =", fee)
# ex56_문제.py
# 카카오 택시
# 1. 손님을 태워 목적지까지 이동하는 게임이다.
# 2. -10~10 사이의 랜덤 숫자 2개를 저장해 목적지로 설정한다.
# 3. 메뉴는 아래와 같다.
# 1) 속도설정 : 1~3까지만 가능
# 2) 방향설정 : 동(1)서(2)남(3)북(4)
# 3) 이동하기 : 설정된 방향으로 설정된 속도만큼 이동
# 4. 거리 2칸 당 50원씩 추가되어 요금도 출력한다.
# 예) 1(50) 2(50) 3(100) 4(100) ...
# 목적지(destination)
import random
des_x = random.randint(-10,10)
des_y = random.randint(-10,10)
# 현재 위치
x = 0
y = 0
# 방향(direction)
direc = 0
# 속도
speed = 0
# 요금
fee = 0
total_range =0
run = True
while run:
print("=== 카카오 택시 ===")
print("목적지 :", des_x,des_y)
print("현위치 :", x, y)
print("방 향 :", direc)
print("속 도 :", speed)
print("1.방향설정")
print("2.속도설정")
print("3.이동하기")
choice = int(input("메뉴 선택 : "))
if choice == 1:
direc = int(input("2) 방향설정 : 동(1)서(2)남(3)북(4)"))
elif choice == 2:
speed = int(input("1) 속도설정 : 1~3까지만 가능"))
elif choice == 3:
if direc == 1 :
x += speed
elif direc == 2 :
x-= speed
elif direc == 3 :
y -= speed
elif direc == 4 :
y += speed
else :
print("방향설정이 잘못되었습니다.")
total_range += speed
if des_x == x and des_y == y:
print("목적지에 도착하셨습니다.")
run = False
share = total_range // 2
remainder = total_range % 2
fee = (share * 50) + (remainder * 50)
print("총 비용은", fee)
42. 9의 배수중 일의 자리가 6인 첫번째 배수 출력
# 문제1) 9의 배수중 일의 자리가 6인 첫번째 배수 출력
정답
답 : 36
i = 0
while i < 1000:
if i % 10 == 6 and i % 9 ==0:
print(i)
i = 1000
i += 1
# 문제1) 9의 배수중 일의 자리가 6인 첫번째 배수 출력
i=0
while i< 1000:
if i%10 == 6 and i%9==0:
print(i)
break;
i+=1
43. [반복문 문제] : 첫번째 배수만 출력된다.
# 문제1) 9의 배수중 일의 자리가 6인 첫번째 배수 출력
# 문제2) 9의 배수중 십의 자리가 6인 첫번째 배수 출력
# 문제3) 8로 나누면 5가 남는수 중 150보다 작고 150 에 가장 가까운수를 구하시요
# 문제4) 50에서 100까지 자연수중에서 9의 배수는 모두 몇개입니까?
# 문제5) 28의 배수 중에서 가장 큰 세자리 수를 구하시요.
# 문제6) 8의 배수를 작은수부터 5개 출력
정답
# 문제1) 9의 배수중 일의 자리가 6인 첫번째 배수 출력
i = 0
while i < 1000 :
if i%9 ==0 :
if i%10 == 6:
print(i)
i+=1
i = 0
while i < 1000:
if i % 10 == 6 and i % 9 ==0:
print(i)
i = 1000
i += 1
# 문제2) 9의 배수중 십의 자리가 6인 첫번째 배수 출력
i = 0
while i < 1000:
if i // 10 == 6 and i % 9 == 0:
print(i)
i = 1000
i += 1
# 문제3) 8로 나누면 5가 남는수 중 150보다 작고 150 에 가장 가까운수를 구하시요
# 답 149
i = 0
a = 0
while i < 1000:
if i % 8 == 5 and i <= 150:
a = i
i += 1
print(a)
# 문제4) 50에서 100까지 자연수중에서 9의 배수는 모두 몇개입니까?
# 답 6 (54,63,72,81,90,99)
a = 50
c =0
while a<= 100:
if a % 9 == 0:
print(a)
c += 1
a += 1
print(c)
# 문제5) 28의 배수 중에서 가장 큰 세자리 수를 구하시요.
i = 0
max_num =0
while i < 1000:
if i % 28 == 0 :
max_num = i
i+=1
print(max_num)
# 문제6) 8의 배수를 작은수부터 5개 출력
i = 0
cnt = 0
while i < 1000:
if i!=0 and i % 8 == 0 :
cnt +=1
if cnt < 6:
print(i)
i+=1
44. [반복문 문제] : 모든 배수 출력
# 문제1) 9의 배수중 일의 자리가 6인 배수 출력
# 문제2) 9의 배수중 십의 자리가 6인 배수 출력
정답
i = 0
while i < 1000 :
if i % 9 == 0 and i%10 == 6 :
print(i , end=" ")
i+=1
print()
i = 0
while i < 1000 :
if i % 9 == 0 and (i//10)%10 == 6 :
print(i , end=" ")
i+=1
45. 리스트 기본[문제]
# ex59_문제.py
# 리스트 기본문제
nums = [10, 20, 30, 40, 50]
print(nums[0])
print(nums[1])
print(nums[2])
# print(nums[5]) [5]는 없는방번호라 에러가난다. 0부터 시작하기때문에
# 예) 전체 값 출력
i = 0
while i<5:
print(nums[i], end=" ")
# end 는 결과물의 마지막에 어떠한 값을 넣을지 정해준다.
# 따라서 num[i] 마다 띄어쓰기가 나오는 결과물이 출력된다.
i = i + 1
# 문제1) 4의 배수만 출력
# 정답1) 20 40
# 문제2) 4의 배수의 합 출력
# 정답2) 60
# 문제3) 4의 배수의 개수 출력
# 정답3) 2
# 문제4) 짝수의 개수 출력
# 정답4) 5
정답
# ex59_정답.py
# 리스트 기본문제
nums = [10, 20, 30, 40, 50]
# 예) 전체 값 출력
i = 0
while i<5:
print(nums[i], end=" ")
i = i + 1
print()
# 문제1) 4의 배수만 출력
# 정답1) 20 40
i = 0
while i < 5:
if nums[i] % 4 == 0:
print(nums[i], end=" ")
i = i + 1
print()
# 문제2) 4의 배수의 합 출력
# 정답2) 60
tot = 0
i = 0
while i<5:
if nums[i] % 4 == 0:
tot = tot + nums[i]
i = i + 1
print("tot =", tot)
# 문제3) 4의 배수의 개수 출력
# 정답3) 2
cnt = 0
i = 0
while i<5:
if nums[i] % 4 == 0:
cnt = cnt + 1
i = i + 1
print("cnt =", cnt)
# 문제4) 짝수의 개수 출력
# 정답4) 5
cnt = 0
i = 0
while i<5:
if nums[i] % 2 == 0:
cnt = cnt + 1
i = i + 1
print("cnt =", cnt)
46. 학생성적관리 프로그램(1단계)[문제]
# ex60_문제.py
# 학생성적관리 프로그램[1단계] : 학생점수
scores = [87, 11, 92, 14, 47]
# 문제1) 전교생의 총점과 평균 출력
# 예 1) 총점(251) 평균(50.2)
# 문제2) 성적이 60점 이상이면 합격. 합격생 수 출력
# 예 2) 2명
정답
# ex60_정답.py
# 학생성적관리 프로그램[1단계] : 학생점수
scores = [87, 11, 92, 14, 47]
# 문제1) 전교생의 총점과 평균 출력
# 예 1) 총점(251) 평균(50.2)
tot = 0
avg = 0
i = 0
while i < 5:
tot = tot + scores[i]
i = i + 1
avg = tot / 5
print("총점 =", tot)
print("평균 =", avg)
# 문제2) 성적이 60점 이상이면 합격. 합격생 수 출력
# 예 2) 2명
cnt = 0
i = 0
while i < 5:
if scores[i] >= 60:
cnt = cnt + 1
i = i + 1
print("합격생 수 =", cnt)
47. 학생성적관리 프로그램(2단계)[문제]
# ex61_문제.py
# 학생성적관리 프로그램[2단계] : 학생검색
scores = [87, 11, 92, 14, 47]
# 문제1) 인덱스를 입력받아 성적 출력
# 정답1) 인덱스 입력 : 1 성적 : 11점
# 문제2) 성적을 입력받아 인덱스 출력
# 정답2) 성적 입력 : 11 인덱스 : 1
hakbuns = [1001, 1002, 1003, 1004, 1005]
scores = [87, 11, 92, 14, 47]
# 문제3) 학번을 입력받아 성적 출력
# 정답3) 학번 입력 : 1003 성적 : 45점
정답
# ex61_정답.py
# 학생성적관리 프로그램[2단계] : 학생검색
scores = [87, 11, 92, 14, 47]
# 문제1) 인덱스를 입력받아 성적 출력
# 정답1) 인덱스 입력 : 1 성적 : 11점
index = int(input("인덱스 입력 : "))
print("성적 =", scores[index])
# 문제2) 성적을 입력받아 인덱스 출력
# 정답2) 성적 입력 : 11 인덱스 : 1
score = int(input("성적 입력 : "))
index = -1
i = 0
while i < 5:
if scores[i] == score:
index = i
i = i + 1
print("인덱스 =", index)
hakbuns = [1001, 1002, 1003, 1004, 1005]
scores = [87, 11, 92, 14, 47]
# 문제3) 학번을 입력받아 성적 출력
# 정답3) 학번 입력 : 1003 성적 : 45점
number = int(input("학번 입력 : "))
i = 0
while i < 5:
if hakbuns[i] == number:
print(scores[i])
i = i + 1
48. 학생성적관리 프로그램(3단계)[문제]
# ex62_문제.py
# 학생성적관리 프로그램[3단계] : 예외처리
hakbuns = [1001, 1002, 1003, 1004, 1005]
scores = [87, 11, 92, 14, 47]
# 문제) 학번을 입력받아 성적 출력
# 단, 없는학번 입력 시 예외처리
# 예)
# 학번 입력 : 1002 성적 : 11점
# 학번 입력 : 1000 해당학번은 존재하지 않습니다.
정답
# ex62_정답.py
# 학생성적관리 프로그램[3단계] : 예외처리
hakbuns = [1001, 1002, 1003, 1004, 1005]
scores = [87, 11, 92, 14, 47]
# 문제) 학번을 입력받아 성적 출력
# 단, 없는학번 입력 시 예외처리
# 예)
# 학번 입력 : 1002 성적 : 11점
# 학번 입력 : 1000 해당학번은 존재하지 않습니다.
number = int(input("학번 입력 : "))
check = -1
i = 0
while i < 5:
if hakbuns[i] == number:
check = i
i = i + 1
if check == -1:
print("해당학번은 존재하지 않습니다.")
else:
print("성적 =", scores[check])
49. 학생성적관리 프로그램(4단계)[문제]
# ex63_문제.py
# 학생성적관리 프로그램[4단계] : 1등학생
hakbuns = [1001, 1002, 1003, 1004, 1005]
scores = [87, 11, 92, 14, 47]
# 문제) 1등학생의 학번과 성적 출력
# 정답) 1003번(92점)
정답
# ex63_정답.py
# 학생성적관리 프로그램[4단계] : 1등학생
hakbuns = [1001, 1002, 1003, 1004, 1005]
scores = [87, 11, 92, 14, 47]
# 문제) 1등학생의 학번과 성적 출력
# 정답) 1003번(92점)
max_idx = 0
max_score = 0
i = 0
while i < 5:
if max_score < scores[i]:
max_score = scores[i]
max_idx = i
i = i + 1
print("1등 성적 =", max_score)
print("1등 학번 =", hakbuns[max_idx])
50. OMR 카드[문제]
# ex64_문제.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점
answer = [1, 3, 4, 2, 5]
hgd = [1, 1, 4, 4, 3]
정답
# ex64_정답.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점
answer = [1, 3, 4, 2, 5]
hgd = [1, 1, 4, 4, 3]
count = 0
i = 0
while i < 5:
if answer[i] == hgd[i]:
count = count + 1
print("O", end=" ")
else:
print("X", end=" ")
i += 1
print()
score = count * 20
print("성적 =", score)
51. 영화관 좌석예매[문제]
# ex65_문제.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원
seat = [0, 0, 0, 0, 0, 0, 0]
run = True
while run:
print("== 메가 영화관==")
print("1.좌석예매")
print("2.종료")
choice = int(input("메뉴 선택 : "))
if choice == 1:
pass
elif choice == 2:
run = False
정답
# ex65_정답.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원
seat = [0, 0, 0, 0, 0, 0, 0]
count = 0
run = True
while run:
i = 0
while i < 7:
if seat[i] == 0:
print("[ ]", end=" ")
else:
print("[O]", end=" ")
i = i + 1
print()
print("== 메가 영화관==")
print("1.좌석예매")
print("2.종료")
choice = int(input("메뉴 선택 : "))
if choice == 1:
index = int(input("좌석 번호를 선택하세요(0~6) : "))
if seat[index] == 0:
seat[index] = 1
count = count + 1
elif choice == 2:
run = False
total = count * 12000
print("매출액 =", total)
52. [03] 즉석복권 | 중복숫자금지(1)
# ex66_문제.py
# 즉석복권
# 1. 숫자 7이 연속으로 3번 등장하면, 당첨복권이다.
# 2. 아래 3종류의 복권의 당첨여부를 출력한다.
lotto1 = [0, 0, 7, 7, 7, 0, 0, 0]
lotto2 = [7, 0, 7, 7, 0, 0, 0, 0]
lotto3 = [7, 0, 7, 7, 7, 0, 7, 0]
run = True
while run:
print("1) 복권 결과확인")
choice = int(input())
if choice == 1:
print("이곳에만들어보세요")
정답
# ex66_정답.py
# 즉석복권
# 1. 숫자 7이 연속으로 3번 등장하면, 당첨복권이다.
# 2. 아래 3종류의 복권의 당첨여부를 출력한다.
lotto1 = [0, 0, 7, 7, 7, 0, 0, 0]
lotto2 = [7, 0, 7, 7, 0, 0, 0, 0]
lotto3 = [7, 0, 7, 7, 7, 0, 7, 0]
run = True
while run:
choice = int(input("1) 복권 결과확인"))
if choice == 1:
check = -1
count = 0
i = 0
while i < 8:
if lotto2[i] == 7:
count += 1
else:
count = 0
if count == 3:
check = 1
i = i + 1
if check == -1:
print("꽝!")
else:
print("당첨!")
53. 중복숫자 금지(1단계)[문제]
# ex67_문제.py
# 중복숫자 금지[1단계]
# 1. 0~4 사이의 숫자를 arr배열에 저장한다.
# 2. 단, 중복되는 숫자는 없어야 한다.
# 힌트) 랜덤 숫자를 check배열의 인덱스로 활용한다.
#
# 예)
# 랜덤숫자 : 1
# check = {0, 1, 0, 0, 0}
# arr = {1, 0, 0, 0, 0}
# 랜덤숫자 : 3
# check = {0, 1, 0, 1, 0}
# arr = {1, 3, 0, 0, 0}
# 랜덤숫자 : 2
# check = {0, 1, 1, 1, 0}
# arr = {1, 3, 2, 0, 0}
check = [0, 0, 0, 0, 0]
arr = [0, 0, 0, 0, 0]
정답
# ex67_정답.py
# 중복숫자 금지[1단계]
# 1. 0~4 사이의 숫자를 arr배열에 저장한다.
# 2. 단, 중복되는 숫자는 없어야 한다.
# 힌트) 랜덤 숫자를 check배열의 인덱스로 활용한다.
#
# 예)
# 랜덤숫자 : 1
# check = {0, 1, 0, 0, 0}
# arr = {1, 0, 0, 0, 0}
# 랜덤숫자 : 3
# check = {0, 1, 0, 1, 0}
# arr = {1, 3, 0, 0, 0}
# 랜덤숫자 : 2
# check = {0, 1, 1, 1, 0}
# arr = {1, 3, 2, 0, 0}
import random
check = [0, 0, 0, 0, 0]
arr = [0, 0, 0, 0, 0]
i = 0
while i < 5:
r_num = random.randint(0, 4)
if check[r_num] == 0:
arr[i] = r_num
check[r_num] = 1
i = i + 1
print(check)
print(arr)
54. 값 교체하기(2단계)[문제]
# ex68_문제.py
nums = [10, 20, 30, 40, 50]
# 문제 1) 인덱스 2개를 입력받아 값 교체하기
# 예 1) 인덱스1 입력 : 1
# 인덱스2 입력 : 3
# [10, 40, 30, 20, 50]
# 문제 2) 값 2개를 입력받아 값 교체하기
# 예 2) 값1 입력 : 40
# 값2 입력 : 20
# [10, 20, 30, 40, 50]
hakbuns = [1001, 1002, 1003, 1004, 1005]
scores = [87, 11, 45, 98, 23]
# 문제 3) 학번 2개를 입력받아 성적 교체하기
# 예 3) 학번1 입력 : 1002
# 학번2 입력 : 1003
# [87, 45, 11, 98, 23]
정답
# ex68_정답.py
nums = [10, 20, 30, 40, 50]
# 문제 1) 인덱스 2개를 입력받아 값 교체하기
# 예 1) 인덱스1 입력 : 1
# 인덱스2 입력 : 3
# [10, 40, 30, 20, 50]
idx1 = int(input("인덱스1 입력 : "))
idx2 = int(input("인덱스2 입력 : "))
temp = nums[idx1]
nums[idx1] = nums[idx2]
nums[idx2] = temp
print(nums)
# 문제 2) 값 2개를 입력받아 값 교체하기
# 예 2) 값1 입력 : 40
# 값2 입력 : 20
# [10, 20, 30, 40, 50]
v1 = int(input("값1 입력 : "))
v2 = int(input("값2 입력 : "))
idx1 = 0
idx2 = 0
i = 0
while i < 5:
if nums[i] == v1:
idx1 = i
if nums[i] == v2:
idx2 = i
i = i + 1
temp = nums[idx1]
nums[idx1] = nums[idx2]
nums[idx2] = temp
print(nums)
hakbuns = [1001, 1002, 1003, 1004, 1005]
scores = [87, 11, 45, 98, 23]
# 문제 3) 학번 2개를 입력받아 성적 교체하기
# 예 3) 학번1 입력 : 1002
# 학번2 입력 : 1003
# [87, 45, 11, 98, 23]
num1 = int(input("학번1 입력 : "))
num2 = int(input("학번2 입력 : "))
idx1 = 0
idx2 = 0
i = 0
while i < 5:
if hakbuns[i] == num1:
idx1 = i
if hakbuns[i] == num2:
idx2 = i
i = i + 1
temp = scores[idx1]
scores[idx1] = scores[idx2]
scores[idx2] = temp
print(scores)
55. 숫자이동(1단계)[정답]
# ex69_정답.py
# 숫자이동[1단계]
# 1. 숫자2는 캐릭터이다.
# 2. 숫자1을 입력하면, 캐릭터가 왼쪽으로
# 숫자2를 입력하면, 캐릭터가 오른쪽으로 이동한다.
# 3. 단, 좌우 끝에 도달했을 때, 예외처리를 해야한다.
game = [0, 0, 2, 0, 0, 0, 0]
player = 0
i = 0
while i < 7:
if game[i] == 2:
player = i
i = i + 1
정답
56. 기억력 게임[문제]
# ex70_문제.py
# 기억력 게임
# 1. 같은 숫자의 위치를 2개 입력해 정답을 맞추는 게임이다.
# 2. 정답을 맞추면 back에 해당 숫자를 저장해,
# back에 모든 수가 채워지면 게임은 종료된다.
# 예)
# front = [1, 1, 2, 2, 3, 3, 4, 4, 5, 5]
# back = [0, 0, 0, 0, 0, 0, 0, 0, 0, 0]
# 입력1 : 0
# 입력2 : 1
#
# front = [1, 1, 2, 2, 3, 3, 4, 4, 5, 5]
# back = [1, 1, 0, 0, 0, 0, 0, 0, 0, 0]
import random
front = [1, 1, 2, 2, 3, 3, 4, 4, 5, 5]
back = [0, 0, 0, 0, 0, 0, 0, 0, 0, 0]
# 셔플(shuffle)
i = 0
while i < 100:
r_num = random.randint(0, 9)
temp = front[0]
front[0] = front[r_num]
front[r_num] = temp
i = i + 1
i = 0
while i < 10:
print(front[i], end=" ")
i = i + 1
정답
# ex70_정답.py
# 기억력 게임
# 1. 같은 숫자의 위치를 2개 입력해 정답을 맞추는 게임이다.
# 2. 정답을 맞추면 back에 해당 숫자를 저장해,
# back에 모든 수가 채워지면 게임은 종료된다.
# 예)
# front = [1, 1, 2, 2, 3, 3, 4, 4, 5, 5]
# back = [0, 0, 0, 0, 0, 0, 0, 0, 0, 0]
# 입력1 : 0
# 입력2 : 1
#
# front = [1, 1, 2, 2, 3, 3, 4, 4, 5, 5]
# back = [1, 1, 0, 0, 0, 0, 0, 0, 0, 0]
import random
front = [1, 1, 2, 2, 3, 3, 4, 4, 5, 5]
back = [0, 0, 0, 0, 0, 0, 0, 0, 0, 0]
# 셔플(shuffle)
i = 0
while i < 100:
r_num = random.randint(0, 9)
temp = front[0]
front[0] = front[r_num]
front[r_num] = temp
i = i + 1
i = 0
while i < 5:
# 인덱스 출력
j = 0
while j < 10:
print(j, end=" ")
j = j + 1
print()
# front 출력
print(front)
# back 출력
print(back)
index1 = int(input("인덱스1 입력 : "))
index2 = int(input("인덱스2 입력 : "))
if front[index1] == front[index2]:
back[index1] = front[index1]
back[index2] = front[index2]
i = i + 1
57. 1 to 50(1단계)[문제]
# ex71_문제.py
# 1 to 50[1단계] : 1 to 4
# 1. arr배열에 1~4 사이의 숫자를 중복없이 저장한다.
# 2. 사용자는 1부터 순서대로 해당 위치 값을 입력한다.
# 3. 정답을 맞추면 해당 값은 9로 변경되어 모든 값이 9가 되면 게임은 종료된다.
# 예)
# 4 2 3 1
# 입력 : 3
# 4 2 3 9
# 입력 : 1
# 4 9 3 9
정답
# ex71_정답.py
# 1 to 50[1단계] : 1 to 4
# 1. arr배열에 1~4 사이의 숫자를 중복없이 저장한다.
# 2. 사용자는 1부터 순서대로 해당 위치 값을 입력한다.
# 3. 정답을 맞추면 해당 값은 9로 변경되어 모든 값이 9가 되면 게임은 종료된다.
# 예)
# 4 2 3 1
# 입력 : 3
# 4 2 3 9
# 입력 : 1
# 4 9 3 9
import random
arr = [0, 0, 0, 0]
check = [0, 0, 0, 0]
# arr 배열에 1~4 중복없이 저장하기
i = 0
while i < 4:
r_num = random.randint(0, 3)
if check[r_num] == 0:
check[r_num] = 1
arr[i] = r_num + 1
i = i + 1
# print(arr)
# 게임 시작
game_num = 1
i = 0
while i < 4:
print(arr)
index = int(input("인덱스 입력 : "))
if arr[index] == game_num:
arr[index] = 9
game_num += 1
i += 1
import random
arr = [0, 0, 0, 0]
check = [0, 0, 0, 0]
# 1~4 사이의 숫자를 중복없이 저장한다.
i = 0
while i<4 :
random_num = random.randint(1,4)
if check[random_num-1] == 0 :
check[random_num-1] = 1
arr[i] = random_num
i= i+1
print(arr)
j = 1
while j<5:
answer = int(input("입력 : "))
if arr[answer] == j :
arr[answer] = 9
j = j+1
else :
print("틀렷습니다.")
print(arr)
58. 틱택토[문제]
# ex72_문제.py
# 틱택토
# === 틱택토 ===
# [X][X][O]
# [ ][O][ ]
# [ ][ ][ ]
# [p1]인덱스 입력 : 6
# === 틱택토 ===
# [X][X][O]
# [ ][O][ ]
# [O][ ][ ]
# [p1]승리
game = [0, 0, 0, 0, 0, 0, 0, 0, 0]
정답
# ex72_정답.py
# 틱택토
# === 틱택토 ===
# [X][X][O]
# [ ][O][ ]
# [ ][ ][ ]
# [p1]인덱스 입력 : 6
# === 틱택토 ===
# [X][X][O]
# [ ][O][ ]
# [O][ ][ ]
# [p1]승리
game = [0, 0, 0, 0, 0, 0, 0, 0, 0]
p1 = 0
p2 = 0
turn = True
win1 = False
win2 = False
run = True
while run:
# 게임화면 출력
i = 0
while i < 9:
if game[i] == 0:
print("[ ]", end=" ")
elif game[i] == 1:
print("[O]", end=" ")
elif game[i] == 2:
print("[X]", end=" ")
if i % 3 == 2:
print()
i = i + 1
# p1 차례
if turn == True:
p1 = int(input("[p1차례] 입력 : "))
if game[p1] == 0:
game[p1] = 1
turn = not turn
# p2 차례
elif turn == False:
p2 = int(input("[p2차례] 입력 : "))
if game[p2] == 0:
game[p2] = 2
turn = not turn
# 가로 검사
i = 0
while i < 9:
if game[i] == 1 and game[i+1] == 1 and game[i+2] == 1:
win1 = True
if game[i] == 2 and game[i+1] == 2 and game[i+2] == 2:
win2 = True
i = i + 3
# 세로 검사
i = 0
while i < 3:
if game[i] == 1 and game[i+3] == 1 and game[i+6] == 1:
win1 = True
if game[i] == 2 and game[i+3] == 2 and game[i+6] == 2:
win2 = True
i = i + 1
# 대각선 검사(1)
if game[0] == 1 and game[4] == 1 and game[8] == 1:
win1 = True
if game[0] == 2 and game[4] == 2 and game[8] == 2:
win2 = True
# 대각선 검사(2)
if game[2] == 1 and game[4] == 1 and game[6] == 1:
win1 = True
if game[2] == 2 and game[4] == 2 and game[6] == 2:
win2 = True
# 게임 종료
if win1:
run = False
print("p1 승리!")
elif win2:
run = False
print("p2 승리!")
59. [06] 미니 윷놀이
# ex73_문제.py
# 미니 윷놀이
# 1. 플레이어는 p1과 p2 2명이다.
# 2. 번갈아가며 1~3 사이의 숫자를 입력해 이동한다.
# 3. 이동하다가 다음 플레이어와 같은 위치에 놓이게 되면,
# 상대 플레이어는 잡히게 되어 원점으로 되돌아간다.
# 4. 먼저 3바퀴를 돌면 이긴다.
# [p1]1~3 입력 : 2
# 1 2 3 4 5 6 7 8
# 0 1 0 0 0 0 0 0
# 0 0 0 2 0 0 0 0
#
# [p1]이 p2를 잡았다!
# 1 2 3 4 5 6 7 8
# 0 0 0 1 0 0 0 0
# 2 0 0 0 0 0 0 0
game = [0, 1, 2, 3, 4, 5, 6, 7, 8]
p1 = [0, 0, 0, 0, 0, 0, 0, 0, 0]
p2 = [0, 0, 0, 0, 0, 0, 0, 0, 0]
turn = 0
idx1 = 0
idx2 = 0
p1[idx1] = 1
p2[idx2] = 2
정답
# ex73_정답.py
# 미니 윷놀이
# 1. 플레이어는 p1과 p2 2명이다.
# 2. 번갈아가며 1~3 사이의 숫자를 입력해 이동한다.
# 3. 이동하다가 다음 플레이어와 같은 위치에 놓이게 되면,
# 상대 플레이어는 잡히게 되어 원점으로 되돌아간다.
# 4. 먼저 3바퀴를 돌면 이긴다.
# [p1]1~3 입력 : 2
# 1 2 3 4 5 6 7 8
# 0 1 0 0 0 0 0 0
# 0 0 0 2 0 0 0 0
#
# [p1]이 p2를 잡았다!
# 1 2 3 4 5 6 7 8
# 0 0 0 1 0 0 0 0
# 2 0 0 0 0 0 0 0
game = [0, 1, 2, 3, 4, 5, 6, 7, 8]
p1 = [0, 0, 0, 0, 0, 0, 0, 0, 0]
p2 = [0, 0, 0, 0, 0, 0, 0, 0, 0]
turn = 0
idx1 = 0
idx2 = 0
p1[idx1] = 1
p2[idx2] = 2
win1 = 0
win2 = 0
while True:
# 게임 종료
if win1 == 3:
print("[p1]승리!")
break
elif win2 == 3:
print("[p2]승리!")
# 게임화면 출력
print(game)
print(p1, win1)
print(p2, win2)
# p1 차례
if turn % 2 == 0:
move = int(input("[p1차례] 입력 : "))
p1[idx1] = 0
idx1 += move
if idx1 >= 9:
win1 += 1
idx1 %= 9
p1[idx1] = 1
turn += 1
# p2 차례
elif turn % 2 == 1:
move = int(input("[p2차례] 입력 : "))
p2[idx2] = 0
idx2 += move
if idx2 >= 9:
win2 += 1
idx2 %= 9
p2[idx2] = 2
turn += 1
# 잡혔을 때
if idx1 == idx2:
if turn % 2 == 0:
print("[p2]가 [p1]을 잡았다!")
p1[idx1] = 0
idx1 = 0
p1[idx1] = 1
elif turn % 2 == 1:
print("[p1]이 [p2]를 잡았다!")
p2[idx2] = 0
idx2 = 0
p2[idx2] = 2
# ex73_문제.py
# 미니 윷놀이
# 1. 플레이어는 p1과 p2 2명이다.
# 2. 번갈아가며 1~3 사이의 숫자를 입력해 이동한다.
# 3. 이동하다가 다음 플레이어와 같은 위치에 놓이게 되면,
# 상대 플레이어는 잡히게 되어 원점으로 되돌아간다.
# 4. 먼저 3바퀴를 돌면 이긴다.
# [p1]1~3 입력 : 2
# 1 2 3 4 5 6 7 8
# 0 1 0 0 0 0 0 0
# 0 0 0 2 0 0 0 0
#
# [p1]이 p2를 잡았다!
# 1 2 3 4 5 6 7 8
# 0 0 0 1 0 0 0 0
# 2 0 0 0 0 0 0 0
game = [0, 1, 2, 3, 4, 5, 6, 7, 8]
p1 = [0, 0, 0, 0, 0, 0, 0, 0, 0]
p2 = [0, 0, 0, 0, 0, 0, 0, 0, 0]
count = 0
turn = 0
idx1 = 0
idx2 = 0
p1[idx1] = 1
p2[idx2] = 2
run = True
while run :
if turn % 2 == 0 :
p1[idx1] = 0
idx1 += int(input("[p1]1~3 입력 :"))
if idx1 == idx2 :
p2[idx2] = 0
idx2 = 0
p2[idx2] = 2
if idx1 > 8 :
idx1 -= 9
count +=1
p1[idx1] = 1
turn +=1
elif turn % 2 == 1 :
p2[idx2] = 0
idx2 += int(input("[p2]1~3 입력 :"))
if idx1 == idx2 :
p1[idx1] = 0
idx1 = 0
p1[idx1] = 1
if idx2 > 8 :
idx2 -= 9
count +=1
p2[idx2] = 2
turn +=1
if count == 3 :
if turn % 2 == 0 :
print("p2 승리")
run = False
elif turn % 2 == 1:
print("p1 승리")
run = False
print(game)
print(p1)
print(p2)
# ex73_문제.py
# 미니 윷놀이
# 1. 플레이어는 p1과 p2 2명이다.
# 2. 번갈아가며 1~3 사이의 숫자를 입력해 이동한다.
# 3. 이동하다가 다음 플레이어와 같은 위치에 놓이게 되면,
# 상대 플레이어는 잡히게 되어 원점으로 되돌아간다.
# 4. 먼저 3바퀴를 돌면 이긴다.
# [p1]1~3 입력 : 2
# 1 2 3 4 5 6 7 8
# 0 1 0 0 0 0 0 0
# 0 0 0 2 0 0 0 0
#
# [p1]이 p2를 잡았다!
# 1 2 3 4 5 6 7 8
# 0 0 0 1 0 0 0 0
# 2 0 0 0 0 0 0 0
game = [0, 1, 2, 3, 4, 5, 6, 7, 8]
p1 = [0, 0, 0, 0, 0, 0, 0, 0, 0]
p2 = [0, 0, 0, 0, 0, 0, 0, 0, 0]
turn = 0
idx1 = 0
idx2 = 0
p1[idx1] = 1
p2[idx2] = 2
win1 = 0
win2 = 0
run = True
while run :
move_p1=0
move_p2=0
if turn % 2 == 0 :
p1[idx1] = 0
move_p1 = int(input("1~3 사이의 숫자를 입력해 이동한다."))
idx1 += move_p1
#먹는 조건
if idx1 == idx2 :
p2[idx2] = 0
p2[0] = 2
idx2 = 0
#한바퀴를 돌았을때
if idx1 > 8 :
idx1 -= 9
win1 += 1
p1[idx1] = 1
turn+=1
elif turn % 2 == 1:
p2[idx2] = 0
move_p2 = int(input("1~3 사이의 숫자를 입력해 이동한다."))
idx2 += move_p2
if idx1 == idx2 :
p1[idx1] = 0
p1[0] = 1
idx1 = 0
if idx2 > 8 :
idx2 -= 9
win2 += 1
p2[idx2] = 2
turn+=1
if win1 == 3 :
print("p1이 이겼습니다")
run = False
elif win2 == 3:
print("p2가 이겼습니다")
run = False
print(game)
print(p1)
print(p2)
주의사항 및 Tip
첫번째, 말이 이동하는 방법
두번째, 한바퀴돌때 다시 1로 되는 조건
세번째, 상대의 말을 잡아먹었을때 조건
Leave a comment