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

使用Brython运行简单Python代码失败问题排查求助

问题排查与解决方案

核心问题1:全局变量未声明global

你在函数set_r里修改全局变量i和r,但未用global关键字声明,Brython会将它们当作局部变量处理,直接导致运行时出现变量未定义或修改无效的错误。

核心问题2:缩进与语法错误

注释中的循环代码存在两处致命语法问题:

  • if t in d:下方的r += d[t]、i += j、flag = False未缩进,不符合Python语法规则,直接阻断代码运行。
  • break位置错误,当前它位于for循环外,会直接终止外层while循环,导致循环仅执行一次就退出。

修正后的可运行代码

from browser import alert

i = 0
r = ''
s = 'nín'
d = {'nín':'нин','hǎo':'хао','lǎo':'лао','wài':'уай','ī': 'ӣ', 'bī': 'бӣ', 'jī': 'чжӣ', 'nī': 'нӣ', 'nīn': 'нӣнь', 'nīng': 'нӣн'}

def set_r():
    # 声明要修改的全局变量
    global i, r
    r = '12345'
    alert(i)
    while i < len(s):
        flag = True
        # 从最长子串开始匹配,避免短匹配优先覆盖长匹配
        for j in range(4, 0, -1):
            if i + j > len(s):
                continue
            t = s[i:i+j]
            if t in d:
                r += d[t]
                i += j
                flag = False
                break  # 找到匹配就跳出当前for循环
        if flag:
            # 无匹配子串时直接添加当前字符
            r += s[i]
            i += 1
    alert(r)

alert(s)
set_r()

额外优化说明

  • 调整子串匹配顺序为range(4,0,-1),优先匹配更长的子串,符合字典中长键优先的转换逻辑。
  • 增加if i + j > len(s): continue判断,避免切片操作越界。

内容的提问来源于stack exchange,提问作者Wolong Gao

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.29 07:57:23