import random
com = random.randint(1,20)
print('<<컴퓨터가 생각한 1~20 숫자 맞추기>>')
while True:
player = int(input('숫자 입력(종료 0): '))
if player == 0:
break
elif player == com:
print('정답!!')
break
elif player > com:
print('더 작은 숫자 입력!')
elif player < com:
print('더 큰 숫자 입력!')
결과)
<<컴퓨터가 생각한 1~20 숫자 맞추기>>
숫자 입력(종료 0): 10
더 작은 숫자 입력!
숫자 입력(종료 0): 8
더 큰 숫자 입력!
숫자 입력(종료 0): 9
정답!!
파이썬 소스 및 결과입니다. 소스 설명)
이 파이썬 코드는 컴퓨터가 무작위로 생성한 1부터 20 사이의 숫자를 맞히는 간단한 게임입니다. 사용자가 숫자를 입력하면 컴퓨터가 정답보다 큰지 작은지를 알려주며, 정답을 맞히거나 0을 입력하면 게임이 종료됩니다.
💻 코드 설명
1. import random
이 코드는 파이썬의 random 모듈을 가져옵니다. random 모듈은 무작위 숫자를 생성하거나 무작위로 요소를 선택하는 데 사용되는 내장 모듈입니다. 이 모듈을 사용해야만 컴퓨터가 예측할 수 없는 숫자를 만들어낼 수 있습니다.
2. com = random.randint(1, 20)
random.randint(1, 20) 함수는 1부터 20 사이의 정수 중 하나를 무작위로 선택하여 com 변수에 할당합니다. 이 숫자가 바로 사용자가 맞혀야 할 정답이 됩니다.
3. print('<<컴퓨터가 생각한 1~20 숫자 맞추기>>')
이 코드는 게임이 시작될 때 화면에 **'<<컴퓨터가 생각한 1~20 숫자 맞추기>>'**라는 제목을 출력하여 사용자에게 게임의 목적을 알려줍니다.
4. while True:
이 코드는 무한 루프를 시작합니다. while True는 조건이 항상 참이므로, 특정 조건(예: 정답을 맞히거나 0을 입력)을 충족하여 break 문을 만나기 전까지 루프가 계속 반복됩니다. 이를 통해 사용자가 정답을 찾을 때까지 계속해서 숫자를 입력할 수 있습니다.
5. player = int(input('숫자 입력(종료 0): '))
input() 함수는 사용자로부터 키보드 입력을 받습니다. 이때 **'숫자 입력(종료 0): '**라는 메시지를 보여줍니다. 사용자가 입력한 값은 문자열 형태이므로, int() 함수를 사용하여 정수로 변환한 후 player 변수에 저장합니다.
6. if, elif, else 조건문
사용자가 입력한 player 변수의 값과 컴퓨터의 정답 com 변수의 값을 비교하여 다양한 상황에 따른 처리를 합니다.
- if player == 0: 사용자가 0을 입력했는지 확인합니다. 0은 게임을 종료하겠다는 의미이므로, 이 조건이 참이면 break 문을 실행하여 while 루프를 종료하고 게임을 끝냅니다.
- elif player == com: 사용자가 입력한 숫자가 컴퓨터의 정답과 같은지 확인합니다. 이 조건이 참이면 **'정답!!'**을 출력하고 break 문으로 루프를 종료합니다.
- elif player > com: 사용자가 입력한 숫자가 정답보다 큰지 확인합니다. 이 조건이 참이면 **'더 작은 숫자 입력!'**을 출력하여 다음 입력에 대한 힌트를 줍니다.
- elif player < com: 사용자가 입력한 숫자가 정답보다 작은지 확인합니다. 이 조건이 참이면 **'더 큰 숫자 입력!'**을 출력하여 다음 입력에 대한 힌트를 줍니다.
📝 결과 분석
결과는 사용자가 10, 8, 9 순서로 숫자를 입력하여 정답을 맞히는 과정을 보여줍니다.
- '숫자 입력(종료 0): 10' → 컴퓨터의 정답은 10보다 작으므로 '더 작은 숫자 입력!' 메시지가 출력됩니다.
- '숫자 입력(종료 0): 8' → 이번엔 8을 입력했더니 정답이 8보다 크다는 '더 큰 숫자 입력!' 메시지가 나옵니다.
- '숫자 입력(종료 0): 9' → 10보다 작고 8보다 큰 숫자는 9밖에 없으므로, 9를 입력하자 '정답!!' 메시지가 출력되며 게임이 종료됩니다.
이 코드는 무작위 숫자 생성, 무한 루프, 사용자 입력 처리, 그리고 조건문을 활용하여 간단하지만 재미있는 게임을 구현한 좋은 예시입니다.
두번째 해석 및 소스 개선)
설명(개요)
이 코드는 컴퓨터가 1~20 사이의 정수를 무작위로 하나 골리고, 사용자가 그 숫자를 맞출 때까지 반복해서 입력을 받는 숫자 맞추기 게임입니다.
아래에 원본 코드에 주석을 단 버전, 라인별 상세 설명, 그리고 **예제 실행(입력: 10 → 8 → 9)**에 따른 변수 변화와 출력 흐름을 차근차근 설명하겠습니다. 마지막에 작은 개선 제안 코드도 포함합니다.
원본 소스(주석 포함)
라인별/개념별 상세 설명
1) import random
- random 모듈은 파이썬 표준 라이브러리로 난수 생성 함수들을 제공합니다.
- 이 문장을 통해 random 모듈 안의 함수들을 코드에서 사용할 수 있게 됩니다.
2) com = random.randint(1,20)
- random.randint(a, b)는 a와 b를 포함한 정수 범위에서 임의의 정수를 반환합니다. 여기서는 1 이상 20 이하의 정수 중 하나를 선택합니다.
- 반환된 정수는 com 변수(타입: int)에 저장됩니다. 이 값은 프로그램 실행 중 변경되지 않습니다(한 판 게임의 정답).
3) print('<<컴퓨터가 생각한 1~20 숫자 맞추기>>')
- 사용자에게 게임 제목/안내를 출력합니다.
4) while True:
- 항상 참인 조건으로 반복(무한 루프)을 만듭니다. 루프 내부에서 break가 호출되면 반복을 빠져나옵니다.
- 이 구조는 사용자가 정답을 맞추거나 0을 눌러 종료할 때까지 반복 입력을 계속 받기 위한 전형적인 방법입니다.
5) player = int(input('숫자 입력(종료 0): '))
- input(prompt)은 콘솔에서 문자열을 입력받아 반환합니다. prompt 문자열은 입력을 요청하는 메시지입니다.
- int(...)로 감싸서 입력 문자열을 정수로 변환합니다. 변환된 정수는 player 변수에 저장됩니다.
- 주의: 사용자가 정수 이외(예: 'abc', 빈 입력)를 입력하면 int()에서 ValueError가 발생하고 프로그램이 에러로 종료됩니다. (에러 처리가 없음)
6) if player == 0: → break
- 0은 이 프로그램에서 **종료 신호(간단한 sentinel 값)**로 사용됩니다. 0을 입력하면 반복문을 탈출하고 프로그램이 끝납니다.
7) elif player == com: → print('정답!!') + break
- 사용자가 컴퓨터가 고른 숫자와 같다면 정답 메시지를 출력하고 루프를 빠져나와 게임 종료.
8) elif player > com: → print('더 작은 숫자 입력!')
- 입력한 숫자가 정답보다 크면 "더 작은 숫자 입력!"라는 힌트를 출력합니다.
9) elif player < com: → print('더 큰 숫자 입력!')
- 입력한 숫자가 정답보다 작으면 "더 큰 숫자 입력!"라는 힌트를 출력합니다.
예제 실행 흐름(주어진 결과를 기준으로)
프로그램의 결과 예시는:
이 출력이 나오려면 프로그램이 처음 생성한 com의 값은 9였습니다. (첫 입력 10 → 더 작아야 함, 둘째 입력 8 → 더 커야 함, 셋째 입력 9 → 정답)
각 단계의 내부 상태:
- com = 9 (랜덤으로 정해짐)
- 사용자 입력 10 → player = 10 → player > com 이므로 더 작은 숫자 입력! 출력. 루프 계속.
- 사용자 입력 8 → player = 8 → player < com 이므로 더 큰 숫자 입력! 출력. 루프 계속.
- 사용자 입력 9 → player == com 이므로 정답!! 출력 후 break로 루프 탈출(프로그램 종료).
자주 발생할 수 있는 문제(예외/엣지 케이스)
- 비정수 입력(ValueError): int(input(...))에서 정수가 아닌 값을 입력하면 ValueError로 프로그램이 종료됩니다. 예: 'a', '' 등.
- 범위 바깥 값: 사용자가 21이나 -5 같은 범위 외 값을 넣어도 프로그램은 단순 비교만 하므로 동작은 하지만 힌트가 맞지 않을 수 있습니다(예: 21이면 항상 "더 작은 숫자" 출력). 필요하면 입력 범위를 체크해야 합니다.
- 0이 정답일 가능성: 여기서는 randint(1,20)이라 0이 정답일 가능성은 없습니다. 0은 오직 종료용으로 사용됩니다.
- 무한 입력: 사용자가 절대 정답이나 0을 입력하지 않으면(또는 중간에 프로그램이 중단되지 않으면) 루프가 계속됩니다 — 의도된 동작입니다.
간단한 개선안(에러 처리 + 시도 횟수 세기 + 범위 체크 예제)
아래는 비정수 입력을 안전하게 처리하고, 시도 횟수를 세며, 1~20 범위 밖 입력을 경고하는 개선된 코드 예시입니다.
com = random.randint(1, 20)
print('<<컴퓨터가 생각한 1~20 숫자 맞추기>>')
attempts = 0
while True:
s = input('숫자 입력(종료 0): ').strip() # 문자열로 먼저 받음
if s == '0': # 문자열 비교로 종료 처리
print('게임을 종료합니다.')
break
# 숫자 변환 시 안전하게 예외 처리
try:
player = int(s)
except ValueError:
print('정수를 입력하세요(예: 7).')
continue
# 범위 체크(선택 사항)
if not (1 <= player <= 20):
print('1에서 20 사이의 숫자를 입력하세요.')
continue
attempts += 1
if player == com:
print(f'정답!! {attempts}번 만에 맞추셨습니다.')
break
elif player > com:
print('더 작은 숫자 입력!')
else: # player < com
print('더 큰 숫자 입력!')
이 개선안의 장점:
- 숫자 변환 실패 시 프로그램이 종료되지 않고 재입력을 요구합니다.
- 입력이 범위(1~20)를 벗어나면 사용자에게 알려줍니다.
- 몇 번 만에 맞췄는지 알려줍니다.
마무리
원하시면 다음 중 하나를 더 해드릴게요:
- 위 코드를 실제로 실행 가능한 형태로 설명(터미널 실행 방법)
- 게임에 재시작 기능, 최댓값/최솟값 힌트, 이전 입력 기록 출력 등 기능 추가 코드 제공
- 초등학생 수준으로 더 쉽게 풀어쓴 설명
'파이썬(Python)' 카테고리의 다른 글
| 파이썬, 코드(369 게임) 소스 (1) | 2025.09.13 |
|---|---|
| 파이썬, 1~100까지 숫자 맞추기 게임 소스 (추가 수정 본) 및 실행파일 (0) | 2025.09.09 |
| 파이썬, 모듈의 의미는? (0) | 2025.09.09 |
| 파이썬, for문, 학생 정보 입력 받아 평균 출력하는 소스 (0) | 2025.09.09 |
| 파이썬, 삼각형 모양 별 출력 소스 (0) | 2025.09.07 |
콘텐츠 내 자동삽입광고
