24.07.01 AI 개인 과제 1,2번
오늘은 저번주에 못끝낸 개인 과제 1,2번을 진행했다.
7.3일 까지여서 오늘 내로 끝내고 다른공부에 들어가고 싶었기 때문에 오늘 최대한 끝내려 했다.
# 가위바위보 게임
import random # 랜덤함수 호출
# i = Player win, c_e = computer win, d_i = draw
i = 0
c_e = 0
d_i = 0
while True: #값이 맞을때 까지 진행
# 가위 바위 보 값 입력 하는 곳
my_rcp = input("가위 바위 보를 하십시오")
# 컴퓨터가 랜덤으로 내는 가위바위보값
com_rocksipa = ["rock", "scissors", "paper"]
rosipa = random.choice(com_rocksipa)
#가위 바위 보를 이겼을 때 나타 나는 경우
if my_rcp.lower() == "rock" and rosipa == "scissors": # 플레이어가 주먹, 컴퓨터가 가위를 낸 경우
i = i + 1
print("win")
print(str(i) + '회 승리')
elif my_rcp.lower() == "scissors" and rosipa == "paper": #플레이어가 가위, 컴퓨터가 보자기 를 낸 경우
i = i + 1
print("win")
print(str(i) + '회 승리')
elif my_rcp.lower() == "paper" and rosipa == "rock": # 플레이어가 보자기, 컴퓨터 가 주먹을 낸 경우
i = i + 1
print("win")
print(str(i) + '회 승리')
# 가위바위보를 비겼을 때 나타나는 경우
elif my_rcp.lower() == "rock" and rosipa == "rock":
d_i = d_i + 1
print("draw. 계속진행해 주세요")
print(str(d_i) + '회 무승부')
elif my_rcp.lower() == "scissors" and rosipa == "scissors":
d_i = d_i + 1
print("draw. 계속진행해 주세요")
print(str(d_i) + '회 무승부')
elif my_rcp.lower() == "paper" and rosipa == "paper":
d_i = d_i + 1
print("draw. 계속진행해 주세요")
print(str(d_i) + '회 무승부')
# 가위바위보를 질때 나타나는 경우
elif my_rcp.lower() == "rock" and rosipa == "paper" : # 플레이어가 주먹, 컴퓨터가 보자기를 낸 경우
c_e = c_e + 1
print("lose")
print(str(c_e) + '회 패배')
elif my_rcp.lower() == "scissors" and rosipa == "rock": # 플레이어가 가위, 컴퓨터가 주먹를 낸 경우
c_e = c_e + 1
print("lose")
print(str(c_e) + '회 패배')
elif my_rcp.lower() == "paper" and rosipa == "scissors": # 플레이어가 보자기, 컴퓨터가 가위를 낸 경우
c_e = c_e + 1
print("lose")
print(str(c_e) + '회 패배')
# Yes '입력하면 reset으로 돌아가서 실행', no '입력하면 종료 후 승리,무승부,패배 순으로 표시'
elif my_rcp.lower() == "stop":
my_rcp = input("재시작 하시겠습니까? 재시작 하시려면 Yes, 종료하시려면 No을 입력해주세요")
#게임 리셋 및 재시작
elif my_rcp.lower() == "reset" or my_rcp.lower() == "Yes":
print("게임을 다시 시작하겠습니다.")
i = 0
c_e = 0
d_i = 0
#게임 종료
elif my_rcp.lower() == "NO":
print("게임을 종료합니다")
print(str(i) + '회 승리')
print(str(d_i) + '회 무승부')
print(str(c_e) + '회 패배')
# 만약 paper, scissors, rock, reset, stop, yes, no 를 제외한 다른 단어를 입력하면 input 출력이 안됨
elif my_rcp.lower() != "paper" or my_rcp.lower() != "scissors" or my_rcp.lower() != "rock" or my_rcp.lower() != "reset" or my_rcp.lower() != "stop" or my_rcp.lower() != "YES" or my_rcp.lower() != "NO":
print("rock, paper, scissors 중 하나만 입력해 주십시오")
print("플레이어 :" + my_rcp.lower()) # 가위바위보 입력값 출력
print("컴퓨터 : " + rosipa) # 컴퓨터 랜덤 가위바위보 값 출력
오늘 내가 만든 가위바위보 게임이다. 이 프로그램은 작동을 시키면

이렇게 몇회 승리,무승부,패배 했는지 나오도록 코딩을 짜봤다.
과제 내용:
- 플레이어와 컴퓨터가 참여하는 가위바위보 게임을 만드세요.
- 게임은 다음 순서로 진행됩니다.
- 플레이어가 가위, 바위, 보 중 하나를 입력합니다.
- 컴퓨터도 무작위로 가위, 바위, 보 중 하나를 선택합니다.
- 플레이어와 컴퓨터의 선택을 비교하여 승패를 판정합니다.
- 결과를 출력하여 플레이어가 이겼는지, 컴퓨터가 이겼는지, 비겼는지를 알려줍니다.
추가 도전 과제:
- 게임의 승, 패, 무승부 횟수를 기록하고, 게임 종료 시에 플레이어에게 통계를 제공하세요.
- 플레이어가 입력할 때 대소문자를 구분하지 않도록 프로그램을 개선하세요.
- 플레이어가 게임을 반복하고 싶을 경우, 게임 재시작 여부를 묻고 그에 따라 게임을 초기화하거나 종료하는 기능을 추가하세요.
이게 가위바위보 게임만들때 넣어야 하는 내용들이다.
과제 내용 1번은 input(" ")을 이용해서 만들었다.
과제 내용 2번은 random 함수를 import로 불러와 미리 [가위바위보 리스트] 를 만들고 거기에서 랜덤으로 나오게 만들었다.
과제 3,4번은 조건문 if 를 이용해 플레이어가 이기면 승리, 비기면 무승부, 지면 패배라는 출력이 나오도록 만들었다.
추가도전 과제 해결방법이다.
추가 과제 1번에서 부터 머리가 어지러웠다. 저거 위에 것을 만드는 것도 힘든데 나 혼자 저걸 만들라니. 그래도 스파르타 코딩 클럽을 가입하면서 산 파이썬 책과 인터넷을 검색해보면서 만들었다.
# Yes '입력하면 reset으로 돌아가서 실행', no '입력하면 종료 후 승리,무승부,패배 순으로 표시'
elif my_rcp.lower() == "stop":
my_rcp = input("재시작 하시겠습니까? 재시작 하시려면 Yes, 종료하시려면 No을 입력해주세요")
#게임 리셋 및 재시작
elif my_rcp.lower() == "reset" or my_rcp.lower() == "Yes":
print("게임을 다시 시작하겠습니다.")
i = 0
c_e = 0
d_i = 0
#게임 종료
elif my_rcp.lower() == "NO":
print("게임을 종료합니다")
print(str(i) + '회 승리')
print(str(d_i) + '회 무승부')
print(str(c_e) + '회 패배')
# 만약 paper, scissors, rock, reset, stop, yes, no 를 제외한 다른 단어를 입력하면 input 출력이 안됨
elif my_rcp.lower() != "paper" or my_rcp.lower() != "scissors" or my_rcp.lower() != "rock" or my_rcp.lower() != "reset" or my_rcp.lower() != "stop" or my_rcp.lower() != "YES" or my_rcp.lower() != "NO":
print("rock, paper, scissors 중 하나만 입력해 주십시오")
추가 과제 2번 대소문자 구별 안하고 입력이 되는것은 .lower() (소문자로 인식) 을 이용해 만들었다. 다른방법으로는 .upper()가 있었지만 이거대신 .lower을 사용했다. 추가 도전 3번도 조건문을 이용해 만들었고 맨 마지막 문장은 만약 다른 문자를 입력할 경우 출력이 되지 않게 막았다. (!= 은 '같지 않다'라는 뜻이다.)
이 코딩들을 보면 while True: 가 있다 뜻은 조건을 만족할 동안 반복하기 이다. 이거는 맨 처음 for 문을 이용하려 했지만 계속해도 안되길래 바꿔봤더니 잘 되었다.
#숫자 맞추기 게임
import random
random_number = random.randint(1, 100)
i = 0
many = i
nu = {
'random_number': random_number,
'i': i,
"many" : many,
}
# while = 맞출때까지 반복
while True:
m_num = int(input("숫자를 입력하시오"))
i = i+1
many = many + 1
if random_number == m_num:
print('정답입니다')
print(str(i) + '회 진행하였습니다')
print(many)
print("최고 시도 횟수" + str(max(i, many)))
break
elif 0 >= m_num or 100 < m_num:
print("잘못된 결과값 입니다.")
print(str(i) + '회 진행하였습니다')
elif random_number >= m_num:
print("업")
print(str(i) + '회 진행하였습니다')
elif random_number <= m_num:
print("다운")
print(str(i) + '회 진행하였습니다')
elif i > many :
print("최고 시도 횟수는 " + str(i) + "입니다")
- 프로그램은 다음과 같은 기능을 포함해야 합니다.
- 컴퓨터는 1부터 100 사이의 랜덤한 숫자를 생성합니다.
- 플레이어는 숫자를 입력하고, 입력한 숫자와 컴퓨터의 숫자를 비교하여 "업" 또는 "다운" 힌트를 제공합니다.
- 플레이어가 컴퓨터의 숫자를 정확히 맞히면 시도한 횟수를 알려줍니다.
- 플레이어가 숫자를 맞힐 때까지 위 과정을 반복합니다.
추가 도전 과제:
- 플레이어가 입력한 숫자가 범위를 벗어날 경우, 적절한 안내 메시지를 출력하여 유효한 범위 내의 숫자를 입력하도록 유도하세요.
- 플레이어가 게임을 반복하고 싶을 경우, 게임 재시작 여부를 묻고 그에 따라 게임을 초기화하거나 종료하는 기능을 추가하세요.
- 게임이 종료될 때 플레이어의 최고 시도 횟수를 기록하고, 다음 게임에서 이를 표시하는 기능을 구현하세요.(난이도 매우매우매우매우 상)
숫자 맞추기 게임이다.
이거는 추가 도전 과제 구현을 아직 완벽히 다하진 못하였다.
현재 추가 도전과제 1번은 구현을 했고 2번은 가위바위보 게임에서 응용하면 되지만 3번 최고 시도 횟수를 기록하고, 다음게임에서 표시하는 기능은 인터넷에 찾아도 쉽게 나오지 않았다. 이건 내 힘으로 최대한 해보고 했는데 내일까지도 되지 않는다면 튜터님께 여쭤볼 생각이다. 왠지 튜터님은 이 문제를 1분만에 뚝딱할 것 같은 미래가 조금씩 보인다. 하지만 나도 그렇게 까지는 힘들더라도 꿈은 크게 가져라 라는 말처럼 노력하는 사람이 되야겠다.