【发布时间】:2015-06-20 17:37:29
【问题描述】:
我编写了一个算法,它扫描“ID”文件并将该值与整数 i 的值进行比较(我已将整数转换为字符串以进行比较,并且我已经修剪了“\ n" 前缀)。该算法比较文件中每一行(每个 ID)的这些值。如果它们相等,则算法将 i 增加 1,并使用新的 i 值进行递归。如果该值不相等,则将其与文件中的下一行进行比较。它会执行此操作,直到 i 的值不在文件中,然后返回该值以用作下一条记录的 ID。
我的问题是我有一个 ID 文件,其中列出了 1、3、2,因为我删除了 ID 为 2 的记录,然后创建了一个新记录。这表明该算法正常工作,因为它为新记录提供了 ID 2,该 ID 之前已被删除。但是,当我创建新记录时,下一个 ID 为 3,导致我的 ID 列表显示为:1,3,2,3 而不是 1,3,2,4。 Bellow 是我的算法,带有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)
输出: (运行算法以查找 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
【问题讨论】:
-
您是否有理由必须使用递归函数,或者您可以使用列表(或列表)或字典?
标签: python algorithm file output