유효 범위와 숫자 맞추기 게임🤔
Scope(유효 범위)
Local Scope(지역 범위)
함수 내부에 있을 때만 사용할 수 있음
Global Scope(전역 범위)
파일 내부 어디서든 사용 가능
(함수 내부에서도 이용할 수 있음)
Namespace
변수뿐만 아니라 함수외 우리가 지정하는 기타 개념에도 적용이 가능함
❓Does Python have Block Scope?
C++이나 Java와는 다르게
if, while, for와 같은 코드블록은 지역 범위를 만드는 것으로 간주되지 않는다.
전역 변수를 수정하는 방법
Python Constants & Global Scope(파이썬 상수와 전역적 유효 범위)
상수
- 변경되지 않아야 하는 변수 값
- 파이썬에서는 변수의 값을 변경할 수 없게 강제하는 내장 메커니즘이 없기 때문에,
상수는 관례적으로 대문자로 이름을 지정하여 다른 개발자들에게 그 변수의 값을 변경하지 않아야 함을 암시
숫자 맞추기 게임
- 게임 설명
- randint import해서 랜덤 숫자 뽑기 변수 생성
- 유저가 고른 숫자 변수 생성
- 답과 유저가 고른 숫자 비교하는 함수 생성
- 게임 난이도 함수 생성 (전역 상수로 시도 횟수 설정)
- 유저에게 시도 횟수 알려주기
- 유저 숫자 입력
- 답과 유저가 입력한 숫자 비교 함수 호출
- 답이 틀렸을 경우 다시 시도할 수 있게 반복문
(8-1) 값 비교하는 함수 파라미터값에 틀렸을 경우 횟수 차감할 수 있게
앞서 선택한 전역상수값이 반영된 turns변수 추가
(8-2) 차감돼야 할 조건에 반환값으로 -1 붙여줌
(8-3) 차감된 값이 반영될 수 있게 turns변수에 저장 - 시도 횟수가 0인지 추적할 수 있게 while문 안에 if문 생성
(9-1) 0이되면 게임을 종료할 수 있게 return으로 함수 종료
Final Code
from random import randint
EASY_LEVEL_TURNS = 10
HARD_LEVEL_TURNS = 5
def check_answer(guess, answer, turns):
if guess > answer:
print("Too high.")
return turns - 1
elif guess < answer:
print("Too low.")
return turns - 1
else:
print(f" You got it! The answer was {answer}")
def set_difficulty():
level = input("Choose a difficulty. Type 'easy' or 'hard': ")
if level == "easy" :
return EASY_LEVEL_TURNS
else:
return HARD_LEVEL_TURNS
def game():
print("Welcome to the Number Guessing Game!")
print("I'm thinking of a number between 1 and 100.")
answer = randint(1, 100)
turns = set_difficulty()
guess = 0
while guess != answer:
print(f" You have {turns} attemps remaning to guess the number.")
guess = int(input("Make a guess:"))
turns = check_answer(guess, answer,turns)
if turns == 0:
print("You've run out of guesses, you lose.")
return
elif guess != answer:
print("Guess again.")
game()