0
点赞
收藏
分享

微信扫一扫

Python每日一练-----猜数字游戏(Bulls and Cows)

(day41)

目录

📝题目:

🚩题目分析:

💡解题思路:

🌟解法一:

🌈代码实现

✏代码注释

🌟解法一:

 🌈代码实现


📝题目:

你在和朋友一起玩 猜数字(Bulls and Cows)游戏,该游戏规则如下:

写出一个秘密数字,并请朋友猜这个数字是多少。朋友每猜测一次,你就会给他一个包含下述信息的提示:

猜测数字中有多少位属于数字和确切位置都猜对了(称为 "Bulls",公牛),
有多少位属于数字猜对了但是位置不对(称为 "Cows",奶牛)。也就是说,这次猜测中有多少位非公牛数字可以通过重新排列转换成公牛数字。
给你一个秘密数字 secret 和朋友猜测的数字 guess ,请你返回对朋友这次猜测的提示。

提示的格式为 "xAyB" ,x 是公牛个数, y 是奶牛个数,A 表示公牛,B 表示奶牛。

请注意秘密数字和朋友猜测的数字都可能含有重复数字。

⭐示例 1:

⭐示例 2:

🚩题目分析:

刚看题目我也是有些蒙,不懂题目在说什么,后来静下来看题目发现题目也蛮简单的。

题目给出secret和guess一个是你写出的数字一个是朋友猜的数字。我们要做的就是比较这两个数字中:

1.在同一位置上的数是否相同,并给出有几个相同。

2.除去符合条件一的数,guess剩下的数是否可以经过重新排列使得满足条件1,并给出有几个数可以排列后满足。

💡解题思路:

🌟解法一:

🌈代码实现

def getHint(secret, guess):
    bulls, cows = 0, 0
    dic_s = dict()
    dic_g = dict()
    for i, c in enumerate(secret):
        if guess[i] == c:
            bulls += 1
        else:
            dic_s[c] = dic_s.get(c, 0) + 1
            dic_g[guess[i]] = dic_g.get(guess[i], 0) + 1

    for i in dic_s:
        if i in dic_g:
            cows += min(dic_g[i], dic_s[i])
    return str(bulls) + 'A' + str(cows) + 'B'

✏代码注释

def getHint(secret, guess):
    bulls, cows = 0, 0   # 初始化计数变量
    dic_s = dict()  # 初始化用于储存数字出现次数的字典
    dic_g = dict()
    for i, c in enumerate(secret):  # 使用enumerate()函数获取secret中元素的索引i和元素c
        if guess[i] == c:   # 判断guess和secret同一位置的数是否相等
            bulls += 1   # 相等则公牛计数+1
        else:   # 如果不相等
            dic_s[c] = dic_s.get(c, 0) + 1  # 实用字典储存该位置上的数出现的次数
            dic_g[guess[i]] = dic_g.get(guess[i], 0) + 1

    for i in dic_s:    # 接着遍历字典dic_s,并判断dic_s中的元素是否在dic_g中
        if i in dic_g:
            cows += min(dic_g[i], dic_s[i])  # 实用min取小
    return str(bulls) + 'A' + str(cows) + 'B'

🌟解法一:

 🌈代码实现

from collections import Counter


def getHint(secret, guess):
    bull = sum(secret[i] == guess[i] for i in range(len(secret)))
    cow = sum((Counter(secret) & Counter(guess)).values()) - bull

    return f'{bull}A{cow}B'

今天就到这,明天见。🚀

❄❄❄❄❄❄❄❄❄❄❄❄❄❄❄❄❄❄❄❄end❄❄❄❄❄❄❄❄❄❄❄❄❄❄❄❄❄❄❄❄❄❄❄❄❄❄

举报

相关推荐

0 条评论