前言:
目前大家对“python引入数学”大致比较注意,同学们都需要剖析一些“python引入数学”的相关文章。那么小编也在网络上汇集了一些有关“python引入数学””的相关知识,希望朋友们能喜欢,兄弟们快快来学习一下吧!"""最优选择方案问题:包含数学和哲学苏格拉底和弟子们走到一片麦田里,对弟子们说,“你们从麦田的这一头走到那一头,中间可以拾起一株麦穗,我们看看谁能找到最大的麦穗。”他接着说 “当然,你们只有一次机会,一旦选定了,之后即便遇到更大的麦穗,也不能再采摘;而且你们也不能回头去采摘那些已经错过的大麦穗。” 弟子们听完之后,面面相觑。为了拿到最大的麦穗,你会采取什么样的策略呢?我用python写了个程序验证自己的策略。"""import randomimport pandas as pdfrom pyecharts.charts import Bar,Linefrom pyecharts import options as opts# def get_better_coin(n=20):# """ 这是人工选择的函数,让你做选择,返回值是你所选择的麦穗是第几多 """# ans = 0# up_k = random.randint(1000,10000)# down_k = random.randint(2000,11000)# if up_k < down_k:# up_k,down_k = down_k,up_k# coins_list = [ random.randint(down_k,up_k) for i in range(n)]# for i,coin in enumerate(coins_list,1):# choice = input(f'第{i}株麦穗有{coin}颗,你要选吗?y/n: ')# if choice in ['y','Y']:# ans = coin# break# coins_list.sort(reverse=True)# max_ = coins_list.index(ans) + 1# print(f'你选的是{ans},是第{max_}大的数。')# print(coins_list,'\n','#' * 20)# return max_def get_better_coin(t,n=20): """ 机器验证本人策略:假设你会遇到20株麦穗,根据标记前1-6的最大值maxnum6,在7-13中,如果有大于maxnum6者,则选; 如果没有,则标记1-13中的最大的第4株麦穗maxnum7_13,在14-20中,如果有大于等于maxnum7_13者,就选它,否则就选最后一株。返回值是你所选择的麦穗是第几多 """ up_k = random.randint(1000,10000) down_k = random.randint(2000,11000) if up_k < down_k: up_k,down_k = down_k,up_k coins_list = [ random.randint(down_k,up_k) for i in range(n)] ans = coins_list[-1] maxnum6 = max(coins_list[:6]) tem = coins_list[:13] tem.sort(reverse=True) maxnum7_13 = tem[3] # 经过十万次测试,tem[3]最佳,即13之后选前面13个中大于等于第四大的数。结果平均为3.23 for coin in coins_list[6:13]: if coin >= maxnum6: ans = coin break else: for coin in coins_list[13:]: if coin >= maxnum7_13: ans = coin break coins_list_tem = coins_list.copy() coins_list_tem.sort(reverse=True) max_ = coins_list_tem.index(ans) + 1 print(f'在第{t}次测试中,你选的是{ans},是第{max_}大的数。') print(coins_list) print(coins_list_tem,'\n','#' * 20) return max_def mk_bar(x,y): """绘制图表""" bar = Bar() bar.add_xaxis(x) bar.add_yaxis(series_name='选中大小数的数量',y_axis=y, markline_opts=opts.MarkLineOpts(data=[opts.MarkLineItem(type_="min", name="最小值"), opts.MarkLineItem(type_="max", name="最大值"), opts.MarkLineItem(type_="average", name="平均值")]), ) bar.render('最佳选麦穗策略.html')n = int(input('你想测试多少次?'))my_choices = [ get_better_coin(i,20) for i in range(1,n+1)]print(my_choices)avg = sum(my_choices) / nprint(f'你测试了{n}轮,每轮20个数,平均取到了{avg}大的数。')# 将结果进行聚合df = pd.DataFrame(my_choices).value_counts()df_describe = df.describe()print(df_describe)df.sort_index(inplace=True)print(df)x = list(df.index)y = list(df)mk_bar(x,y)"""经过程序10万次验证,平均可以选到排名3.2左右的大的麦穗,见下图"""
版权声明:
本站文章均来自互联网搜集,如有侵犯您的权益,请联系我们删除,谢谢。
标签: #python引入数学