유효 범위와 숫자 맞추기 게임🤔

Scope(유효 범위)

Local Scope(지역 범위)

함수 내부에 있을 때만 사용할 수 있음

Global Scope(전역 범위)

파일 내부 어디서든 사용 가능
(함수 내부에서도 이용할 수 있음)

Namespace

변수뿐만 아니라 함수외 우리가 지정하는 기타 개념에도 적용이 가능함

❓Does Python have Block Scope?
C++이나 Java와는 다르게
if, while, for와 같은 코드블록은 지역 범위를 만드는 것으로 간주되지 않는다.

전역 변수를 수정하는 방법

1

2


Python Constants & Global Scope(파이썬 상수와 전역적 유효 범위)

상수

  • 변경되지 않아야 하는 변수 값
  • 파이썬에서는 변수의 값을 변경할 수 없게 강제하는 내장 메커니즘이 없기 때문에,
    상수는 관례적으로 대문자로 이름을 지정하여 다른 개발자들에게 그 변수의 값을 변경하지 않아야 함을 암시

3


숫자 맞추기 게임

🦊 ASCII Art 직접 만들 수 있는 사이트 🦊


  1. 게임 설명
  2. randint import해서 랜덤 숫자 뽑기 변수 생성
  3. 유저가 고른 숫자 변수 생성
  4. 답과 유저가 고른 숫자 비교하는 함수 생성
  5. 게임 난이도 함수 생성 (전역 상수로 시도 횟수 설정)
  6. 유저에게 시도 횟수 알려주기
  7. 유저 숫자 입력
  8. 답과 유저가 입력한 숫자 비교 함수 호출
  9. 답이 틀렸을 경우 다시 시도할 수 있게 반복문
    (8-1) 값 비교하는 함수 파라미터값에 틀렸을 경우 횟수 차감할 수 있게
    앞서 선택한 전역상수값이 반영된 turns변수 추가
    (8-2) 차감돼야 할 조건에 반환값으로 -1 붙여줌
    (8-3) 차감된 값이 반영될 수 있게 turns변수에 저장
  10. 시도 횟수가 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()