无限猴子定理:猴子在打字机键盘上随机敲击键无限时间几乎肯定会输入一个给定的文本,例如威廉·莎士比亚的全集。
题目:使用python当作猴子,用python随机生成给定的一句话需要多久。模拟方法为:
第一个函数:生成指定长度的随机字符串。
第二个函数:将随机生成的字符串与目标字符串进行比较,给出相似度。
第三个函数:重复多次后给出相似度最高的字符串。
目前写的程序如下:
import random NUM = 1000 char_list = [chr(c+ord('a')) for c in range(26)] char_list.append(' ') target_list = 'hwnzy is a handsome boy' def fun1(): temp_list = [] for index in range(27): temp_list.append(char_list[random.randint(0, 26)]) return ''.join(temp_list) def fun2(temp_list): score = 0 for index in range(len(target_list)): if target_list[index] == temp_list[index]: score += 1 return score def fun3(times): best_score = -1 best_time = -1 best_list = [] for index in range(times): temp_list = fun1() score = fun2(temp_list) if score > best_score: best_score = score best_time = index best_list = temp_list print('%dTH similarity is %.3f' % (index+1, score/len(target_list))) print("the best similarity is %dTH %.3f" % (best_time, best_score/len(target_list))) print(best_list) if __name__ == '__main__': print(target_list) fun3(NUM)
内容来源于最近在看一本关于Python数据结构和算法的书籍《Problem Solving with Algorithms and Data Structures using Python》,挺有意思的。