Java函数转Python函数后不符合预期,求修正方案
问题排查与代码修正
原Java代码逻辑回顾
原函数核心逻辑:
- 遍历
splitText数组,找到与clozeText[0]匹配的位置i - 检查
splitText[i + emptySpaces]是否等于clozeText[emptySpaces + 1] - 若两个条件均满足,将
splitText中从i到i+emptySpaces(包含两端)的所有元素拼接为结果返回
Python改写的错误点
- 内层循环遍历错误:Python代码中
for x in emptySpaces:是错误写法,emptySpaces是整数,无法直接作为可迭代对象遍历。原Java代码是遍历从i到i+emptySpaces的连续索引,对应Python需用range(i, i + emptySpaces + 1)(因range为左闭右开区间,结束值需+1才能包含i+emptySpaces)。 - 索引越界风险:原Java代码未处理
i + emptySpaces超出splitText长度的情况,Python中直接访问会抛出IndexError,需增加边界判断规避崩溃。
修正后的Python代码
def matchText(splitText, clozeText, emptySpaces): result = "" for i in range(len(splitText)): # 先判断索引是否越界,避免报错 if i + emptySpaces >= len(splitText): continue if splitText[i] == clozeText[0]: if splitText[i + emptySpaces] == clozeText[emptySpaces + 1]: # 遍历从i到i+emptySpaces的所有索引 for x in range(i, i + emptySpaces + 1): result += splitText[x] return result
补充说明
- 新增
i + emptySpaces >= len(splitText)的判断,防止访问不存在的索引导致程序崩溃。 - 内层循环改用
range(i, i + emptySpaces + 1),完全对齐原Java代码的遍历逻辑,确保拼接正确的元素范围。
内容的提问来源于stack exchange,提问作者FlyingBluwe
相关产品推荐
相关产品推荐

