python函数有时工作,但有时无法工作

python函数有时工作,但有时无法工作,python,eclipse,Python,Eclipse,不久前我写了下面的代码,当时也有这个问题。当时我忽略了它,当我在请一位“专家”查看它之后回到它时,它工作得很好 问题是,有时程序似乎无法在我的笔记本电脑上运行main(),可能是因为算法太重了。有办法解决这个问题吗?我不想以后继续有这个问题。同样的代码在另一台我访问受限的计算机上运行得很好 (p.S.出现问题的笔记本电脑是MacBook Air 2015,运行该程序应该没有问题。此外,它在打印“hi”后会停止) 它没有给出错误消息,只是没有从main()打印任何内容。它应该打印一系列的字符串,这

不久前我写了下面的代码,当时也有这个问题。当时我忽略了它,当我在请一位“专家”查看它之后回到它时,它工作得很好

问题是,有时程序似乎无法在我的笔记本电脑上运行main(),可能是因为算法太重了。有办法解决这个问题吗?我不想以后继续有这个问题。同样的代码在另一台我访问受限的计算机上运行得很好

(p.S.出现问题的笔记本电脑是MacBook Air 2015,运行该程序应该没有问题。此外,它在打印“hi”后会停止)

它没有给出错误消息,只是没有从main()打印任何内容。它应该打印一系列的字符串,这些字符串逐渐聚合到“我认为它就像一只黄鼠狼”。在eclipse中,它显示代码仍在处理中,但它没有输出任何它应该输出的内容

import random

def generateOne(strlen):
    alphabet = "abcdefghijklmnopqrstuvwxyz "
    res = ""
    for i in range(strlen):
        res = res + alphabet[random.randrange(27)]
    return res

def score(goal, teststring):
    numSame = 0
    for i in range(len(goal)):
        if goal[i] == teststring[i]:
            numSame = numSame + 1
    return numSame / len(goal)

def main():
    goalstring = "methinks it is like a weasel"
    chgoal = [0]*len(goalstring)
    newstring = generateOne(28)
    workingstring = list(newstring)
    countvar = 0
    finalstring = ""
    while score(list(goalstring), workingstring) < 1:
        if score(goalstring, newstring) > 0:
            for j in range(len(goalstring)):
                if goalstring[j] == newstring[j] and chgoal[j] == 0:
                    workingstring[j] = newstring[j]
                    chgoal[j] = 1
                    finalstring = "".join(workingstring)
                    countvar = countvar + 1
                    print(finalstring)
        newstring = generateOne(28)
    finalstring = "".join(workingstring)
    print(finalstring) 
    print(countvar)

print("hi")
if __name__ == '__main__':
    main()
print("ho")
随机导入
def generateOne(strlen):
alphabet=“abcdefghijklmnopqrstuvxyz”
res=“”
对于范围内的i(strlen):
res=res+字母表[random.randrange(27)]
返回res
def分数(目标、测试字符串):
numSame=0
对于射程内的i(len(目标)):
如果目标[i]==teststring[i]:
numSame=numSame+1
返回numSame/len(目标)
def main():
goalstring=“我觉得它就像一只黄鼠狼”
chgoal=[0]*len(goalstring)
newstring=generateOne(28)
工作字符串=列表(新闻字符串)
countvar=0
finalstring=“”
当得分(列表(进球)、工作字符串)<1时:
如果得分(进球串、新闻串)>0:
对于范围内的j(len(球门环)):
如果goalstring[j]==newstring[j]和chgoal[j]==0:
工作字符串[j]=新闻字符串[j]
chgoal[j]=1
finalstring=“.join(工作字符串)
countvar=countvar+1
打印(最终打印)
newstring=generateOne(28)
finalstring=“.join(工作字符串)
打印(最终打印)
打印(countvar)
打印(“hi”)
如果uuuu name uuuuuu='\uuuuuuu main\uuuuuuu':
main()
印刷品(“ho”)

您可以稍微优化一下。字符串是不可变的-每次向字符串添加一个字符时,都会创建一个新字符串并替换旧字符串。改为使用字符列表-如果可以通过分解和分隔符“”打印字符列表,也不要一直使用
“”。join()

对你来说:

0:00:00.017490
0:00:00.017427
0:00:00.013481
0:00:00.017657
0:00:00.013210

我很确定这不会解决你的笔记本电脑的问题,但它还是有点快

错误信息是什么?您必须提供更多信息。没有错误消息,它只是不从main()打印任何内容。它应该打印一系列的字符串,这些字符串逐渐聚合到“我认为它就像一只黄鼠狼”。在eclipse中,它显示代码仍在处理中,但它没有输出任何与之相关的内容:
res=res+alphabet[random.randrange(27)]
=
res+=random.choice(alphabet)
或:
def generateOne(strlen):alphabet=“abcdefghjjjjklmnopqrstuvxyz”返回“”。加入(random.choices)(字母表,k=strlen))
0:00:00.012536
0:00:00.012664
0:00:00.008590
0:00:00.012575
0:00:00.012576
0:00:00.017490
0:00:00.017427
0:00:00.013481
0:00:00.017657
0:00:00.013210