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 相关文章推荐
使用PM2+nginx部署python项目的方法示例
Nov 07 Python
Python使用pyshp库读取shapefile信息的方法
Dec 29 Python
详解Python解决抓取内容乱码问题(decode和encode解码)
Mar 29 Python
python opencv实现图像边缘检测
Apr 29 Python
python无序链表删除重复项的方法
Jan 17 Python
Pycharm调试程序技巧小结
Aug 08 Python
基于python实现坦克大战游戏
Oct 27 Python
python实现登录与注册系统
Nov 30 Python
Python Django 后台管理之后台模型属性详解
Apr 25 Python
python如何利用traceback获取详细的异常信息
Jun 05 Python
用Python爬取各大高校并可视化帮弟弟选大学,弟弟直呼牛X
Jun 11 Python
Python接口自动化之文件上传/下载接口详解
Apr 05 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
PHP生成不重复随机数的方法汇总
2014/11/19 PHP
[原创]smarty简单模板变量输出方法
2016/07/09 PHP
使用JS操作页面表格,元素的一些技巧
2007/02/02 Javascript
Javascript 加载和执行-性能提高篇
2012/12/28 Javascript
caller和callee的区别介绍及演示结果
2013/03/10 Javascript
jQuery对象数据缓存Cache原理及jQuery.data方法区别介绍
2013/04/07 Javascript
Jquery实现页面加载时弹出对话框代码
2013/04/19 Javascript
用Javascript来生成ftp脚本的小例子
2013/07/03 Javascript
node.js中的fs.fsync方法使用说明
2014/12/15 Javascript
js实现可兼容IE、FF、Chrome、Opera及Safari的音乐播放器
2015/02/11 Javascript
jQuery EasyUI学习教程之datagrid点击列表头排序
2016/07/09 Javascript
jQuery实现的超链接提示效果示例【附demo源码下载】
2016/09/09 Javascript
Javascript使用SWFUpload进行多文件上传
2016/11/16 Javascript
手动用webpack搭建第一个ReactApp的示例
2018/04/11 Javascript
node中使用log4js4.x版本记录日志的方法
2019/08/20 Javascript
解决layui弹框失效的问题
2019/09/09 Javascript
JS实现json数组排序操作实例分析
2019/10/28 Javascript
在vue和element-ui的table中实现分页复选功能
2019/12/04 Javascript
vue分页插件的使用方法
2019/12/25 Javascript
Javascript摸拟自由落体与上抛运动原理与实现方法详解
2020/04/08 Javascript
JavaScript进阶(四)原型与原型链用法实例分析
2020/05/09 Javascript
动态创建类实例代码
2009/10/07 Python
Django objects的查询结果转化为json的三种方式的方法
2018/11/07 Python
对python中的argv和argc使用详解
2018/12/15 Python
pandas数据处理进阶详解
2019/10/11 Python
pytorch 自定义卷积核进行卷积操作方式
2019/12/30 Python
详解matplotlib中pyplot和面向对象两种绘图模式之间的关系
2021/01/22 Python
日本最大的眼镜购物网站:Oh My Glasses
2016/11/13 全球购物
莫斯科制造商的廉价皮大衣:Fursk
2020/06/09 全球购物
家居设计专业个人自荐信范文
2013/11/26 职场文书
《蜗牛的奖杯》教后反思
2014/04/24 职场文书
护士求职简历自我评价
2015/03/10 职场文书
召开会议通知范文
2015/04/15 职场文书
Python实现查询剪贴板自动匹配信息的思路详解
2021/07/09 Python
疑《守望先锋2》A测截图泄露 或将推出新模式、新界面
2022/04/03 其他游戏
java实现自定义时钟并实现走时功能
2022/06/21 Java/Android