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的Flask框架来构建一个简单的数字商品支付解决方案
Mar 31 Python
python实现类的静态变量用法实例
May 08 Python
编写Python CGI脚本的教程
Jun 29 Python
Python中使用bidict模块双向字典结构的奇技淫巧
Jul 12 Python
TF-IDF与余弦相似性的应用(二) 找出相似文章
Dec 21 Python
Python基于PyGraphics包实现图片截取功能的方法
Dec 21 Python
Python实现的维尼吉亚密码算法示例
Apr 12 Python
python实现画循环圆
Nov 23 Python
python保留小数位的三种实现方法
Jan 07 Python
Ranorex通过Python将报告发送到邮箱的方法
Jan 12 Python
Pycharm中安装wordcloud等库失败问题及终端通过pip安装的Python库如何添加到Pycharm解释器中(推荐)
May 10 Python
Python中的 Set 与 dict
Mar 13 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往windows中添加用户
2006/12/06 PHP
php实现字符串翻转的方法
2015/03/27 PHP
php使用FFmpeg接口获取视频的播放时长、码率、缩略图以及创建时间
2016/11/07 PHP
源码分析 Laravel 重复执行同一个队列任务的原因
2017/12/25 PHP
PHP单例模式实例分析【防继承,防克隆操作】
2019/05/22 PHP
基于jquery的滑动样例代码
2010/11/20 Javascript
brook javascript框架介绍
2011/10/10 Javascript
JavaScript中valueOf函数与toString方法深入理解
2012/12/02 Javascript
使用按钮控制以何种方式打开新窗口的属性介绍
2012/12/17 Javascript
JS中的数组的sort方法使用示例
2014/01/22 Javascript
JavaScript使用DeviceOne开发实战(一) 配置和起步
2015/12/01 Javascript
Angular2 路由问题修复详解
2017/03/01 Javascript
vuex页面刷新后数据丢失的方法
2019/01/17 Javascript
JS+DIV实现拖动效果
2020/02/11 Javascript
vue-cli3单页构建大型项目方案
2020/04/07 Javascript
vue穿梭框实现上下移动
2021/01/29 Vue.js
[01:04:02]DOTA2-DPC中国联赛 正赛 Elephant vs IG BO3 第二场 1月24日
2021/03/11 DOTA
python在windows下实现ping操作并接收返回信息的方法
2015/03/20 Python
Python遍历目录的4种方法实例介绍
2015/04/13 Python
Python爬虫爬验证码实现功能详解
2016/04/14 Python
python SMTP实现发送带附件电子邮件
2018/05/22 Python
python 划分数据集为训练集和测试集的方法
2018/12/11 Python
Python字符串内置函数功能与用法总结
2019/04/16 Python
详解用pyecharts Geo实现动态数据热力图城市找不到问题解决
2019/06/26 Python
Python SELENIUM上传文件或图片实现过程
2019/10/28 Python
Python argparse模块应用实例解析
2019/11/15 Python
使用python实现多维数据降维操作
2020/02/24 Python
浅谈HTML5 FileReader分布读取文件以及其方法简介
2017/11/09 HTML / CSS
Styleonme中文网:韩国高档人气品牌
2017/06/21 全球购物
Linux如何压缩可执行文件
2013/10/21 面试题
心碎乌托邦的创业计划书范文
2013/12/26 职场文书
大学班长的职责
2014/01/27 职场文书
安全标兵事迹材料
2014/08/17 职场文书
学风建设主题班会
2015/08/17 职场文书
2016优秀大学生个人事迹材料范文
2016/03/01 职场文书
TV动画《史上最强大魔王转生为村民A》番宣CM公布
2022/04/01 日漫