作者:hhh_Moon_hhh
https://blog.csdn.net/m0_54218263/article/details/116001249
一、需求介绍
客户的需求是根据彩票的前两期的情况,如果存在某个斜着的两个数字相等,那么就买第三期的同一个位置处的彩票,对于极速飞艇,如果相等的数字是:1-5,那就买6-10,如果相等的数字是:6-10,那就买1-5;对于极速赛车,如果相等的数字是:1-5,那就买1-5,如果相等的数字是:6-10,,那就买6-10。

然后,根据这个方案,有可能会买中,但是也有可能买不中,于是,客户希望我可以统计出来在100天中,按照这种方法,连续6次以及6次以上的购买彩票才能够命中一次奖的次数以及分别所对应的时间,对于这个案例,我们下面详细分析。
二、以极速飞艇为例进行数据分析
(在这里,我们先利用 Jupyter Notebook 来进行分析,然后,在得到成果以后,利用 Pycharm 来进行完整的程序设计。)
②、请求头

然后我们在程序中进行代码书写获取数据:


然后进行一定的预处理:

def reverse_list(lst): """ 准换列表的先后顺序 :param lst: 原始列表 :return: 新的列表 """ return [ele for ele in reversed(lst)] low_list = ["01", "02", "03", "04", "05"]high_list = ["06", "07", "08", "09", "10"]N = 0n = 0record_number = 1 list_data_number = []dict_time_record = {}for k in range(1152): if k < 1150: new_result1 = reverse_list(new_response["result"]["data"])[k] new_result2 = reverse_list(new_response["result"]["data"
])[k + 1] new_result3 = reverse_list(new_response["result"]["data"])[k + 2] data1 = new_result1['preDrawCode'].split(',') data2 = new_result2['preDrawCode'].split(',') data3 = new_result3['preDrawCode'].split(',') for m in range(10): if m == 0: if data2[0] == data1[1]: N += 1 if (data2[0] in low_list and data3[0] in low_list) or (data2[0] in high_list and data3[0] in high_list): n += 1 list_data_number.append(record_number) if f"{record_number}" in dict_time_record.keys(): dict_time_record[f"{record_number}"].append(new_result3['preDrawTime'][11:]) else: dict_time_record[f"{record_number}"] = [new_result3['preDrawTime'][11:]] record_number = 1 else: record_number += 1 break elif m == 9: if data2[9] == data1[8]: N += 1 if (data2[9] in low_list and data3[9] in low_list) or (data2[9] in high_list and data3[9] in high_list): n += 1 list_data_number.append(record_number) if f"{record_number}" in dict_time_record.keys(): dict_time_record[f"{record_number}"].append(new_result3['preDrawTime'][11:]) else: dict_time_record[f"{record_number}"] = [new_result3['preDrawTime'][11:]] record_number = 1 else: record_number += 1 break else: if data2[m] == data1[m + 1] or data2[m] == data1[m - 1]:
N += 1 if (data2[m] in low_list and data3[m] in low_list) or (data2[m] in high_list and data3[m] in high_list): n += 1 list_data_number.append(record_number) if f"{record_number}" in dict_time_record.keys(): dict_time_record[f"{record_number}"].append(new_result3['preDrawTime'][11:]) else: dict_time_record[f"{record_number}"] = [new_result3['preDrawTime'][11:]] record_number = 1 else: record_number += 1 breakprint(f"日期:{new_response['result']['data'][0]['preDrawTime'][:10]},总的梯子数为{N}个,一共有{n}次命中,一共有{N - n}次挂了")list_data_number.sort()dict_record = {}for i in list_data_number: if f"{i}" in dict_record.keys(): dict_record[f"{i}"] += 1 else: dict_record[f"{i}"] = 1 for j in dict_record.keys(): if (int(j) >= 6) and (int(j) < 15): print(f"买{j}次才中奖的次数为{dict_record[j]}") print(dict_time_record[j]) str0 = "" for letter in dict_time_record[j]: str0 += letter str0 += ", " print(str0)
运行结果的展示如下图所示:

data_list = []for h in range(31): data_list.append(f'1-{h + 1}')for h in range(28): data_list.append(f'2-{h + 1}')for h in range(31): data_list.append(f'3-{h + 1}')for h in range(20): data_list.append(f'4-{h + 1}')
通过上述的代码,我们即实现了时间列表的设置,然后我们循环遍历这个列表访问不同日期的彩票数据即就是得到了不同时间的数据,然后再利用上述的分析方法来进行数据分析,即就是可以得到了多天的彩票数据分析的结果了。
这里我们可以采用xlwt 模块来进行excel表格的写入操作啦,具体的写入就不必过多赘述了。三、完整的代码展示
import requestsimport chardetimport jsonimport xlwt def reverse_list(lst): """ 准换列表的先后顺序 :param lst: 原始列表 :return: 新的列表 """ return [ele for ele in reversed(lst)] data_list = []for h in range(31): data_list.append(f'1-{h + 1}')for h in range(28): data_list.append(f'2-{h + 1}')for h in range(31): data_list.append(f'3-{h + 1}')for h in range(20): data_list.append(f'4-{h + 1}') wb = xlwt.Workbook() sh = wb.add_sheet('彩票分析数据处理') sh.write(0, 0, "日期")sh.write(0, 1, "梯子数目")sh.write(0, 2, "命中数目")sh.write(0, 3, "挂的数目")sh.write(0, 4, "6次中的数目")sh.write(0, 5, "6次中的时间")sh.write(0, 6, "7次中的数目")sh.write(0, 7, "7次中的时间")sh.write(0, 8, "8次中的数目")sh.write(0, 9, "8次中的时间")sh.write(0, 10, "9次中的数目")sh.write(0, 11, "9次中的时间")sh.write(0, 12, "10次中的数目")sh.write(0, 13, "10次中的时间")sh.write(0, 14, "11次中的数目")sh.write(0, 15, "11次中的时间")sh.write(0, 16, "12次中的数目")sh.write(0, 17, "12次中的时间")sh.write(0, 18, "13次中的数目")sh.write(0, 19, "13次中的时间")sh.write(0, 20, "14次中的数目")sh.write(0, 21, "14次中的时间") sheet_seek_position = 1for data in data_list: low_list = ["01", "02", "03", "04", "05"] high_list = ["06", "07", "08", "09", "10"] N = 0
n = 0 url = f'https://api.api68.com/pks/getPksHistoryList.do?date=2021-{data}&lotCode=10037' headers = { 'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) ' 'AppleWebKit/537.36 (KHTML, like Gecko) ' 'Chrome/90.0.4430.72 Safari/537.36' } response = requests.get(url=url, headers=headers) response.encoding = chardet.detect(response.content)['encoding'] new_response = json.loads(response.text) sh.write(sheet_seek_position, 0, new_response['result']['data'][0]['preDrawTime'][:10]) record_number = 1 list_data_number = [] dict_time_record = {} for k in range(1152): if k < 1150: new_result1 = reverse_list(new_response["result"]["data"])[k] new_result2 = reverse_list(new_response["result"]["data"])[k + 1] new_result3 = reverse_list(new_response["result"]["data"])[k + 2] data1 = new_result1['preDrawCode'].split(',') data2 = new_result2['preDrawCode'].split(',') data3 = new_result3['preDrawCode'].split(',') for m in range(10): if m == 0: if data2[0] == data1[1]: N += 1 if (data2[0] in low_list and data3[0] in high_list) or (data2[0] in high_list and data3[0] in low_list): n += 1 list_data_number.append(record_number) if f"{record_number}" in dict_time_record.keys(): dict_time_record[f"{record_number}"].append(new_result3['preDrawTime'][11:]) else: dict_time_record[f"{record_number}"] = [new_result3['preDrawTime'][11:]] record_number = 1 else: record_number += 1 break elif m == 9: if data2[9] == data1[8]: N += 1 if (data2[9] in low_list and data3[9] in high_list) or (data2[9] in high_list and data3[9] in low_list): n += 1 list_data_number.append(record_number) if
f"{record_number}" in dict_time_record.keys(): dict_time_record[f"{record_number}"].append(new_result3['preDrawTime'][11:]) else: dict_time_record[f"{record_number}"] = [new_result3['preDrawTime'][11:]] record_number = 1 else: record_number += 1 break else: if data2[m] == data1[m + 1] or data2[m] == data1[m - 1]: N += 1 if (data2[m] in low_list and data3[m] in high_list) or (data2[m] in high_list and data3[m] in low_list): n += 1 list_data_number.append(record_number) if f"{record_number}" in dict_time_record.keys(): dict_time_record[f"{record_number}"].append(new_result3['preDrawTime'][11:]) else: dict_time_record[f"{record_number}"] = [new_result3['preDrawTime'][11:]] record_number = 1 else: record_number += 1 break print(f"日期:{new_response['result']['data'][0]['preDrawTime'][:10]},总的梯子数为{N}个,一共有{n}次命中,一共有{N - n}次挂了") sh.write(sheet_seek_position, 1, N) sh.write(sheet_seek_position, 2, n) sh.write(sheet_seek_position, 3, N - n) list_data_number.sort() dict_record = {} for i in list_data_number: if f"{i}" in dict_record.keys(): dict_record[f"{i}"] += 1 else: dict_record[f"{i}"] = 1 for j in dict_record.keys(): if (int(j) >= 6) and (int(j) < 15): print(f"买{j}次才中奖的次数为{dict_record[j]}") print(dict_time_record[j]) str0 = "" for letter in dict_time_record[j]: str0 += letter str0 += ", " print(str0) sh.write(sheet_seek_position, 4 + (int(j) - 6) * 2, dict_record[j])
sh.write(sheet_seek_position, 4 + (int(j) - 6) * 2 + 1, str0[:-2]) sheet_seek_position += 1 wb.save('极速飞艇彩票分析结果.xls')
运行结果展示:
展示1、

展示2、

然后,我们只需要稍稍改变一点点算法,其他的部分是完全一样的啦,从而即就是可以实现极速赛车的数据分析了啦。 for m in range(10): if m == 0: if data2[0] == data1[1]: N += 1 if (data2[0] in low_list and data3[0] in low_list) or (data2[0] in high_list and data3[0] in high_list): n += 1 list_data_number.append(record_number) if f"{record_number}" in dict_time_record.keys(): dict_time_record[f"{record_number}"].append(new_result3['preDrawTime'][11:]) else: dict_time_record[f"{record_number}"] = [new_result3['preDrawTime'][11:]] record_number = 1 else: record_number += 1 break elif m == 9: if data2[9] == data1[8]: N += 1 if (data2[9] in low_list and data3[9] in low_list) or (data2[9] in high_list and data3[9] in high_list): n += 1 list_data_number.append(record_number) if f"{record_number}" in dict_time_record.keys(): dict_time_record[f"{record_number}"].append(new_result3['preDrawTime'][11:]) else: dict_time_record[f"{record_number}"] = [new_result3['preDrawTime'][11:]] record_number = 1
else: record_number += 1 break else: if data2[m] == data1[m + 1] or data2[m] == data1[m - 1]: N += 1 if (data2[m] in low_list and data3[m] in low_list) or (data2[m] in high_list and data3[m] in high_list): n += 1 list_data_number.append(record_number) if f"{record_number}" in dict_time_record.keys(): dict_time_record[f"{record_number}"].append(new_result3['preDrawTime'][11:]) else: dict_time_record[f"{record_number}"] = [new_result3['preDrawTime'][11:]] record_number = 1 else: record_number += 1 break
总结
这个需求不得不说确实是比较简单的,但是,我在完成这个任务的过程中的确是学到了以前一些我并不太注意的东西。同时呢,也熟练的掌握了一些编程的技巧,虽然说这种比较简单的活儿报酬不会太高,但是,我认为在这个过程中我确实学到了不少东西,同时也成长了不少,因此,无论怎么说,其实也都还是挺不错的啦。最后,如果本文对你有帮助的话,请在留言区给个三连哦!