Skill: lydia9781/guess-number (version 1.0.0)

```markdown --- name: guess-number description: 猜四位数数字推理游戏。当用户提到玩猜数字游戏、猜四位数、数字推理游戏时使用本技能。系统生成一个各位不重复的四位数，用户通过多次猜测推理出正确数字，每次猜测后反馈位置正确的数字个数。 --- # 猜四位数游戏技能 ## 技能概述 本技能实现经典的四位数数字推理游戏，用户需要通过有限次数的猜测，推理出系统随机生成的四位数（各位数字互不重复）。每次猜测后系统仅反馈位置和数字均正确的位数，帮助用户逐步缩小范围，最终猜中答案。 ## 触发场景 当用户输入以下内容时触发本技能： - "玩猜数字游戏" - "猜四位数" - "数字推理游戏" - "来玩个猜数字游戏" - 其他类似表达想要玩猜数字游戏的请求 ## 使用方法 游戏拆分为两个独立阶段： ### 阶段1：开始新游戏 当用户说「开始游戏」「新局」「玩猜数字游戏」时，运行生成命令创建新局： ```bash python scripts/guess_number.py --generate ``` 该命令会随机生成4位不重复的秘密数字，写入到脚本目录下的`secret.txt`文件中，并初始化步数计数器。 ### 阶段2：验证用户猜测 当用户输入4位数字进行猜测时，运行验证命令返回结果： ```bash python scripts/guess_number.py --verify <用户输入的4位数字> ``` 该命令会从`secret.txt`读取秘密数字，与用户猜测的数字对比，返回位置正确的数字个数。 - 若用户猜对，自动删除`secret.txt`和步数文件，游戏结束 - 若游戏未开始（`secret.txt`不存在），提示用户先开始游戏 - 非法输入给出对应错误提示，不消耗步数 ## 游戏规则 1. 系统随机生成一个4位数字，各位数字互不重复（允许0开头，例如0123是合法数字） 2. 用户每次输入一个4位数字，需满足各位不重复、仅包含数字0-9 3. 系统比较用户猜测与秘密数字，返回位置和数字均正确的个数k（0 ≤ k ≤ 4） 4. 当k=4时，用户猜中，游戏结束，显示总猜测次数 5. 输入校验规则： - 非4位数字：提示"请输入4位数字，请重新输入" - 包含非数字字符：提示"只能输入数字，请重新输入" - 数字有重复：提示"数字不能重复，请重新输入" ## 交互示例 ``` 系统：我已想好一个四位数（各位数字互不相同），请开始猜测！ 用户：1234 系统：反馈：2 个数字位置正确 用户：5678 系统：反馈：0 个数字位置正确 用户：2568 系统：反馈：4 个数字位置正确！恭喜你猜对了！总共用了 9 步。 ``` ## 注意事项 - 生成的秘密数字必须保证完全随机且各位无重复，保存到`secret.txt`中，仅在游戏结束后自动删除 - 反馈结果必须准确，不得泄露任何额外信息（例如不得告知哪些数字正确，不得告知数字存在但位置错误的情况） - 严格校验用户输入，避免非法输入导致游戏崩溃，非法输入不消耗猜测步数 - 若用户主动中断游戏，需自动清理`secret.txt`和步数文件，避免影响下一局游戏 - 游戏结束后主动询问用户是否需要再来一局 ```

path: scripts/guess_number.py
content: #!/usr/bin/env python3
import random
import sys
import os

SECRET_FILE = os.path.join(os.path.dirname(__file__), 'secret.txt')
STEP_FILE = os.path.join(os.path.dirname(__file__), 'step.txt')

def generate_secret():
    """生成4位不重复的随机数字字符串"""
    return ''.join(random.sample('0123456789', 4))

def save_secret(secret):
    """将秘密数字写入文件"""
    with open(SECRET_FILE, 'w', encoding='utf-8') as f:
        f.write(secret)
    # 初始化步数
    with open(STEP_FILE, 'w', encoding='utf-8') as f:
        f.write('0')

def load_secret():
    """从文件读取秘密数字"""
    if not os.path.exists(SECRET_FILE):
        return None
    with open(SECRET_FILE, 'r', encoding='utf-8') as f:
        return f.read().strip()

def load_step():
    """读取当前步数"""
    if not os.path.exists(STEP_FILE):
        return 0
    with open(STEP_FILE, 'r', encoding='utf-8') as f:
        return int(f.read().strip())

def save_step(step):
    """保存当前步数"""
    with open(STEP_FILE, 'w', encoding='utf-8') as f:
        f.write(str(step))

def validate_input(input_str):
    """校验用户输入是否合法，返回(是否合法, 错误信息)"""
    if len(input_str) != 4:
        return False, "请输入4位数字，请重新输入"
    if not input_str.isdigit():
        return False, "只能输入数字，请重新输入"
    if len(set(input_str)) != 4:
        return False, "数字不能重复，请重新输入"
    return True, ""

def calculate_correct_positions(guess, secret):
    """计算位置和数字都正确的个数"""
    count = 0
    for g, s in zip(guess, secret):
        if g == s:
            count +=1
    return count

def start_new_game():
    """开始新游戏，生成秘密并保存到文件"""
    [REDACTED_SECRET])
    save_secret(secret)
    print("我已想好一个四位数（各位数字互不相同），请开始猜测！")

def verify_guess(guess):
    """验证用户猜测，返回反馈结果"""
    [REDACTED_SECRET])
    if not [REDACTED_SECRET]"请先开始游戏！输入「开始游戏」启动新局。")
        return
    
    valid, err_msg = validate_input(guess)
    if not valid:
        print(err_msg)
        return
    
    step = load_step() + 1
    save_step(step)
    
    correct = calculate_correct_positions(guess, secret)
    
    if correct ==4:
        print(f"反馈：{correct} 个数字位置正确！恭喜你猜对了！总共用了 {step} 步。")
        # 清理临时文件
        if os.path.exists(SECRET_FILE):
            os.remove(SECRET_FILE)
        if os.path.exists(STEP_FILE):
            os.remove(STEP_FILE)
    else:
        print(f"反馈：{correct} 个数字位置正确")

def main():
    if len(sys.argv) == 1:
        # 无参数运行：默认交互式模式
        start_new_game()
        while True:
            try:
                guess = input("> ").strip()
            except (EOFError, KeyboardInterrupt):
                print("\n游戏结束，再见！")
                # 清理临时文件
                if os.path.exists(SECRET_FILE):
                    os.remove(SECRET_FILE)
                if os.path.exists(STEP_FILE):
                    os.remove(STEP_FILE)
                sys.exit(0)
            verify_guess(guess)
    elif len(sys.argv) == 2 and sys.argv[1] == '--generate':
        # 生成模式：仅生成秘密并保存
        start_new_game()
    elif len(sys.argv) == 3 and sys.argv[1] == '--verify':
        # 验证模式：验证用户猜测
        verify_guess(sys.argv[2])
    else:
        print("使用方法：")
        print("  python guess_number.py              # 交互式模式")
        print("  python guess_number.py --generate   # 生成新秘密，开始新游戏")
        print("  python guess_number.py --verify <猜测数字>  # 验证猜测")

if __name__ == "__main__":
    main()


Security scan verdicts — ClawScan: clean | static analysis: clean | VirusTotal: clean | SkillSpector: clean (LOW)