You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何统计函数调用次数?猜数字游戏while循环计数问题求助

问题解答

一、如何统计某个函数的调用次数?

我平时常用这几种简单有效的方法,你可以根据场景选:

  • 利用函数属性:给函数加一个自定义属性来计数,每次调用函数时就把这个属性加1。比如:

    def my_func():
        # 初始化计数器,第一次调用时创建
        if not hasattr(my_func, 'counter'):
            my_func.counter = 0
        my_func.counter += 1
        print(f"函数已调用 {my_func.counter} 次")
    
    my_func()  # 输出:函数已调用 1 次
    my_func()  # 输出:函数已调用 2 次
    
  • 使用装饰器:如果要给多个函数统计次数,装饰器会更灵活,不用修改函数本身的代码:

    def count_calls(func):
        def wrapper(*args, **kwargs):
            wrapper.counter += 1
            print(f"{func.__name__} 已调用 {wrapper.counter} 次")
            return func(*args, **kwargs)
        wrapper.counter = 0
        return wrapper
    
    @count_calls
    def say_hello():
        print("Hello!")
    
    say_hello()  # 输出:say_hello 已调用 1 次;Hello!
    say_hello()  # 输出:say_hello 已调用 2 次;Hello!
    
  • 用类封装:如果函数本身属于某个类的方法,直接在类里加实例属性或者类属性来计数就行:

    class MyClass:
        def __init__(self):
            self.call_count = 0
    
        def my_method(self):
            self.call_count += 1
            print(f"方法已调用 {self.call_count} 次")
    
    obj = MyClass()
    obj.my_method()  # 输出:方法已调用 1 次
    obj.my_method()  # 输出:方法已调用 2 次
    

二、修复数字猜谜游戏的代码

看你写的代码片段,问题主要出在计数器的赋值(AI.counter =+ 1应该改成AI.counter += 1),还有while循环的逻辑没补全。我帮你把代码补全并修正,实现猜对后显示猜测次数的功能:

# 简单数字猜谜游戏
import time
import random

# 生成1到100之间的随机数
target_number = random.randint(1, 100)
# 初始化猜测次数计数器
guess_count = 0

def guess_game():
    global guess_count
    while True:
        guess_count += 1
        try:
            user_guess = int(input("猜猜我想的是哪个数字(1-100):"))
        except ValueError:
            print("请输入有效的整数哦!")
            continue
        
        if user_guess < target_number:
            print("太小啦,再猜大一点!")
        elif user_guess > target_number:
            print("太大啦,再猜小一点!")
        else:
            print(f"恭喜你猜对啦!你一共猜了 {guess_count} 次!")
            break

# 启动游戏
guess_game()

如果你想保留你原来用函数属性的方式,也可以这样改:

import time
import random

target_number = random.randint(1, 101)

def AI():
    # 初始化计数器
    if not hasattr(AI, 'counter'):
        AI.counter = 0
    AI.counter += 1  # 这里要改成 +=1,不是 =+1
    try:
        guess = int(input("Can you guess what number I'm Thinking of?: "))
    except ValueError:
        print("Please enter a valid number!")
        return AI()  # 输入无效时重新调用函数
    
    if guess < target_number:
        print("Too low! Try again.")
        AI()
    elif guess > target_number:
        print("Too high! Try again.")
        AI()
    else:
        print(f"Congratulations! You guessed it in {AI.counter} tries!")

AI()

注意哦,你原来的AI.counter =+ 1是把counter设为正1,而不是在原来的基础上加1,这是常见的语法错误,改成AI.counter += 1就对啦。

内容的提问来源于stack exchange,提问作者Simpson

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.22 07:51:01