使用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
相关产品推荐
相关产品推荐

