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 socket 超时设置 errno 10054
Jul 01 Python
python中的函数用法入门教程
Sep 02 Python
Python的Django框架中的数据库配置指南
Jul 17 Python
机器学习python实战之手写数字识别
Nov 01 Python
如何利用python查找电脑文件
Apr 27 Python
python实现AES和RSA加解密的方法
Mar 28 Python
Django页面数据的缓存与使用的具体方法
Apr 23 Python
python pip安装包出现:Failed building wheel for xxx错误的解决
Dec 25 Python
Python导入模块包原理及相关注意事项
Mar 25 Python
Django media static外部访问Django中的图片设置教程
Apr 07 Python
Django admin管理工具TabularInline类用法详解
May 14 Python
实现ECharts双Y轴左右刻度线一致的例子
May 16 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开发GUI
2006/10/09 PHP
php判断文件上传类型及过滤不安全数据的方法
2014/12/17 PHP
PHP实现删除字符串中任何字符的函数
2015/08/11 PHP
PHP+Ajax验证码验证用户登录
2016/07/20 PHP
PHP设计模式之建造者模式定义与用法简单示例
2018/08/13 PHP
laravel框架实现后台登录、退出功能示例
2019/10/31 PHP
javascript中的107个基础知识收集整理 推荐
2010/03/29 Javascript
jquery数据验证插件(自制,简单,练手)实例代码
2013/10/24 Javascript
JavaScript window.location对象
2014/11/14 Javascript
DOM基础教程之事件类型
2015/01/20 Javascript
JS实现至少包含字母、大小写数字、字符的密码等级的两种方法
2015/02/03 Javascript
jquery带有索引按钮且自动轮播切换特效代码分享
2015/09/15 Javascript
JavaScript中Boolean对象的属性解析
2015/10/21 Javascript
Bootstrap安装环境配置教程分享
2016/05/27 Javascript
微信端开发--登录小程序步骤
2017/01/11 Javascript
jQuery基于ajax实现页面加载后检查用户登录状态的方法
2017/02/10 Javascript
JS三目运算(三元运算)方法详解
2017/03/01 Javascript
vue使用watch 观察路由变化,重新获取内容
2017/03/08 Javascript
微信小程序中的swiper组件详解
2017/04/14 Javascript
深入理解Vue 的条件渲染和列表渲染
2017/09/01 Javascript
Python用list或dict字段模式读取文件的方法
2017/01/10 Python
Collatz 序列、逗号代码、字符图网格实例
2017/06/22 Python
python实现k-means聚类算法
2018/02/23 Python
Python堆排序原理与实现方法详解
2018/05/11 Python
Python3.5多进程原理与用法实例分析
2019/04/05 Python
python之mock模块基本使用方法详解
2019/06/27 Python
MxNet预训练模型到Pytorch模型的转换方式
2020/05/25 Python
Django实现内容缓存实例方法
2020/06/30 Python
如何用python爬取微博热搜数据并保存
2021/02/20 Python
美国第一大药店连锁机构:Walgreens(沃尔格林)
2019/10/10 全球购物
感恩老师的演讲稿
2014/05/06 职场文书
党建工作经验交流材料
2014/05/25 职场文书
感恩教育观后感
2015/06/17 职场文书
如何有效防止sql注入的方法
2021/05/25 SQL Server
jackson json序列化实现首字母大写,第二个字母需小写
2021/06/29 Java/Android
python中mongodb包操作数据库
2022/04/19 Python