(python version) 299. 猜数字游戏

题目描述

![
(Source: LeetCode 力扣)

解题思路

自己解

  • 二层扫描,第一次扫描位置 (A) 的数量,第二次扫描 B 的数量
  • 空间:使用 candidate_list & scan_list 去保存要扫描 B 的数量

别人的解法

  • O(N)
    *先扫描一次,把不是位置匹配的(A)存进字典,利用加减的方式去计算不匹配数字
    *真实数字出现在秘密里,在字典计数+1
  • 真实数字出现在猜测里,在字典计数-1
  • 这样一增一减消消弭先后顺序的问题(**口述的好处),即为不匹配的个数
  • B 的数量 = total - A - 不匹配个数
    在这里插入图片描述

Python 代碼

# 自己的解法
class Solution:
    def getHint(self, secret: str, guess: str) -> str:
        a =0
        b =0
        scan_list = []
        candidate_list = []
        for i in range(len(secret)):
            if secret[i] == guess[i]:
                a+=1
            else:
                scan_list.append(secret[i])
                candidate_list.append(guess[i])

        for i in range(len(candidate_list)):
            if candidate_list[i] in scan_list:
                b+=1
                scan_list.remove(candidate_list[i])
        
        return str(a)+'A'+str(b)+'B'

# 別人的解法
class Solution:
    def getHint(self, secret: str, guess: str) -> str:
        s_dict={}
        a=0
        for i in range(len(secret)):
            if secret[i] == guess[i]:
                a+=1
            else:
                s_dict[secret[i]] = s_dict.get(secret[i],0) +1 
                s_dict[guess[i]]  = s_dict.get(guess[i],0) -1
        # 不匹配的数量
        b = len(secret) - a - sum(filter(lambda x: x>0, s_dict.values()))
        return str(a)+'A'+str(b)+'B'

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
Python中创建图形化页面的数字游戏通常使用GUI库如Tkinter或PyQt,结合随机数生成和用户输入处理。以下是一个简单的使用Tkinter库实现数字游戏的基本步骤: 1. 导入所需库:`import tkinter as tk`, `random`用于生成随机数。 2. 创建主窗口:`root = tk.Tk()`,设置窗口标题和大小。 3. 随机生成一个数字:`number_to_guess = random.randint(1, 100)`(这里以1到100为例,你可以根据需求调整范围)。 4. 设计循环让玩家测:创建一个while循环,获取用户输入并检查是否对。 5. 用户输入验证:使用`if`条件判断用户输入的数字是否等于`number_to_guess`,如果对则显示胜利信息,否则提示测是否偏大或偏小。 6. 结束游戏:在用户对或退出循环后,关闭窗口。 下面是简化版代码示例: ```python import tkinter as tk import random def start_game(): number_to_guess = random.randint(1, 100) guess = None attempts = 0 def check_guess(): nonlocal guess, attempts attempts += 1 if guess == number_to_guess: result_label.config(text=f"恭喜,你对了!尝试次数: {attempts}") elif guess < number_to_guess: result_label.config(text="你数字太小了") else: result_label.config(text="你数字太大了") guess_entry = tk.Entry(root) guess_entry.pack() guess_button = tk.Button(root, text="一下", command=check_guess) guess_button.pack() result_label = tk.Label(root, text="") result_label.pack() root.mainloop() # 创建主窗口 root = tk.Tk() root.title("数字游戏") root.geometry("300x200") # 开始游戏按钮 start_button = tk.Button(root, text="开始游戏", command=start_game) start_button.pack() root.mainloop() ```

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值