Python猜数字算法题详解


Posted in Python onMarch 01, 2020

今天刷的第一道算法题,先拿一道简单点的试试手,这道题目的要求是:

两个人甲乙在猜数字,甲先从1,2,3三个数字中随机抽3次,结果是guess。乙随后也随机抽三次,结果是answer。然后对比甲乙两个人的结果。示例如下:

guess:[1,2,3], answer: [1, 2, 3]

那么结果就是猜对了3次

guess: [1,2,3] answer:[3,2,1]

那么结果就是猜对了1次

guess: [1,2,3], answer:[3, 3,1]

那么结果就是猜对了0次

即将guess和answer两个作为参数输入,返回猜对的次数。

我想出来的几个答案如下所示:

答案1

class Solution:
  def game(self, guess: List[int], answer: List[int]) -> int:
    count = 0
    for i in zip(guess, answer):
      if i[0] == i[1]:
        count += 1
    return count

思路是:使用zip将两个列表进行组合,返回每个列表中单个元素组成的元组,然后循环对比。如果相等就将临时变量值+1,最终返回统计结果。

答案2:

class Solution:
  def game(self, guess: List[int], answer: List[int]) -> int:
    count = 0
    for i in range(3):
      if guess[i] == answer[i]:
        count+=1
    return count

思路:转念一想,发现自己想复杂了,因为不需要拼接,就可以直接取这两个列表对应的值进行对比。就更简单了,直接循环对比,有相等的情况将临时变量+1,最后返回临时变量即可。

答案3:

class Solution:
  def game(self, guess: List[int], answer: List[int]) -> int:
    return sum(map(lambda x,y: x==y, guess, answer))

思路:既然可以直接对比,那么能不能再简单点,我就想到了map函数,map函数第一个参数直接使用匿名函数来进行元素对比,然后收集函数执行结果。如果对比相等,结果是True,对比不相等,结果是False。

最后返回map函数直接结果的总和即可。

答案4:

class Solution:
  def game(self, guess: List[int], answer: List[int]) -> int:
    if guess == answer:
      return 3
    elif guess[0] == answer[0]:
      if guess[1] == answer[1]:
        return 2
      else:
        return 1
    elif guess[1] == answer[1]:
      if guess[2] == answer[2]:
        return 2
      else:
        return 1
    elif guess[2] == answer[2]:
      return 1
    else:
      return 0

思路:将guess和answer进行对比,这是我认为自己最差的一个答案,因为这种情况只适合这种简短的列表对比,再长一点整个代码就没法看了。

内容扩展:

Python初学者小游戏:猜数字

游戏逻辑:电脑随机生成一个数字,然后玩家猜数字,电脑提示猜的数字大了还是小了,供玩家缩小数字范围,达到既定次数后,玩家失败。若在次数内猜对,玩家获胜。

涉及知识点:random.randint() , print() , input() ( raw_input() )

参考实现代码:

#!/usr/bin/env python 
# encoding: utf-8 
  
#使用print("",end=...)标准 
from __future__ import print_function 
  
import os 
import sys 
import time 
import random 
  
#输入检测 
  
while 1: 
  os.system('cls') 
  print ("Hello , Welcome to Guess_Number Games...The Number is between 1 - 10...") 
  print ("Please input the level you want(1~10): ",end = '') 
  level = raw_input("") 
  diff = 11-int(level) 
  if diff > 10 or diff <1: 
    print ("Invalid Input...") 
    time.sleep(0.3) 
  else: 
    break
  
#猜数字流程 
  
count_num = 0
ran = random.randint(1,10) 
while count_num < diff: 
  count_num += 1
  print (str(count_num)+": "+"Please input the number you guess: ",end = '') 
  number = raw_input() 
  number = int(number) 
  if number < ran: 
    print ("Too Little...") 
    continue
  elif number > ran: 
    print ("Too Big...") 
    continue
  else: 
    print ("Congraduation! You Win...") 
    break
if count_num == diff: 
  print ("You Lose...")

到此这篇关于Python猜数字算法题详解的文章就介绍到这了,更多相关Python实现猜数字内容请搜索三水点靠木以前的文章或继续浏览下面的相关文章希望大家以后多多支持三水点靠木!

Python 相关文章推荐
jupyter安装小结
Mar 13 Python
git使用.gitignore设置不生效或不起作用问题的解决方法
Jun 01 Python
Python闭包执行时值的传递方式实例分析
Jun 04 Python
关于Pycharm无法debug问题的总结
Jan 19 Python
Django框架模板语言实例小结【变量,标签,过滤器,继承,html转义】
May 23 Python
numpy中的ndarray方法和属性详解
May 27 Python
python 根据字典的键值进行排序的方法
Jul 24 Python
keras中的卷积层&amp;池化层的用法
May 22 Python
Python使用matplotlib绘制圆形代码实例
May 27 Python
解决pyinstaller 打包exe文件太大,用pipenv 缩小exe的问题
Jul 13 Python
python中pivot()函数基础知识点
Jan 03 Python
python DataFrame中stack()方法、unstack()方法和pivot()方法浅析
Apr 06 Python
Python paramiko 模块浅谈与SSH主要功能模拟解析
Feb 29 #Python
python 中的paramiko模块简介及安装过程
Feb 29 #Python
python中使用paramiko模块并实现远程连接服务器执行上传下载功能
Feb 29 #Python
vue学习笔记之动态组件和v-once指令简单示例
Feb 29 #Python
Python实现动态给类和对象添加属性和方法操作示例
Feb 29 #Python
Python使用type动态创建类操作示例
Feb 29 #Python
Django框架静态文件处理、中间件、上传文件操作实例详解
Feb 29 #Python
You might like
国王的咖啡这么大来头,名字的由来是什么
2021/03/03 咖啡文化
php-accelerator网站加速PHP缓冲的方法
2008/07/30 PHP
php二维数组排序与默认自然排序的方法介绍
2013/04/27 PHP
PHP、Nginx、Apache中禁止网页被iframe引用的方法
2020/10/01 PHP
PHP使用file_get_content设置头信息的方法
2016/02/14 PHP
javascript获取作用在元素上面的样式属性代码
2012/09/20 Javascript
AngularJS入门教程之Select(选择框)详解
2016/07/27 Javascript
JS使用正则表达式实现关键字替换加粗功能示例
2016/08/03 Javascript
JS实现改变HTML上文字颜色和内容的方法
2016/12/30 Javascript
JS实现针对给定时间的倒计时功能示例
2017/04/11 Javascript
使用vue2实现购物车和地址选配功能
2018/03/29 Javascript
超出JavaScript安全整数限制的数字计算BigInt详解
2018/06/24 Javascript
详解Vue组件之作用域插槽
2018/11/22 Javascript
浅析Proxy可以优化vue的数据监听机制问题及实现思路
2018/11/29 Javascript
小程序中英文混合排序问题解决
2019/08/02 Javascript
CountUp.js实现数字滚动增值效果
2019/10/17 Javascript
jquery检测上传文件大小示例
2020/04/26 jQuery
详解React的回调渲染模式
2020/09/10 Javascript
[03:39]DOTA2英雄梦之声_第05期_幽鬼
2014/06/23 DOTA
深入讨论Python函数的参数的默认值所引发的问题的原因
2015/03/30 Python
使用Python操作MySQL的一些基本方法
2015/08/16 Python
Python使用ConfigParser模块操作配置文件的方法
2018/06/29 Python
详解Python中的各种转义符\n\r\t
2019/07/10 Python
Python OpenCV调用摄像头检测人脸并截图
2020/08/20 Python
python 魔法函数实例及解析
2019/09/25 Python
Python ckeditor富文本编辑器代码实例解析
2020/06/22 Python
解决Python paramiko 模块远程执行ssh 命令 nohup 不生效的问题
2020/07/14 Python
简单说说tomcat的配置
2013/05/28 面试题
RIP版本1跟版本2的区别
2013/12/30 面试题
客服实习的个人自我鉴定
2013/10/20 职场文书
考试违纪检讨书
2014/02/02 职场文书
将相和教学反思
2014/02/04 职场文书
努力学习演讲稿
2014/05/10 职场文书
2016简历自荐信优秀范文
2016/01/29 职场文书
python爬虫请求库httpx和parsel解析库的使用测评
2021/05/10 Python
MybatisPlus EntityWrapper如何自定义SQL
2022/03/22 Java/Android