You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Telegram矩阵计算器机器人循环填充数组失效问题求助

问题分析与修复方案

核心问题1:函数调用名不匹配

在mm1函数中,你调用了UmnMatNaChislo3(message),但实际定义的矩阵填充函数是UmnMatNaChislo3Range,名称不匹配导致矩阵填充代码完全没被执行,程序直接跳过这一步进入后续的UmnMatNaChislo5函数。

核心问题2:矩阵填充逻辑错误

就算修正函数名,当前UmnMatNaChislo3Range的逻辑也无法正确填充矩阵——它只会获取用户的一次输入,然后重复n1次添加相同的行,不符合矩阵输入需求。而且Telegram机器人是异步交互模式,不能在一个函数里通过循环等待用户多次输入,必须用register_next_step_handler分步处理每一行的输入。

修复后的完整代码示例

n1=0
m1=0
n2=0
m2=0
matrix = []
current_row = 0

@bot.message_handler(commands=['5'])
def UmnMatNaChislo1(message):
    bot.send_message(message.chat.id,'Введите значение количества строк матрицы А:\n')
    bot.register_next_step_handler(message,nn1)

def nn1(message):
    global n1
    try:
        ni1 = message.text.strip()
        n1=int(ni1)
        UmnMatNaChislo2(message)
    except ValueError:
        bot.send_message(message.chat.id,'请输入有效的整数!')
        bot.register_next_step_handler(message,nn1)

def UmnMatNaChislo2(message):
    bot.send_message(message.chat.id,'Введите значение количества столбцов матрицы А:\n')
    bot.register_next_step_handler(message, mm1)

def mm1(message):
    global m1
    try:
        mi1 = message.text.strip()
        m1=int(mi1)
        global current_row
        current_row = 0
        bot.send_message(message.chat.id, f'Введите {m1} чисел для строки {current_row+1}(用空格分隔):')
        bot.register_next_step_handler(message, input_matrix_row)
    except ValueError:
        bot.send_message(message.chat.id,'请输入有效的整数!')
        bot.register_next_step_handler(message,mm1)

def input_matrix_row(message):
    global current_row, matrix, n1, m1
    try:
        row_data = list(map(int, message.text.strip().split()))
        if len(row_data) != m1:
            bot.send_message(message.chat.id, f'错误!需要输入{m1}个数字,请重新输入:')
            bot.register_next_step_handler(message, input_matrix_row)
            return
        matrix.append(row_data)
        current_row +=1
        if current_row < n1:
            bot.send_message(message.chat.id, f'Введите {m1} чисел для строки {current_row+1}(用空格分隔):')
            bot.register_next_step_handler(message, input_matrix_row)
        else:
            UmnMatNaChislo5(message)
    except ValueError:
        bot.send_message(message.chat.id,'请输入有效的整数,用空格分隔!')
        bot.register_next_step_handler(message, input_matrix_row)

def UmnMatNaChislo5(message):
    bot.send_message(message.chat.id,"Введите число, на которое требуется умножить матрицу А\n")
    bot.register_next_step_handler(message, lint)

def lint(message):
    try:
        num = int(message.text.strip())
        result = [[num * elem for elem in row] for row in matrix]
        response = "Результат умножения матрицы на число:\n"
        for row in result:
            response += ' '.join(map(str, row)) + '\n'
        bot.send_message(message.chat.id, response)
        # 重置全局变量,避免后续命令数据污染
        global n1, m1, matrix, current_row
        n1 = 0
        m1 = 0
        matrix = []
        current_row = 0
    except ValueError:
        bot.send_message(message.chat.id,'请输入有效的整数!')
        bot.register_next_step_handler(message, lint)

关键修复点说明

  • 修正了函数调用不匹配的问题,替换为异步分步输入矩阵行的逻辑
  • 增加输入合法性校验(整数判断、列数匹配),提升机器人稳定性
  • 采用逐行输入的异步交互模式,符合Telegram机器人的运行机制
  • 计算完成后重置全局变量,避免后续命令执行时出现旧数据干扰

内容的提问来源于stack exchange,提问作者Андрей Богданов

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.08 13:21:24