今天刷的第一道算法题,先拿一道简单点的试试手,这道题目的要求的是:
两个人甲乙在猜数字,甲先从1、2、3三个数字中随机抽3次,结果是猜测。乙随后也随机抽三次,结果是答案。然后对比甲乙两个人的结果。示例如下:
猜:(1、2、3),回答:[1,2,3]
那么结果就是猜对了3次
猜:(1、2、3)答:(3,2,1)
那么结果就是猜对了1次
猜:(1、2、3),回答:[3,3,1]
那么结果就是猜对了0次
即将猜测和回答两个作为参数输入,返回猜对的次数。
我想出来的几个答案如下所示:
<强>答案1 强>:
类解决方案: def游戏(自我,想:列表(int)答:列表(int))→int(警官): 数=0 因为我在zip(猜,答案): 如果我[0]==[1]: 数+=1 返回数
思路是:使用邮政将两个列表进行组合,返回每个列表中单个元素组成的元组,然后循环对比。如果相等就将临时变量值+ 1,最终返回统计结果。
<强>答案2:强>
类解决方案: def游戏(自我,想:列表(int)答:列表(int))→int(警官): 数=0 因为我在范围(3): 如果想[我]==回答(我): 数+=1 返回数
思路:转念一想,发现自己想复杂了,因为不需要拼接,就可以直接取这两个列表对应的值进行对比。就更简单了,直接循环对比,有相等的情况将临时变量+ 1,最后返回临时变量即可。
<强>答案3:强>
类解决方案: def游戏(自我,想:列表(int)答:列表(int))→int(警官): 返回总和(地图(λx, y: x==y,猜,答案))
思路:既然可以直接对比,那么能不能再简单点,我就想到了映射函数,映射函数第一个参数直接使用匿名函数来进行元素对比,然后收集函数执行结果。如果对比相等,结果是真的,对比不相等,结果是错误的。
最后返回地图函数直接结果的总和即可。
<强>答案4:强>
类解决方案: def游戏(自我,想:列表(int)答:列表(int))→int(警官): 如果猜==回答: 返回3 elif猜答案[0][0]==: 如果想[1]==回答[1]: 返回2 其他: 返回1 elif猜[1]==回答[1]: 如果想[2]==回答[2]: 返回2 其他: 返回1 elif猜[2]==回答[2]: 返回1 其他: 返回0
思路:将想和答案进行对比,这是我认为自己最差的一个答案,因为这种情况只适合这种简短的列表对比,再长一点整个代码就没法看了
。
Python初学者小游戏:猜数字
游戏逻辑:电脑随机生成一个数字,然后玩家猜数字,电脑提示猜的数字大了还是小了,供玩家缩小数字范围,达到既定次数后,玩家失败。若在次数内猜对,玩家获胜。
涉及知识点:random.randint(),输入print (), () (raw_input ())
参考实现代码:
#?usr/bin/env python utf - 8编码: ,, #使用打印(" ",结束=?标准 从__future__进口print_function ,, 进口操作系统 导入系统 导入的时间 进口随机 ,, #输入检测 ,, 而1: os.system才能(cls) 打印才能(“你好,欢迎来到Guess_Number游戏…之间的数字1 - 10…”) print(才能“请输入你想要的水平(1 ~ 10):”,结束=") 水平才能=raw_input (" ") diff才能=11-int(级别) 如果差异才能在10或diff & lt; 1: ,,,印刷(“无效输入…”) ,,,time . sleep (0.3) 其他的才能: ,才能打破 ,, #猜数字流程 ,, count_num=0 跑=random.randint (10) 而count_num & lt;差异: count_num才能+=1 打印才能(str (count_num) +”:”+“请输入你猜数:”,结束=") 数量=才能raw_input () 数量=才能int(数量) 如果数量才能& lt;跑: ,,,印刷(“太少……”) ,才能继续 elif数量才能比;跑: ,,,印刷(“大…”) ,才能继续 其他的才能: ,,,印刷(“Congraduation !你赢了……”) ,才能打破 如果count_num==diff: 打印才能(“你输了…”)
到此这篇关于Python猜数字算法题详解的文章就介绍到这了,更多相关Python实现猜数字内容请搜索以前的文章或继续浏览下面的相关文章希望大家以后多多支持!