@Proger_Matthew
Только начал учить программирование. Учу Пайтон.

Почему не работает простой код бота на пайтоне?

Здравствуйте !
Я пишу бота в telebot, который будет играть со мной в морской бой. Код еще, разумеется неготовый, но он почему-то вообще не работает. Бот ничего не выдает даже на команду /start
Отмечу, что прежде чем писать код бота, я написал алгоритм расстановки кораблей на поле бота и поместил его в файл bot_field.py. Там ошибки 100% нет.
Вот код:
import telebot
import random
from bot_field import bot_ships


dicty = ['А', 'Б', 'В', 'Г', 'Д', 'Е', 'Ж', 'З', 'И']
user_field = ['А1', 'А2', 'А3', 'А4', 'А5', 'А6', 'А7', 'А8', 'А9', 'Б1', 'Б2', 'Б3', 'Б4', 'Б5', 'Б6', 'Б7', 'Б8',
                   'Б9', 'В1', 'В2', 'В3', 'В4', 'В5', 'В6', 'В7', 'В8', 'В9', 'Г1', 'Г2', 'Г3', 'Г4', 'Г5', 'Г6', 'Г7',
                   'Г8', 'Г9', 'Д1', 'Д2', 'Д3', 'Д4', 'Д5', 'Д6', 'Д7', 'Д8', 'Д9', 'Е1', 'Е2', 'Е3', 'Е4', 'Е5', 'Е6',
                   'Е7', 'Е8', 'Е9', 'Ж1', 'Ж2', 'Ж3', 'Ж4', 'Ж5', 'Ж6', 'Ж7', 'Ж8', 'Ж9', 'З1', 'З2', 'З3', 'З4', 'З5',
                   'З6', 'З7', 'З8', 'З9', 'И1', 'И2', 'И3', 'И4', 'И5', 'И6', 'И7', 'И8', 'И9']

user_answ_inl_keyboard = telebot.types.InlineKeyboardMarkup(True)#это клава,для того, чтобы отвечать, попал бот или нет
butt_mimo = telebot.types.InlineKeyboardButton(text='Мимо', callback_data='missed')
butt_hit = telebot.types.InlineKeyboardButton(text='Ранил', callback_data='hit')
butt_kill = telebot.types.InlineKeyboardButton(text='Убил', callback_data='kill')

count = 0#ввел просто так пока что

bot = telebot.TeleBot('1576385428:AAGBJQsm0fbSCl5RmGaz8wnmuMRJvrqL2oQ')

@bot.message_handler(commands=['start'])
def command_answ(message):
    bot.send_message(message.chat.id, text='Привет! Я бот, с которым ты можешь поиграть в морской бой⚓')

@bot.message_handler(content_types=['text'])
def playing_game(message):
    if message.text == '/play':#команда для запуска игры
        bot_vessels = bot_ships()#расставляю корабли
        bot.send_message(message.chat.id, text='Начинаю игру! Я хожу первым:')
        cell = random.choice(user_field)
        bot.send_message(message.chat.od, text=f'{cell}', reply_markup=user_answ_inl_keyboard)
        ship = []#это массив, содержащий координаты корабля, в который попадет бот
        user_field.remove(cell)
        bot.register_next_step_handler(message.chat.id, user_response)#передача действий на другую функцию - обработчик инлайновой клавы


@bot.callback_query_handler(func = lambda call: True)
def user_response(call):
    if call.data == 'messed':
        #потом поставлю что - то сюда
    elif call.data == 'hit':#тут я еще не прописал, как бот должен добивать корабль, когда нашел одну из его клеток
        ship.append(cell)#добавляем координаты корабля, в которого попали
        pass
    elif call.data == 'kill':
        ship.append(cell)#добавляем координаты корабля, в которого попали

        for i in ship:   #удаляем этим циклом клетки, окружающие убитый корабль, дабы не стрелять туда, где других кораблей быть не может
            x, y = i[0], i[1]
            for j in range(dicty.index(x) - 1, dicty.index(x) + 2):
                for g in range(int(y) - 1, int(y) + 2):
                    try:
                        impossible_cell = dicty[j] + str(int(g))
                        user_field.remove(impossible_cell)
                    except:
                        pass

        ship = []#обнуляем массив, чтобы потом при новом попадании начать снова заносить в него координаты другого корабля


Да, сам по себе код пока не выполняет что-то цельное. Но я прикрепил скрин, где показывается, что в коде не читаются даже какие-то переменные. Буду космически признателен, если кто-то реально поможет. Заранее большое спасибо!6036aa5fc2fde757825490.png6036aa6a11907408939985.png
  • Вопрос задан
  • 110 просмотров
Решения вопроса 1
phaggi
@phaggi Куратор тега Python
лужу, паяю, ЭВМы починяю
ship и bot_vessel серый потому, что он в своей области видимости не используется после объявления.

Красным ship и cell подчеркиваются потому, что они до момента вызова не были объявлены в области видимости переменных, в которой вы пытаетесь их вызвать.

Почитайте про области видимости переменных.
Ответ написан
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы