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 相关文章推荐
基于python的Tkinter编写登陆注册界面
Jun 30 Python
在Python中执行系统命令的方法示例详解
Sep 14 Python
Python实现查看系统启动项功能示例
May 10 Python
详解Django中类视图使用装饰器的方式
Aug 12 Python
小白入门篇使用Python搭建点击率预估模型
Oct 12 Python
从0开始的Python学习016异常
Apr 08 Python
解决python super()调用多重继承函数的问题
Jun 26 Python
Python 时间戳之获取整点凌晨时间戳的操作方法
Jan 28 Python
Django操作session 的方法
Mar 09 Python
计算Python Numpy向量之间的欧氏距离实例
May 22 Python
详解Python Celery和RabbitMQ实战教程
Jan 20 Python
python保存图片的四个常用方法
Feb 28 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 MYSQL乱码问题,使用SET NAMES utf8校正
2009/11/30 PHP
linux下为php添加curl扩展的方法
2011/07/29 PHP
PHP代码保护--Zend Guard的使用详解
2013/06/03 PHP
PHP中array_merge和array相加的区别分析
2013/06/17 PHP
php redis实现文章发布系统(用户投票系统)
2017/03/04 PHP
laravel Task Scheduling(任务调度)在windows下的使用详解
2019/10/22 PHP
PHP中关于php.ini参数优化详解
2020/02/28 PHP
jquery 事件对象属性小结
2010/04/27 Javascript
fancybox1.3.1 基于Jquery的插件在IE中图片显示问题
2010/10/01 Javascript
JS 修改URL参数(实现代码)
2013/07/08 Javascript
JS 毫秒转时间示例代码
2013/09/22 Javascript
setTimeout()与setInterval()方法区别介绍
2013/12/24 Javascript
jquery mobile的触控点击事件会多次触发问题的解决方法
2014/05/08 Javascript
Angularjs过滤器使用详解
2016/05/25 Javascript
JS实现间歇滚动的运动效果实例
2016/12/22 Javascript
基于vue实现分页/翻页组件paginator示例
2017/03/09 Javascript
小程序实现选择题选择效果
2018/11/04 Javascript
详解Express笔记之动态渲染HTML(新手入坑)
2018/12/13 Javascript
JS/HTML5游戏常用算法之碰撞检测 包围盒检测算法详解【矩形情况】
2018/12/13 Javascript
解决Vue打包后访问图片/图标不显示的问题
2019/07/25 Javascript
vue+axios 拦截器实现统一token的案例
2020/09/11 Javascript
python实现查找excel里某一列重复数据并且剔除后打印的方法
2015/05/26 Python
python实现自动登录
2018/09/17 Python
Django csrf 验证问题的实现
2018/10/09 Python
pandas-resample按时间聚合实例
2019/12/27 Python
Python enumerate内置库用法解析
2020/02/24 Python
Python super()函数使用及多重继承
2020/05/06 Python
HTML5在a标签内放置块级元素示例代码
2013/08/23 HTML / CSS
美国波道夫·古德曼百货官网:Bergdorf Goodman
2017/11/07 全球购物
马来西亚排名第一的宠物用品店:Pets Wonderland
2020/04/16 全球购物
护士演讲稿范文
2014/01/05 职场文书
祖国在我心中演讲稿500字
2014/05/04 职场文书
优秀工会工作者事迹材料
2014/06/02 职场文书
2014年应急管理工作总结
2014/11/26 职场文书
公司开业的祝贺语大全(60条)
2019/07/05 职场文书
传单、海报早OUT了,另类传单营销方案送给你!
2019/07/15 职场文书