如何在Python中持续将函数运行结果存入列表?
解决方案
针对你的需求,这里提供两种简洁的实现方式,都能满足每次运行猜数字游戏后自动保存结果,并且随时查看历史记录的要求:
方法1:使用全局列表(快速修改现有代码)
把结果列表定义为全局变量,在guessing_game函数内直接更新这个列表,改动量小,适合入门阶段快速实现:
import random # 建议把import放在函数外面,避免重复导入 # 定义全局列表存储游戏结果 game_results = [] def guessing_game(): number = random.randint(1, 1000) player_name = input("Enter name: ") number_of_guesses = 0 # 修复字符串拼接的空格问题,用f-string更简洁 print(f'Howdy, {player_name}! Guess a number between 1 and 1000: ') while number_of_guesses < 10: guess = int(input()) number_of_guesses += 1 if guess < number: print("Too Low, Joe") elif guess > number: print("Too high, Sly") else: break # 整理结构化的游戏结果 if guess == number: result_msg = f"You got it, Bobbit, in {number_of_guesses} tries" result = {"player": player_name, "status": "win", "tries": number_of_guesses, "target": number} else: result_msg = f"Well, yer were close, Stofe. Shoulda guessed {number}" result = {"player": player_name, "status": "lose", "tries": number_of_guesses, "target": number} print(result_msg) # 将结果添加到全局列表 game_results.append(result) # 运行游戏 guessing_game() # 需要查看历史时直接打印列表 print("游戏历史记录:") print(game_results)
方法2:函数返回结果,外部维护列表(更规范的写法)
让guessing_game返回每次的游戏结果,在函数外部自己维护结果列表,这种方式不依赖全局变量,代码更模块化:
import random def guessing_game(): number = random.randint(1, 1000) player_name = input("Enter name: ") number_of_guesses = 0 print(f'Howdy, {player_name}! Guess a number between 1 and 1000: ') while number_of_guesses < 10: guess = int(input()) number_of_guesses += 1 if guess < number: print("Too Low, Joe") elif guess > number: print("Too high, Sly") else: break if guess == number: result_msg = f"You got it, Bobbit, in {number_of_guesses} tries" result = {"player": player_name, "status": "win", "tries": number_of_guesses, "target": number} else: result_msg = f"Well, yer were close, Stofe. Shoulda guessed {number}" result = {"player": player_name, "status": "lose", "tries": number_of_guesses, "target": number} print(result_msg) # 返回结构化结果 return result # 外部定义列表存储结果 game_results = [] # 运行游戏并保存结果 game_results.append(guessing_game()) # 可以多次运行游戏 game_results.append(guessing_game()) # 格式化打印历史记录 print("游戏历史记录:") for idx, res in enumerate(game_results, 1): print(f"第{idx}次游戏:玩家{res['player']} {'成功猜对' if res['status'] == 'win' else '未猜对'},目标数字{res['target']},尝试次数{res['tries']}")
关键细节说明
- 用字典存储结果比单纯存字符串更易读,后续还能轻松扩展记录内容(比如游戏时间、玩家猜测的数字序列等)。
- 原代码里的
import random放在函数内会导致每次调用都重复导入,移到函数外更高效。 - 用f-string替换原有的
+字符串拼接,能避免空格缺失这类小问题,写法也更简洁。
内容的提问来源于stack exchange,提问作者Jacob Webb
相关产品推荐
相关产品推荐

