本人研究的最优选择策略,通过下面程序运行结果,没问题。
import random,time
import numpy as np
import pandas as pd
def pl_play_choice(file_name):
""" 人工玩游戏 """
df = pd.read_csv(file_name).values[0]
random.shuffle(df)
# print(df)
for j in range(len(df)):
ch = input(f'第 {j+1} 次出的是:{df[j]},你要选吗?选输入1,不选输入0')
if ch == '1':
my_ch = df[j]
break
elif ch == '0':
print('你没有选,我们继续...')
df_st = sorted(df,reverse=True)
print('f最大的6个数分别是:{df_st[:6]}')
print(f'本次游戏中,你选的是{my_ch},系统是高是{df.max()},最低是{df.min()},平均是{df.mean()}')
def ct_play_choice(file_name):
""" 计算机模拟自己的选择策略 """
df = pd.read_csv(file_name).values[0]
random.shuffle(df)
max_p1_0 = max(df[:10])
max_p2_tem = sorted(df[10:20],reverse=True)
max_p2_0 = max_p2_tem[0]
max_p2_1 = max_p2_tem[1]
max_p3_0 = sorted(df[20:],reverse=True)[0]
if max_p2_0 > max_p1_0: # 如果第二组(10--19中的最大数大于第一组的最大数
choice_tem = max_p2_0
else:
if max_p3_0 > max_p2_1: # 如果第三组(20--29中的最大数大于第二组的次大数
choice_tem = max_p3_0
else:
choice_tem = df[-1] # 将最后一个选择
print(f'电脑选的是 -- {choice_tem}')
play_choice.append(choice_tem)
print('原数据从大到小排序前6个数:',sorted(df,reverse=True)[:6])
def make_data():
""" 创建原始数据,30个数 """
beg = random.randint(1,10000)
end_ = random.randint(1,10000)
if beg > end_:
beg,end_ = end_,beg
elif beg == end_:
end_ += beg * 2
base_lst = np.random.randint(beg,end_,[1,30])
df = pd.DataFrame(data=base_lst,columns=[ 'col{}'.format(i) for i in range(1,31)])
# print(df)
df.to_csv('0602列表数据.csv',index=False,encoding='UTF-8')
return base_lst # 返回值用于找出最大的6个数
base_lst = make_data() # 创建数据,返回数据
# print(base_lst)
first_6 = sorted(base_lst[0],reverse=True)[:30] # 存入大到小前6个数
# print(first_6)
play_choice = [] # 存放计算机模拟选择的数据
file_name = '0602列表数据.csv'
n = int(input('你想模拟多少次?'))
for i in range(n):
ct_play_choice(file_name)
play_choice.sort(reverse=True)
print(play_choice)
# 统计最大6个数,各出现多少次
for k in range(30):
print(f'第{k+1}大的数是{first_6[k]},共选择了{play_choice.count(first_6[k])}次,占{play_choice.count(first_6[k])/n*100}%。')