python如何定义一个函数选择题_Python逻辑题(以下10个选择题有唯一答案,请编写自定义函数judge遍历答案列表并报告正确答案),python,道,汇报...
python逻辑题(以下10道选择题有唯一答案,请编写自定义函数judge遍历答案列表并汇报正确答案)
1.题目、代码及答案演示
代码:
逻辑题
说明
:个人没用过
Jupyter Notebook
,题目也只是为了统计执行时间,就找了一个计时装饰器将遍历并判断逻辑的函数装饰了下,就可以看出运行的粗略时间了(一秒多一点)。
题目要求:
以下10道选择题有唯一答案,请编写自定义函数judge遍历答案列表并汇报正确答案。可使用内置或第三方数据类型,但judge函数的参数只能有1个。使用Jupyter Notebook的%%time魔术方法统计执行时间,控制在3秒内。
答案演示:
2.思路及要点说明
怎么说呢,这题的实现确实不难,甚至枯燥。
但是却让我思考了下人类大脑与借助计算机完成大量重复判断的思维的根本性差异!
为什么这么说呢?
首先,拿到这题,还没看题干,就会先像解决十几年学习生活中的文化课的选择题一样,一道一道地做了起来。
当一题没有思路后,会先放着,坐下一题。
最多看到后面第二三题慢慢发现,这十道题之间不少会有关联性。
而当经过长达一个多小时的人脑判断十道题目的答案后(并得到了正确答案),开始考虑实现的时候,
十分想
打
自己的
脸
!!
站在
计算机的角度
,我送入判断函数的那个参数必然是答案,也就是先用嵌套十层的
for
循环生成的结果列表。
我先将
4^10
个答案列表做出来,再将这些列表放到每一题中去过滤,发现一个答案列表不符合某题答案的过滤一下。
每一个包含判断的小题是一个不同形状的过滤网
,层层过滤即可。
真実(しんじつ)はいつもひとつ!
我们就得到了唯一的真相~
B C A C A C D A B A
代码在我仓库,希望使用的人能够遵循开源协议,维护开源社区
最重要的是,能给博客和仓库一个小星星~MUA
下面举一些例子说明,如果还有问题请留评论区。
从第三题入手
原因是因为,一下就可以过滤掉极大一部分
三题不相同
的答案列表,减轻后面的判断数量;
以下为判断:
def judge_3(res):
'''第三题 判断3624题有三个相同一个不同
第三题选A 3 624
第三题选B 6 324
第三题选C 2 364
第三题选D 4 362
'''
if res[2] == 1:
if res[5] == res[1] == res[3] and res[2] != res[5]:
judge_6(res)
elif res[2] == 2:
if res[2] == res[1] == res[3] and res[5] != res[2]:
judge_6(res)
elif res[2] == 3:
if res[2] == res[5] == res[3] and res[1] != res[2]:
judge_6(res)
elif res[2] == 4:
if res[2] == res[5] == res[1] and res[3] != res[2]:
judge_6(res)
外层的if判断每一题都有,判断当此题分别选ABCD的时候,相关联题目的逻辑;
在最开始,我们将ABCD映射为1234,通过判断过滤后最后的答案再映射回来即可;
当第三题选A,即
res[2] == 1
时,这里
res
就是生成的所有可能的答案数组;
通过分析,可以将语义转化为逻辑判断代码的有3 2 5 8 6 4 9 10题,那么17俩题起不到作用,没有使用到;
每一题的注释都有简单写判断的逻辑,这里就不做赘述
;
3.优化
3.1.生成答案列表的优化
生成答案列表原本用十层for循环:
for i1 in range(1, 5):
for i2 in range(1, 5):
for i3 in range(1, 5):
for i4 in range(1, 5):
for i5 in range(1, 5):
for i6 in range(1, 5):
for i7 in range(1, 5):
for i8 in range(1, 5):
for i9 in range(1, 5):
for i10 in range(1, 5):
pass
# result_list = [i1, i2, i3, i4, i5, i6, i7, i8, i9, i10]
现在更换成了
itertools.product(可迭代对象, repeat=重复次数)
来生成笛卡尔积对象
# 生成映射ABCD的1234的 十次笛卡尔积列表
for item in itertools.product(range(1, 5), repeat=10):
pass
可以看到十层for循环时间在0.1S,而
itertools.product(可迭代对象, repeat=重复次数)
时间在0.05s,得到了一倍的提升!
并且优化后每一个迭代对象不需要用list()方法转换为列表(直接用item送入判断函数即可),又省去了0.1S之多!
3.2.各小题判断顺序的更改
将关联选项更多的判断子函数优先放置,效果很小;
调整了几个答题顺序,发现效果不明显,因此这不是耗时的最主要原因
3.3.减少函数调用
接下来调整了函数调用结构,时间控制在了0.3秒内:
几次优化的过程可以从git历史中看到
4.总结
通过这种逻辑题的分析,就能看出,计算机的优势——快速作大量的判断工作,看起来复杂的背后是一个个简单的判断,真相只有一个,只要认真分析,就能发现蛛丝马迹,茅塞顿开
后面优化速度的内容让我好好思考并优化函数调用结构,不知道还有更好的思路么
最终运行时间控制在了
0.3
秒内,正确答案只有一个
BCACA,CDABA
python如何定义一个函数选择题_Python逻辑题(以下10个选择题有唯一答案,请编写自定义函数judge遍历答案列表并报告正确答案),python,道,汇报...相关推荐
- python编写的函数调用说法正确的是_python逻辑题(以下10道选择题有唯一答案,请编写自定义函数judge遍历答案列表并汇报正确答案)...
python逻辑题(以下10道选择题有唯一答案,请编写自定义函数judge遍历答案列表并汇报正确答案) 1.题目.代码及答案演示 代码: 逻辑题 说明:个人没用过Jupyter Notebook,题目 ...
- Linux的excel函数怎么编写,Excel中怎么编写自定义函数
Excel中的函数已经很方便,但仍然有时会觉得如果还能更方便就好了,这个时候,自定义函数就登场了.下面学习啦给大家分享Excel中编写自定义函数的方法吧. Excel中编写自定义函数的方法 我们要判断 ...
- python定义一个圆类_python设计一个Circle(圆)类,包括圆心位置`,半径,颜色等属性。编写构造方法和其他方法,计算周长和面积。...
** Python:设计一个Circle(圆)类,包括圆心位置`,半径,颜色等属性.编写构造方法和其他方法,计算周长和面积.请编写程序验证类的功能. class Circle: def -init-( ...
- python定义函数prime判断是否是素数_用自定义函数判断素数 用C语言编写自定义函数prime(int x),判断x是否为素数?...
用C语言编写自定义函数prime(int x),判断x是否为素数? int prime(int x) { int i,k k=(int)sqrt( (double)x ) for(i=2i&l ...
- python中定义类的关键字_在Python中,定义一个类使用什么关键字?
[多选题]技术应用的限制包括 [多选题]关于类和对象,下面说法正确的有? [判断题]温度越高,料液的粘度越小,扩散系数越大,可提高膜通量. [单选题]某企业有10台运货车,已知每台车每运行100小时平 ...
- C++定义一个Dog类,包含体重和年龄两个成员变量和相应的成员函数。
定义一个Dog类,包含体重和年龄两个成员变量和相应的成员函数. [问题描述] 定义一个Dog类,包含体重和年龄两个成员变量和相应的成员函数.声明一个实例dog1,体重为5,年龄为10,使用I/O流把d ...
- 算法训练 - P1101 ——有一份提货单,其数据项目有:商品名(MC)、单价(DJ)、数量(SL)。定义一个结构体prut,其成员是上面的三项数据。在主函数中定义一个prut类型的结构体数组,输入每
问题描述 有一份提货单,其数据项目有:商品名(MC).单价(DJ).数量(SL).定义一个结构体prut,其成员是上面的三项数据.在主函数中定义一个prut类型的结构体数组,输入每个元素的值,计算并输 ...
- Python使用numpy包编写自定义函数计算平均绝对误差(MAE、Mean Absolute Error)、评估回归模型和时间序列模型、解读MAE
Python使用numpy包编写自定义函数计算平均绝对误差(MAE.Mean Absolute Error).评估回归模型和时间序列模型.解读MAE 目录
- python编写自定义函数计算一维numpy数组中与指定目标数值最接近(距离最近)的数值(find closest value in numpy array to a certain value)
python编写自定义函数计算一维numpy数组中与指定目标数值最接近(距离最近)的数值(find closest value in numpy array to a certain value) 目 ...
最新文章
- db2不记录日志插入记录
- 计网 - HTTP 协议_强制缓存和协商缓存的区别
- 消息队列系列二(IOT中消息队列的应用)
- MySQL里面json_MySQL中的JSON
- 带有API网关的AWS Lambda
- 华为手机锁屏下拉怎么设置_华为手机怎么设置锁屏
- SVO: Fast Semi-Direct Monocular Visual Odometry
- 语义分割之原图与mask的可视化
- Python 3 进阶 —— print 打印和输出
- python求无序列表中位数_详解Python如何获取列表(List)的中位数
- 文件浏览器一定要有个向上级按钮
- 转速闭环直流调速系统
- mysql ix is_关于MySQL中的共享锁(S)、排它锁(X)、意向共享锁(IS)、意向排它锁(IX)...
- 鸿蒙系统怎么安装网易云音乐,网易云音乐鸿蒙版app下载-网易云音乐鸿蒙版最新版下载v1.7.5-IT168下载站...
- 1089: 手机短号 (多实例)
- Elastic App Search:免费的产品,可提供出色的搜索体验
- 韶关python培训班_《韶》字意思读音、组词解释及笔画数 - 新华字典 - 911查询
- 栅格化处理激光雷达点云数据
- 青少年CTF-弱口令实验室招新赛部分wp复现步骤
- JavaScript如何输入输出之如何使用JavaScript优雅编程