3

我一直在关注一本学习python的书,这本书有以下挑战之一:

自检

这是一个自我检查,真正涵盖了到目前为止的所有内容。你可能听说过无限猴子定理?该定理指出,一只猴子在打字机键盘上随机敲击无限时间的键几乎肯定会键入给定的文本,例如威廉·莎士比亚的全集。好吧,假设我们用 Python 函数替换猴子。你认为一个 Python 函数只生成一个莎士比亚的句子需要多长时间?我们要拍摄的句子是:“我认为它就像一只黄鼠狼”</p>

你不想在浏览器中运行这个,所以启动你最喜欢的 Python IDE。我们将模拟这种情况的方法是编写一个函数,该函数通过从字母表中的 26 个字母加上空格中选择随机字母来生成一个 28 个字符长的字符串。我们将编写另一个函数,通过将随机生成的字符串与目标进行比较,对每个生成的字符串进行评分。

第三个函数将重复调用 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()

然后它有以下额外的挑战:

自检挑战

看看您是否可以通过保持正确的字母并仅修改迄今为止最好的字符串中的一个字符来改进自检中的程序。这是“爬山”算法中的一种算法,也就是说,我们只保留比前一个更好的结果。

但是,我无法弄清楚这个爬山算法是什么,以及如何将它实现到我现有的代码中。

请解释如何实现这个爬山算法,非常感谢大家!

4

0 回答 0