T
T
Ternick2018-10-12 23:26:19
Python
Ternick, 2018-10-12 23:26:19

Bot for guessing numbers between 0 and 100?

game_lib library:

import random
import os.path
import os

global KEY_GENERATE
KEY_GENERATE = random.randint(0, 100)	

def human_game():

  try:
    print("Игра началась !")
    INPUT_KEY = int(input("Введите число :\n"))
    return INPUT_KEY
  except ValueError:
    print("Введите именно число !")


def validator_number(INPUT_KEY):
  
  global KEY_GENERATE
  if KEY_GENERATE == INPUT_KEY:
    return True
  else:
    return False

def validator_sign(INPUT_KEY):

  global KEY_GENERATE
  if KEY_GENERATE > INPUT_KEY:
    VALUE = "+"
    return VALUE
  else:
    VALUE1 = "-"
    return VALUE1

The bot that I tried to make, it should guess a number in the range from 0 to 100. But for some reason, there are a lot of errors due to infinite recursion (reference to the loop) and from a recent code change, the error UnboundLocalError: local variable 'THE_SECOND_NUMBER' referenced before assignment .
Here is the function or bot itself:
import game_lib

def g1(attemps_value, value_id, dict_id):

  dict_attemps = {
  -4 : -4,
  -3 : -3,
  -2 : -2,
  -1 : -1,
  0 : 0,
  1 : 5,
  2 : 10,
  3 : 15,
  4 : 20,
  }
  START_NUMBER = 50
  if value_id == 0:
    print("Бот начал свою работу !")
    CHECK_FIRST_RESULT = game_lib.validator_number(START_NUMBER)
    print(START_NUMBER)
    if CHECK_FIRST_RESULT == True:
      attemps_value += 1
      print("Бот закончил свою работу и угадал загаданное число !\nЧисло попыток затраченных ботом на угадывание числа: " + str(attemps_value) + " !")
    else:
      CHECK_ERROR_SIGN = game_lib.validator_sign(START_NUMBER)
      if CHECK_ERROR_SIGN == str("+"):
        attemps_value += 1
        dict_id += 1
        print("Загаданное число больше введённого ботом !")
        g1(attemps_value, 1, dict_id)
      elif CHECK_ERROR_SIGN == str("-"):
        attemps_value += 1
        dict_id -= 1
        print("Загаданное число меньше введённого ботом !")
        g1(attemps_value, 1, dict_id)
      else:
        print("Неопознонная ошибка !")

  elif value_id == 1:
    THE_SECOND_NUMBER = START_NUMBER + dict_attemps[dict_id]
    CHECK_FIRST_RESULT = game_lib.validator_number(THE_SECOND_NUMBER)
    print(THE_SECOND_NUMBER)
    if CHECK_FIRST_RESULT == True:
      attemps_value += 1
      print("Бот закончил свою работу и угадал загаданное число !\nЧисло попыток затраченных ботом на угадывание числа: " + str(attemps_value) + " !")
    else:
      CHECK_ERROR_SIGN = game_lib.validator_sign(THE_SECOND_NUMBER)
      if CHECK_ERROR_SIGN == str("+"):
        attemps_value += 1
        dict_id += 1
        print("Загаданное число больше введённого ботом !")
        g1(attemps_value, 2, dict_id)
      elif CHECK_ERROR_SIGN == str("-"):
        attemps_value += 1
        dict_id -= 1
        print("Загаданное число меньше введённого ботом !")
        g1(attemps_value, 2, dict_id)
      else:
        print("Неопознонная ошибка !")

  elif value_id == 2:
    THE_THIRD_NUMBER = THE_SECOND_NUMBER + dict_attemps[dict_id]
    CHECK_FIRST_RESULT = game_lib.validator_number(THE_THIRD_NUMBER)
    print(THE_THIRD_NUMBER)
    if CHECK_FIRST_RESULT == True:
      attemps_value += 1
      print("Бот закончил свою работу и угадал загаданное число !\nЧисло попыток затраченных ботом на угадывание числа: " + str(attemps_value) + " !")
    else:
      CHECK_ERROR_SIGN = game_lib.validator_sign(THE_THIRD_NUMBER)
      if CHECK_ERROR_SIGN == str("+"):
        attemps_value += 1
        dict_id += 1
        print("Загаданное число больше введённого ботом !")
        g1(attemps_value, 3, dict_id)
      elif CHECK_ERROR_SIGN == str("-"):
        attemps_value += 1
        dict_id -= 1
        print("Загаданное число меньше введённого ботом !")
        g1(attemps_value, 3, dict_id)
      else:
        print("Неопознонная ошибка !")

  elif value_id == 3:
    THE_FOURTH_NUMBER = THE_THIRD_NUMBER + dict_attemps[dict_id]
    CHECK_FIRST_RESULT = game_lib.validator_number(THE_FOURTH_NUMBER)
    print(THE_FOURTH_NUMBER)
    if CHECK_FIRST_RESULT == True:
      attemps_value += 1
      print("Бот закончил свою работу и угадал загаданное число !\nЧисло попыток затраченных ботом на угадывание числа: " + str(attemps_value) + " !")
    else:
      CHECK_ERROR_SIGN = game_lib.validator_sign(THE_FOURTH_NUMBER)
      if CHECK_ERROR_SIGN == str("+"):
        attemps_value += 1
        dict_id += 1
        print("Загаданное число больше введённого ботом !")
        g1(attemps_value, 4, dict_id)
      elif CHECK_ERROR_SIGN == str("-"):
        attemps_value += 1
        dict_id -= 1
        print("Загаданное число меньше введённого ботом !")
        g1(attemps_value, 4, dict_id)
      else:
        print("Неопознонная ошибка !")

  elif value_id == 4:
    THE_FIFTH_NUMBER = THE_FOURTH_NUMBER + dict_attemps[dict_id]
    CHECK_FIRST_RESULT = game_lib.validator_number(THE_FIFTH_NUMBER)
    print(THE_FIFTH_NUMBER)
    if CHECK_FIRST_RESULT == True:
      attemps_value += 1
      print("Бот закончил свою работу и угадал загаданное число !\nЧисло попыток затраченных ботом на угадывание числа: " + str(attemps_value) + " !")
    else:
      CHECK_ERROR_SIGN = game_lib.validator_sign(THE_FIFTH_NUMBER)
      if CHECK_ERROR_SIGN == str("+"):
        attemps_value += 1
        dict_id += 1
        print("Загаданное число больше введённого ботом !")
        g1(attemps_value, 5, dict_id)
      elif CHECK_ERROR_SIGN == str("-"):
        attemps_value += 1
        dict_id -= 1
        print("Загаданное число меньше введённого ботом !")
        g1(attemps_value, 5, dict_id)
      else:
        print("Неопознонная ошибка !")

  elif value_id == 5:
    THE_SIXTH_NUMBER = THE_FIFTH_NUMBER + dict_attemps[dict_id]
    CHECK_FIRST_RESULT = game_lib.validator_number(THE_SIXTH_NUMBER)
    print(THE_SIXTH_NUMBER)
    if CHECK_FIRST_RESULT == True:
      attemps_value += 1
      print("Бот закончил свою работу и угадал загаданное число !\nЧисло попыток затраченных ботом на угадывание числа: " + str(attemps_value) + " !")
    else:
      CHECK_ERROR_SIGN = game_lib.validator_sign(THE_SIXTH_NUMBER)
      if CHECK_ERROR_SIGN == str("+"):
        attemps_value += 1
        dict_id += 1
        print("Загаданное число больше введённого ботом !")
        g1(attemps_value, 1, 1)
      elif CHECK_ERROR_SIGN == str("-"):
        attemps_value += 1
        dict_id -= 1
        print("Загаданное число меньше введённого ботом !")
        g1(attemps_value, 1, -1)
      else:
        print("Неопознонная ошибка !")

g1(0, 0, 0)

Also, for some reason, he clumsy numbers:
y5gdjKdDbWo.jpg
And if you look into the bot, he certainly shouldn’t add numbers like that because there is a dictionary there.

Answer the question

In order to leave comments, you need to log in

1 answer(s)
S
Stanislav Nekrasov, 2018-10-13
@Ternick

I think I did something interesting... Try it.

def get_n():
    try:
        number = int(input("Введите число от 0 до 100: "))
        if 0 <= number <= 100:
            return number
    except ValueError:
        pass
    print("Вы ввели неправильное число!")
    return get_n()


def bot(n=0, r=0, d=50):
    print(f"Бот пробует число {n}, это его {r} попытка.")
    if n == number:
        print(f"Бот угадал число, число было {n}, и затратил на это {r} попыток.")
    else:
        if n < number:
            bot(n + d, r + 1, d)
        else:
            bot(n - d, r + 1, int(d / 2) if int(d / 2) > 0 else 1)


number = get_n()
bot()

The only thing is that sometimes it repeats values.
UPD: You can solve this problem by replacing: with:
bot(n + d, r + 1, d - 1 if d - 1 > 0 else 1)

Didn't find what you were looking for?

Ask your question

Ask a Question

731 491 924 answers to any question