我不明白为什么我的代码会跳过两个文件中重叠的一些数字

2024-09-26 18:16:05 发布

您现在位置:Python中文网/ 问答频道 /正文

我正在编写一个文件重叠函数,它接受两个参数:longestFile和shorterFile。我想看看两个文件是否有相同的编号,如果有,它会将该编号附加到一个空列表中。以下是我在程序中使用的两个列表: This is the file that contain prime numbersThis is the second file that contains happy numbers.

def longestFile(firstFile, secondFile):
    if len(firstFile)>len(secondFile):
        return firstFile
    else:
        return secondFile

def shortestFile(firstFile, secondFile):
    if len(firstFile) < len(secondFile):
        return firstFile
    else:
        return secondFile

def middleNumber(theLongestFile):
    return theLongestFile[len(theLongestFile)//2]

def fileOverlap(lstFirstFile,lstSecondFile):
    lstMatchingNums = []
    lstLongerFile = longestFile(lstFirstFile,lstSecondFile)
    lstShortestFile = shortestFile(lstFirstFile,lstSecondFile)
    for eachLines in range(len(lstShortestFile)):
        lstLongerFile = longestFile(lstFirstFile,lstSecondFile)
        for eachLine in range(len(lstLongerFile)):
            if lstShortestFile[eachLines] == middleNumber(lstLongerFile):
                lstMatchingNums.append(lstShortestFile[eachLines])
                break
            elif lstShortestFile[eachLines] < middleNumber(lstLongerFile):
                lstLongerFile = lstLongerFile[0:(len(lstLongerFile)//2)+1]
                if len(lstLongerFile) <= 2 and lstLongerFile[0] == lstShortestFile[eachLines]:
                    lstMatchingNums.append(lstShortestFile[eachLines])
                     break
                elif middleNumber(lstLongerFile) != lstShortestFile[eachLines] and len(lstLongerFile) <=2:
                     break
            elif lstShortestFile[eachLines] > middleNumber(lstLongerFile):
                lstLongerFile = lstLongerFile[(len(lstLongerFile)//2):]
                if len(lstLongerFile) <= 2 and lstLongerFile[0] == lstShortestFile[eachLines]:
                     lstMatchingNums.append(lstShortestFile[eachLines])
                     break
                elif middleNumber(lstLongerFile) != lstShortestFile[eachLines] and len(lstLongerFile) <= 2:
                     break
      return lstMatchingNums
lstHappyNums = open('happynumbs.txt','r')
lstReadingHappyLines = lstHappyNums.readlines()
lstReadingPrimeLines = lstPrimeNumsFile.readlines()
lstPrimeNumsFile.close()
print(fileOverlap(lstReadingHappyLines,lstReadingPrimeLines))

如果我运行这个程序,我会得到:['19\n', '193\n', '239\n', '263\n', '293\n', '313\n', '331\n', '367\n', '379\n', '383\n', '397\n', '487\n', '563\n', '617\n', '653\n', '673\n', '683\n', '709\n', '739\n', '761\n', '881\n', '907\n', '937\n'] 我不知道为什么我会得到部分重叠的数字,而不是全部


Tags: lenreturnifdefbreakfirstfilesecondfilemiddlenumber

热门问题