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选择排序、冒泡排序、合并排序代码实例
Apr 10 Python
Python的Flask框架中配置多个子域名的方法讲解
Jun 07 Python
Python函数的周期性执行实现方法
Aug 13 Python
pycharm安装图文教程
May 02 Python
Python实现矩阵相乘的三种方法小结
Jul 26 Python
selenium+python自动化测试之使用webdriver操作浏览器的方法
Jan 23 Python
Pytorch根据layers的name冻结训练方式
Jan 06 Python
PyCharm Anaconda配置PyQt5开发环境及创建项目的教程详解
Mar 24 Python
python读取yaml文件后修改写入本地实例
Apr 27 Python
python退出循环的方法
Jun 18 Python
详解用Python调用百度地图正/逆地理编码API
Jul 02 Python
python爬虫中的url下载器用法详解
Nov 30 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
Notice: Trying to get property of non-object problem(PHP)解决办法
2012/03/11 PHP
PHP实现多文件上传的方法
2015/07/08 PHP
浅析Yii2 gridview实现批量删除教程
2016/04/22 PHP
Yii使用smsto短信接口的函数demo示例
2016/07/13 PHP
php使用CutyCapt实现网页截图保存的方法
2016/10/03 PHP
php + nginx项目中的权限详解
2017/05/23 PHP
PHP的mysqli_set_charset()函数讲解
2019/01/23 PHP
javascript中的一些注意事项 更新中
2010/12/06 Javascript
JS组件Bootstrap Select2使用方法详解
2020/04/17 Javascript
JavaScript数据类型转换的注意事项
2016/07/31 Javascript
JavaScript之Vue.js【入门基础】
2016/12/06 Javascript
微信小程序教程系列之视图层的条件渲染(10)
2017/04/19 Javascript
微信小程序实现给循环列表添加点击样式实例
2017/04/26 Javascript
解决select2在bootstrap modal中不能正常使用的问题
2018/08/09 Javascript
Javascript通过控制类名更改样式
2019/05/24 Javascript
js利用拖放实现添加删除
2020/08/27 Javascript
vue 动态生成拓扑图的示例
2021/01/03 Vue.js
[46:47]2014 DOTA2国际邀请赛中国区预选赛 DT VS HGT
2014/05/22 DOTA
python提取内容关键词的方法
2015/03/16 Python
python实现redis三种cas事务操作
2017/12/19 Python
深入理解Django的中间件middleware
2018/03/14 Python
python基于Selenium的web自动化框架
2019/07/14 Python
django-rest-framework解析请求参数过程详解
2019/07/18 Python
python 实现绘制整齐的表格
2019/11/18 Python
Html5 Canvas动画基础碰撞检测的实现
2018/12/06 HTML / CSS
毕业生自我鉴定
2013/11/05 职场文书
中年人生感言
2014/02/04 职场文书
《分一分》教学反思
2014/04/13 职场文书
学生保证书范文
2014/04/28 职场文书
保护环境倡议书500字
2014/05/19 职场文书
人事文员岗位职责
2015/02/04 职场文书
加薪通知
2015/04/25 职场文书
新店开张宣传语
2015/07/13 职场文书
社交电商模式的兴起:这些新的商机千万别错过
2019/07/26 职场文书
用Python提取PDF表格的方法
2021/04/11 Python
Java实现简易的分词器功能
2021/06/15 Java/Android