@Roberto-0f

Как из class 'nonetype' преобразовать в int?

def graph(variables):
    for i in range(8):
        y = variables[0]
        k = variables[4]
        x = variables[8]
    plt.figure()
    plt.axis([-10, 10, -10, 10])
    plt.grid(True)
    plt.plot((x, -x), (y, -y))
    plt.plot([x, -x], [y, -y], 'ro')
    plt.plot((0, 0), (10, -10), color='#ff7f0e')
    plt.plot((-10, 10), (0, 0), color='#ff7f0e')
    plt.ylabel('Линейная функция')
    plt.show()
    plt.savefig('мой график')
    return plt

bot.send_message(message.from_user.id, 'Введи данные в формате  >>  y  =  k  *  x. Например  -  (5  =  1  *  5)')
bot.register_next_step_handler(message, graph)  #Полученное сообщение в формате <class 'NoneType'>, Как его преобразовать в int?

выдает ошибку
y = variables[0]
TypeError: 'Message' object is not subscriptable
  • Вопрос задан
  • 138 просмотров
Пригласить эксперта
Ответы на вопрос 2
@alexbprofit
Junior SE
vars = list(variables)
перед
for i in range(8):
        y = vars[0]
        k = vars[4]
        x = vars[8]
Ответ написан
@o5a
1. Для построения графика линейной функции не нужно вводить значения x, y, нужно только значение коэффициента k
2. Для построения самой картинки нужно не использовать напрямую plt.show() и т.п., а сохранять результат в файл/поток и потом отправлять в чат

Пример
import telebot
from matplotlib import pyplot as plt
import numpy as np
from io import BytesIO

bot = telebot.TeleBot(TOKEN)

@bot.message_handler(commands = ['graph'])
def plot_graph(message):
    msg = bot.send_message(message.chat.id, 'Введи k для линейной функции  >>  y  =  k  *  x')
    # направляем в процедуру формирования графика, использующую k из текста
    bot.register_next_step_handler(msg, graph)

def graph(message):
    k = int(message.text)
    x = np.arange(-10.0, 10.0, 0.01)
    y = k * x

    # формируем график
    fig, ax = plt.subplots()
    ax.plot(x, y)
    ax.set(xlabel='x', ylabel='y', title='Линейная функция')
    ax.grid()

    # сохраняем результат (картинку графика) в двоичном потоке, который потом отсылаем в чат
    fp = BytesIO()
    fig.savefig(fp, format='png')
    fp.seek(0)
    bot.send_photo(message.chat.id, fp)
Ответ написан
Комментировать
Ваш ответ на вопрос

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

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