Функция в игре Python не нарушается и не будет переходить к следующей функции - PullRequest
0 голосов
/ 15 октября 2019

Для класса мы должны сделать игру, в которой человек вводит верхнее целое и нижнее целое для диапазона. Затем выбирается случайное число между этими двумя числами. Затем игрок угадывает число, и игра заканчивается, когда вы угадываете правильное число. В функции для моего диапазона у меня есть цикл, который заканчивается только при вводе правильного диапазона. Затем он очистит консоль и перейдет к угадающей части игры. Проблема в том, что после того, как вы введете правильный диапазон, он очистит экран, затем выполнит неправильную часть цикла и сделает невозможным продолжение. Ниже запрограммировано то, что я запустил на Python около 2 месяцев назад.

**import time, os, random

#The beginning where you enter a range
def game_loop():
 got_an_int = False
 while got_an_int == False:
  user_input1 = input("Enter the upper bound integer of the range:  ")
  user_input2 = input('Enter the lower bound integer of the range:  ')
   try: 
     user_input1 = int(user_input1)
     user_input2 = int(user_input2)
     print("Good job, that is a correct range.")
     got_an_int = True
     clear()
     break
   except:
    print("That is not a correct range. Try again.")

#To continue after entering a correct range
def clear():
  time.sleep(3)
  os.system('clear')
  time.sleep(1)
  game_begin()

#Random Number Generator
def random_num(a,b):
  random.randint(user_input1,user_input2)

#Where you begin the game
def game_begin():
  guess_right = False
  random_num = random_num(user_input1,user_input2)
  while  random_num != guess_right:
   guess = input('Guess an integer in your range: ')
   total_guess = [] + 1
   try:
     guess = int(guess)
     if random_num > guess:
       print("Too Low.")
       guess_right = False
     if random_num < guess:
        print('Too High.')
        guess_right = False
        guess = int(guess)
     if random_num == guess:
        print("You got it! Good job.")
        guess_right = True
        the_end()
   except:
      print("That is not an int. Try again")**

1 Ответ

0 голосов
/ 15 октября 2019

У вас есть несколько проблем, но наиболее очевидной является комбинация нескольких вещей:

random_num = random_num(user_input1, user_input2)

Во-первых, эта строка переназначает символ random_num как результат вызоваrandom_num. После того, как эта строка произойдет, любые будущие вызовы random_num не будут работать, потому что функция «ушла». Во-вторых, и user_input1, и user_input2 не входят в область действия функции game_begin (они принадлежат функции game_loop).

Обе эти проблемы скрыты, поскольку вы используете "голый""excepts:

try:
    ...
except:
    print(...)

Вы должны только ловить ожидаемые исключения и обрабатывать их соответствующим образом, либо сделать так, чтобы эти исключения не возникали.

В конце концов, я былв состоянии получить его до в основном работать со следующим. Дополнительные проблемы, с которыми я столкнулся, упоминаются в комментариях.

import time, os, random

def game_loop():
    got_an_int = False
    while got_an_int == False:
        user_input1 = input("Enter the upper bound integer of the range:  ")
        user_input2 = input('Enter the lower bound integer of the range:  ')
        try: 
            user_input1 = int(user_input1)
            user_input2 = int(user_input2)
            print("Good job, that is a correct range.")
            got_an_int = True
            clear()

            # Move game_begin call here and use parameters, so that randint call works
            game_begin(user_input1, user_input2)
            break
        except:
            print("That is not a correct range. Try again.")

def clear():
    time.sleep(3)
    os.system('clear')
    time.sleep(1)

# Remove this - not needed
# def random_num(a,b):
#     random.randint(user_input1,user_input2)

def game_begin(in1, in2):
    guess_right = False

    # No longer overwriting variable/func symbol
    # Also, reverse order since range is taken Highest first then Lowest
    random_num = random.randint(in2, in1)

    # Initialize total_guess to 0
    total_guess = 0
    while random_num != guess_right:
        guess = input('Guess an integer in your range: ')

        # Can't add list and ints. I assume you wanted to keep a running total?
        # Lists aren't how you would do that.
        total_guess += 1
        try:
            guess = int(guess)
            if random_num > guess:
                print("Too Low.")
                guess_right = False
            if random_num < guess:
                print('Too High.')
                guess_right = False
                guess = int(guess)
            if random_num == guess:
                print("You got it! Good job.")
                guess_right = True

                # This function doesn't exist, so the loop won't ever actually end
                # NameError exception is raised
                the_end()
        except:
            print("That is not an int. Try again")
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...