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中的with...as用法介绍
May 28 Python
Python Django使用forms来实现评论功能
Aug 17 Python
wxPython之解决闪烁的问题
Jan 15 Python
Python实现PS图像明亮度调整效果示例
Jan 23 Python
Python 中导入csv数据的三种方法
Nov 01 Python
Ubuntu18.04中Python2.7与Python3.6环境切换
Jun 14 Python
Python 根据日志级别打印不同颜色的日志的方法示例
Aug 08 Python
Python 最强编辑器详细使用指南(PyCharm )
Sep 16 Python
浅谈在JupyterNotebook下导入自己的模块的问题
Apr 16 Python
Python Json数据文件操作原理解析
May 09 Python
解决Keyerror ''acc'' KeyError: ''val_acc''问题
Jun 18 Python
python上下文管理的使用场景实例讲解
Mar 03 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简单命令代码集锦
2007/09/24 PHP
PHP创建文件,并向文件中写入数据,覆盖,追加的实现代码
2016/03/25 PHP
js中函数调用的两种常用方法使用介绍
2014/07/17 Javascript
nodejs下打包模块archiver详解
2014/12/03 NodeJs
javascript实现网页背景烟花效果的方法
2015/08/06 Javascript
在JavaScript的jQuery库中操作AJAX的方法讲解
2015/08/15 Javascript
jquery实现右侧栏菜单选择操作
2016/03/04 Javascript
JavaScript中从setTimeout与setInterval到AJAX异步
2017/02/13 Javascript
jQuery中用on绑定事件时需注意的事项
2017/03/19 Javascript
详谈Node.js之操作文件系统
2017/08/29 Javascript
javascript使用正则实现去掉字符串前面的所有0
2018/07/23 Javascript
vue中的适配px2rem示例代码
2018/11/19 Javascript
Node+OCR实现图像文字识别功能
2018/11/26 Javascript
vue实现手机号码的校验实例代码(防抖函数的应用场景)
2019/09/05 Javascript
Vue+elementui 实现复杂表头和动态增加列的二维表格功能
2019/09/23 Javascript
js表达式与运算符简单操作示例
2020/02/15 Javascript
vue 组件间的通信之子组件向父组件传值的方式
2020/07/29 Javascript
vue自定义指令和动态路由实现权限控制
2020/08/28 Javascript
vue组件中实现嵌套子组件案例
2020/08/31 Javascript
[47:48]DOTA2上海特级锦标赛D组小组赛#2 Liquid VS VP第三局
2016/02/28 DOTA
解决PyCharm import torch包失败的问题
2018/10/13 Python
python判断计算机是否有网络连接的实例
2018/12/15 Python
python读取文件名并改名字的实例
2019/01/07 Python
详解在python操作数据库中游标的使用方法
2019/11/12 Python
pytorch中的自定义数据处理详解
2020/01/06 Python
JAVA的事件委托机制和垃圾回收机制
2014/09/07 面试题
工商管理专业实习生自我鉴定
2013/09/29 职场文书
工程安全员岗位职责
2014/03/09 职场文书
计算机专业应届生求职信
2014/04/06 职场文书
放飞梦想演讲稿200字
2014/08/26 职场文书
Python基础之Socket通信原理
2021/04/22 Python
MySQL官方导出工具mysqlpump的使用
2021/05/21 MySQL
python中tkinter复选框使用操作
2021/11/11 Python
Python学习之包与模块详解
2022/03/19 Python
Minikube搭建Kubernetes集群
2022/03/31 Servers
GPU服务器的多用户配置方法
2022/07/07 Servers