가위바위보 게임 만들기
▶ 내용
- 플레이어가 가위, 바위, 보 중 하나를 입력함
- 컴퓨터도 무작위로 가위, 바위, 보 중 하나를 선택함
- 플레이어와 컴퓨터의 선택을 비교하여 승패를 판정함
- 결과를 출력하여 플레이어가 이겼는지, 컴퓨터가 이겼는지, 비겼는지를 알려줌
▶ 내 코드
import random # 랜덤 숫자 생성을 위한 random 모듈 import
def computer_pick(): # computer_pick 함수선언
return random.choice(['가위', '바위', '보']) # 가위,바위,보 중에 랜덤 반환
def player_pick(): # player_pick 함수 선언
pick = input("가위, 바위, 보 중 하나를 선택하세요: ") # 입력받은 값을 pick 에 저장
if pick not in ['가위', '바위', '보']: # pick 이 가위, 바위, 보 중에 없다면
pick = input("잘못입력하셨네요. 선택지는 가위, 바위, 보 입니다: ") # 다시 입력받기
else: # pick 이 가위, 바위, 보 중에 있다면
return pick # pick 반환
def winner(computer_pick, player_pick): # winner 함수 선언
if player_pick == computer_pick: # 컴퓨터와 사용자가 같은걸 골랐으면
return "비겼습니다." # "비겼습니다" 반환
elif (player_pick == '가위' and computer_pick == '보') or \
(player_pick == '바위' and computer_pick == '가위') or \
(player_pick == '보' and computer_pick == '바위'): # 사용자가 이길 경우 (3가지)
return "우와! 이기셨어요!" # "이기셨어요" 반환
else: # 그외의 경우 (졌을경우)
return "지셨습니다." # "지셨습니다" 반환
def play_game(): # play_game 함수 선언
print(f"컴퓨터: {computer_pick()}, 당신: {player_pick()}") # 둘이 낸 것 뭔지 출력
result = winner(computer_pick, player_pick) # winner함수 결과를 result 에 저장
print(result) # result 출력
play_game() # 함수 호출
너무 어려웠다...
실행해보기!
잘못입력해서 가위로 바꿨는데 왜... 아무것도 안
둘다 가위냈는데
가위가 보 이기지 않나
아무래도 무조건 else 문이 실행되고 있는 것 같다.
(열심히 고민 후)
winner 함수와 play_game 함수에서 다른 함수를 그대로 갖다써서 문제가 발생했다. 함수에 인자를 전달할 때는 함수 자체를 전달하는 게 아니라, 함수의 반환값을 변수에 저장한 다음에 전달해 줘야 한다.
def play_game():
computer_choice = computer_pick() # 함수 결과를 변수에 저장
player_choice = player_pick() # 함수 결과를 변수에 저장
print(f"컴퓨터: {computer_choice}, 당신: {player_choice}") # 저장된 결과를 출력
result = winner(computer_choice, player_choice) # winner함수 호출 시 함수가 아닌 변수를 전달
print(result)
def winner(computer_choice, player_choice): # 매개변수를 함수가 아니라 변수로 받기
if player_choice == computer_choice:
return "비겼습니다."
# 이하 코드에서도 함수명을 변수명으로 다 바꿔줬다.
수정 후 다시 실행해보기!
성공!
+
▶ 추가 도전과제
- 게임의 승, 패, 무승부 횟수를 기록하고, 게임 종료 시에 플레이어에게 통계를 제공한다
- 플레이어가 입력할 때 대소문자를 구분하지 않도록 프로그램을 개선한다
- 플레이어가 게임을 반복하고 싶을 경우, 게임 재시작 여부를 묻고 그에 따라 게임을 초기화하거나 종료하는 기능을 추가한다
import random # 랜덤 모듈 가져오기
options = ['가위', '바위', '보'] # 옵션은 가위, 바위, 보 리스트
def get_player_choice(): # 유저 선택 함수 선언
while True: # 무한 루프 실행
player_choice = input('가위, 바위, 보 중 하나를 선택하세요: ') # 입력받기
if player_choice in options: # 입력이 가위,바위,보 중에 있다면
return player_choice # 입력값 반환
else: # 입력이 가위,바위,보 중에 없다면
print('잘못된 입력입니다. 다시 입력하세요.') # 유효한 입력값 유도(루프 다시실행)
win = 0 # win 변수선언, 초기값 0
draw = 0 # draw 변수선언, 초기값 0
lose = 0 # lose 변수선언, 초기값 0
while True: # 무한루프 실행
player_choice = get_player_choice() # 유저 선택 함수의 결과를 player_choice 변수에 저장
computer_choice = random.choice(options) # 옵션중 랜덤 선택값을 computer_choice 변수에 저장
print(f'컴퓨터가 선택한 것은?! : {computer_choice}') # 컴퓨터 선택값 출력해서 보여주기
if ( # 만약 이겼을 경우(3가지 조건)
(player_choice == '가위' and computer_choice == '보')
or (player_choice == '바위' and computer_choice == '가위')
or (player_choice == '보' and computer_choice == '바위')):
print('이겼음') # '이겼음'출력
win += 1 # win 변수에 1 더해줌
elif player_choice == computer_choice: # 값이 같을 경우
print('비겼음') # '비겼음'출력
draw += 1 # draw 변수에 1 더해줌
else: # 그 외의 경우(졌을 경우)
print('졌음') # '졌음'출력
lose += 1 # lose 변수에 1 더해줌
retry = input('다시하시겠습니까? (Y/N)').lower() # 다시할건지 입력받기. 소문자로 바꿔주기
if retry == 'y': # y를 입력받았다면
continue # while 루프 처음부터 다시 실행
elif retry == 'n': # n를 입력받았다면
break # 무한 루프 빠져나가기
print(f"승리 : {win}회 / 비김 : {draw}회 / 패배 : {lose}회") # 승패 횟수 출력
성공!
'캠프' 카테고리의 다른 글
[기초 과제] Class로 회원/게시물 관리 (0) | 2024.07.08 |
---|---|
협업을 잘하려면 (0) | 2024.07.05 |
개발역량 기르는법 (0) | 2024.07.05 |
[기초 과제] Up Down 게임 만들기 (0) | 2024.07.02 |
시작! (0) | 2024.07.01 |