如何统计函数调用次数?猜数字游戏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
相关产品推荐
相关产品推荐

