我一直在读一本学习python的书,这本书有以下挑战之一:
自我检查
这是一个真正涵盖到目前为止所有内容的自我检查。你可能有 听说无限猴子定理?该定理陈述了一只猴子 在打字机键盘上随机敲击键无限量 时间几乎肯定会键入给定的文本,例如完整的 威廉莎士比亚的作品。好吧,假设我们用一个替换猴子 Python函数。你认为Python需要多长时间? 只生成莎士比亚的一句话的功能?这句话 我们要拍的是:“它就像狡猾的人一样”
你不想在浏览器中运行这个,所以启动 你最喜欢的Python IDE。我们模拟这个的方式是写一个 生成长度为28个字符的字符串的函数 从字母表中的26个字母中选择随机字母加上 空间。我们将编写另一个函数,对每个生成的函数进行评分 通过将随机生成的字符串与目标进行比较来实现字符串。
第三个功能会反复调用generate和score,然后100% 这些字母是正确的我们已经完成了。如果字母不正确 然后我们将生成一个全新的字符串。让它更容易遵循 你的程序进展第三个功能应该打印出最好的 到目前为止生成的字符串及其每1000次尝试的分数。
我能够使用以下代码实现挑战的这一部分: (我是python的新手)
import random
target = 'methinks it is like a weasel'
target_len = 28
def string_generate(strlen):
alphabet = 'abcdefghijklmnopqrstuvwxyz ' #26 letters of the alphabet + space
res = ''
for i in range(strlen):
res += alphabet[random.randrange(27)]
return res
def score_check(target,strlen):
score = 0
res = string_generate(strlen)
for i in range(strlen):
if res[i] == target[i]:
score += 1
return score, res
def progress_check():
counter = 0
score = 0
res = ''
while score != 28:
score_temp, res_temp = score_check(target, target_len)
counter += 1
if score_temp > score:
score, res = score_temp, res_temp
print(res, score)
else:
score, res = score, res
return res, score
progress_check()
然后有以下额外的挑战:
自我检查挑战
看看你是否可以通过保持自我检查来改进程序 字母是正确的,只修改最好的一个字符 到目前为止。这是'hill类中的一种算法 攀登'算法,即我们只保留结果,如果它更好 比前一个。
但是,我无法弄清楚这个爬山算法是什么,以及如何将其实现到我现有的代码中。
请解释如何实施这种爬山算法,非常感谢你们!