在本篇文章里小编给大家整理的是关于Python猜数字算法题详解内容,有兴趣的朋友们可以学习下。

今天刷的第一道算法题,先拿一道简单点的试试手,这道题目的要求是:

两个人甲乙在猜数字,甲先从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实现猜数字内容请搜索爱安网以前的文章或继续浏览下面的相关文章希望大家以后多多支持爱安网!

最新资讯
热搜被抢走!芒果超媒开局不顺 《姐姐2》能否助股价再度乘风破浪

热搜被抢走!芒果超媒开

天天财经独家,速关注声势浩大的《乘风破浪的姐姐》第二
特斯拉在欧洲举起“价格屠刀”,大众焦虑了?

特斯拉在欧洲举起“价

大众争夺特斯拉的市场有些困难,而特斯拉会继续蚕食大众
危险的分工:从苹果陷阱,到特斯拉幻影

危险的分工:从苹果陷阱

刷屏整个2020年的特斯拉,在2021年初因为Model Y继续在
虎牙CEO董荣杰:虎牙正围绕电竞产业链深度布局

虎牙CEO董荣杰:虎牙正

虎牙公司CEO董荣杰在2020虎牙直播星盛典现场表示,虎牙
法国电信运营商Orange以近13亿欧元出(bu)售(mai)部分光纤资产

法国电信运营商Orange

法国电信运营商Orange周五晚些时候表示,该公司同意将其
汽车行业变革之战,除了"四化"车企还要思考什么?

汽车行业变革之战,除了

汽车行业变革之战,除了"四化"车企还要思考什么?
最新文章
在pycharm中为项目导入anacodna环境的操作方法

在pycharm中为项目导

这篇文章主要介绍了在pycharm中为项目导入anacodna环
tensorflow的ckpt及pb模型持久化方式及转化详解

tensorflow的ckpt及pb

今天小编就为大家分享一篇tensorflow的ckpt及pb模型持
PyTorch笔记之scatter()函数的使用

PyTorch笔记之scatter

这篇文章主要介绍了PyTorch笔记之scatter()函数的使用
python3实现网页版raspberry pi(树莓派)小车控制

python3实现网页版ras

这篇文章主要为大家详细介绍了python3实现网页版raspb
完美解决pycharm导入自己写的py文件爆红问题

完美解决pycharm导入

今天小编就为大家分享一篇完美解决pycharm导入自己写
pycharm内无法import已安装的模块问题解决

pycharm内无法import

今天小编就为大家分享一篇pycharm内无法import已安装