尝试查找下一个最大值时出现Python算法错误

Kri*_*ice 3 python algorithm file output

我编写了一个扫描文件"ID"的算法,并将该值与整数i的值进行比较(我将整数转换为字符串进行比较,并修剪了"\n"前缀从线).该算法比较文件中每一行的这些值(每个ID).如果它们相等,则算法将i增加1并使用i的新值进行reccurtion.如果值不相等,则将其与文件中的下一行进行比较.它执行此操作,直到它具有不在文件中的i值,然后返回该值以用作下一条记录的ID.

我的问题是我有一个ID的文件列表1,3,2,因为我删除了ID为2的记录,然后创建了一个新的记录.这表明算法正常工作,因为它为新记录提供了之前删除的ID 2.但是,当我创建新记录时,下一个ID为3,导致我的ID列表读取:1,3,2,3而不是1,3,2,4.贝娄是我的算法,带有print()命令的结果.我可以看到它出错的地方,但无法解决原因.有任何想法吗?

算法:

def _getAvailableID(iD):
        i = iD
        f = open(IDFileName,"r")
        lines = f.readlines()
        for line in lines:
            print("%s,%s,%s"%("i=" + str(i), "ID=" + line[:-1], (str(i) == line[:-1])))
            if str(i) == line[:-1]:
                i += 1
                f.close()
                _getAvailableID(i)
        return str(i)
Run Code Online (Sandbox Code Playgroud)

输出:(运行算法以查找ID应为4的记录的适当ID时的输出):

i=1,ID=1,True
i=2,ID=1,False
i=2,ID=3,False
i=2,ID=2,True
i=3,ID=1,False
i=3,ID=3,True
i=4,ID=1,False
i=4,ID=3,False
i=4,ID=2,False
i=4,ID=2,False
i=2,ID=3,False
i=2,ID=2,True
i=3,ID=1,False
i=3,ID=3,True
i=4,ID=1,False
i=4,ID=3,False
i=4,ID=2,False
i=4,ID=2,False
Run Code Online (Sandbox Code Playgroud)

Pet*_*vaz 6

我认为你的程序失败了,因为你需要改变:

_getAvailableID(i)
Run Code Online (Sandbox Code Playgroud)

 return _getAvailableID(i)
Run Code Online (Sandbox Code Playgroud)

(目前递归函数找到了丢弃的正确答案.)

但是,将您看到的所有ID放入集合中以提高程序效率可能会更好.

例如在伪代码中:

S = set()
loop over all items and S.add(int(line.rstrip()))
i = 0
while i in S:
   i += 1
return i
Run Code Online (Sandbox Code Playgroud)