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 相关文章推荐
python3实现全角和半角字符转换的方法示例
Sep 21 Python
pandas数据处理基础之筛选指定行或者指定列的数据
May 03 Python
Flask实现跨域请求的处理方法
Sep 27 Python
Python中实例化class的执行顺序示例详解
Oct 14 Python
djang常用查询SQL语句的使用代码
Feb 15 Python
Python快速转换numpy数组中Nan和Inf的方法实例说明
Feb 21 Python
python3实现字符串操作的实例代码
Apr 16 Python
docker django无法访问redis容器的解决方法
Aug 21 Python
10个python爬虫入门基础代码实例 + 1个简单的python爬虫完整实例
Dec 16 Python
python实现图片九宫格分割的示例
Apr 25 Python
pytorch finetuning 自己的图片进行训练操作
Jun 05 Python
python处理json数据文件
Apr 11 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 include加载文件两种方式效率比较
2010/08/08 PHP
摘自织梦CMS的HTTP文件下载类
2015/08/08 PHP
PHP+Ajax+JS实现多图上传
2016/05/07 PHP
关于PHP定时发送服务的解决办法
2017/04/23 PHP
jQuery.extend()、jQuery.fn.extend()扩展方法示例详解
2014/05/08 Javascript
13 款最热门的 jQuery 图像 360 度旋转插件推荐
2014/12/09 Javascript
js实现刷新iframe的方法汇总
2015/04/27 Javascript
利用JavaScript的AngularJS库制作电子名片的方法
2015/06/18 Javascript
jQuery简单操作cookie的插件实例
2016/01/13 Javascript
jquery实现图片切换代码
2016/10/13 Javascript
巧用数组制作图片切换js代码
2016/11/29 Javascript
JS实现页面进入和返回定位到具体位置
2016/12/08 Javascript
ajax的分页查询示例(不刷新页面)
2017/01/11 Javascript
jQuery实现的form转json经典示例
2017/10/10 jQuery
微信小程序canvas实现刮刮乐效果
2018/07/09 Javascript
微信小程序分享海报生成的实现方法
2018/12/10 Javascript
JS使用iView的Dropdown实现一个右键菜单
2019/05/06 Javascript
Angular 中使用 FineReport不显示报表直接打印预览
2019/08/21 Javascript
OpenLayers加载缩放控件使用方法详解
2020/09/25 Javascript
[02:20]2014DOTA2西雅图邀请赛 MVP外卡赛首胜采访
2014/07/09 DOTA
Python多线程同步Lock、RLock、Semaphore、Event实例
2014/11/21 Python
利用Anaconda完美解决Python 2与python 3的共存问题
2017/05/25 Python
Python实现树的先序、中序、后序排序算法示例
2017/06/23 Python
Python基于递归实现电话号码映射功能示例
2018/04/13 Python
python读取视频流提取视频帧的两种方法
2020/10/22 Python
python3中函数参数的四种简单用法
2018/07/09 Python
Python实现的大数据分析操作系统日志功能示例
2019/02/11 Python
Python3 itchat实现微信定时发送群消息的实例代码
2019/07/12 Python
浅谈Python2之汉字编码为unicode的问题(即类似\xc3\xa4)
2019/08/12 Python
django项目用higcharts统计最近七天文章点击量
2019/08/17 Python
HTML5 Canvas鼠标与键盘事件demo示例
2013/07/04 HTML / CSS
什么是岗位职责
2013/11/12 职场文书
2014年教研组工作总结
2014/11/26 职场文书
2015年全国爱眼日活动小结
2015/02/27 职场文书
js 数组 fill() 填充方法
2021/11/02 Javascript
Python可变与不可变数据和深拷贝与浅拷贝
2022/04/06 Python