Python:如何用python编写无限猴子定理

1.问题:

《python数据结构与算法》一书中有无限猴子定理一题,问题如下:
在这里插入图片描述

2.代码

搜集网上代码,调试如下:

import random

NUM = 1000
char_list = [chr(c+ord('a')) for c in range(26)]  
# 返回c+ord('a')对应的ascii码,a~z
char_list.append(' ')  
# 添加空格 该列表内的字符一共有27个

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)])
        # temp_list.insert(index, char_list[random.randint(0, 26)])
    return ''.join(temp_list)  
    # 将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 = 0
    best_time = 0
    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__':
    # 当.py文件被直接运行时,if __name__ == '__main__'之下的代码块将被运行;
    # 当.py文件以模块形式被导入时,if __name__ == '__main__'之下的代码块不被运行。
    fun3(NUM)

运行结果:

# 省略前边1-992的结果
993TH similarity is 0.000
994TH similarity is 0.087
995TH similarity is 0.087
996TH similarity is 0.043
997TH similarity is 0.000
998TH similarity is 0.000
999TH similarity is 0.000
1000TH similarity is 0.043
the best similarity is 46TH 0.174

猜你喜欢

转载自blog.csdn.net/qq_40797015/article/details/111908838