我是编程新手,非常感谢有关如何编写此类程序以便更快执行的任何建议。目标是生成随机字符串,直到找到特定的字符串,如本例中的'cat',然而,要点不是尽可能快地找到字符串'cat'。从我的初始版本开始,我做了一些改进,现在比起初快了大约9倍。 我发现的一些事情是使用列表比使用更快:
random.choice(string.ascii_lowercase)
只保留必要数量的字符比连续向RandomLetters添加NewLetter变量要快。 如何改进或重写此代码?我还用最后一行代码来确定每秒检查的字母数。我认为这可以更好地衡量程序运行的速度而不是时间,因为在某些情况下,“cat”会更快找到,而某些情况则需要更多尝试。什么是更准确的方法来确定程序有多快?我使用while循环来找到50只猫,否则我发现在将LettersGenerated分成时间时,结果差异很大。这是我的代码:
import random
import timeit
start = timeit.default_timer()
Alphabet = ['a','b','c','d','e','f','g','h','i','j','k','l','m','n','o','p','q','r','s','t','u','v','w','x','y','z']
LettersGenerated = 0
NamesFound = 1
Name = 'cat'
RandomLetters = ''
while NamesFound <= 50:
while Name not in RandomLetters:
NewLetter = random.choice(Alphabet)
RandomLetters = RandomLetters + NewLetter
LettersGenerated += 1
lenght = len(RandomLetters)
if lenght == len(Name)+1:
RandomLetters = RandomLetters[1:]
while Name not in RandomLetters:
NewLetter = random.choice(Alphabet)
RandomLetters = RandomLetters + NewLetter
LettersGenerated += 1
RandomLetters = RandomLetters[1:]
NamesFound += 1
RandomLetters = ''
stop = timeit.default_timer()
print(stop-start)
print(LettersGenerated/(stop-start))