Python函数重复执行问题:循环执行20次而非预期10次
问题解决:阻止函数重复执行并保留正确得分统计
你的代码之所以会跑20轮,核心原因是你调用了两次determineWinner函数:
- 第一次是在用户输入判断的外部:
winsP1, winsP2 = determineWinner(winsP1 = winsP1, winsP2 = winsP2),这已经跑了10轮 - 第二次是在用户输入确认要游戏的
if分支里,又调用了一次determineWinner(winsP1, winsP2),而且这次调用的结果没赋值回变量,等于白跑10轮,还让输出翻倍
修改方案
直接删掉外部的那次函数调用,只在用户确认游戏的分支里调用,并且把返回的得分赋值回变量,同时优化一些细节:
import random import time # 优化输入判断,更简洁 answer = input("Play the game?").strip().lower() winsP1 = 0 winsP2 = 0 def determineWinner(winsP1, winsP2): # 把导入移到函数外面,不要在循环里重复导入 for _ in range(10): player1 = random.randint(1,10) player2 = random.randint(1,10) print("Player 1:", player1) print("Player 2:", player2) if player1 == player2: print("This round is a tie!") winsP1 += 1 winsP2 += 1 elif player1 > player2: print("Player 1 wins this round!") winsP1 += 1 else: print("Player 2 wins this round!") winsP2 += 1 return winsP1, winsP2 if answer in {"y", "yes"}: # 只在这里调用一次,并且把返回的得分赋值回变量 winsP1, winsP2 = determineWinner(winsP1, winsP2) # 输出最终统计结果 print("\nThe score totals are:") print(f"Player one: {winsP1}") print(f"Player two: {winsP2}\n") if winsP1 > winsP2: print(f"Player 1 wins with a score of {winsP1}!") elif winsP2 > winsP1: print(f"Player 2 wins with a score of {winsP2}!") else: print("It's a tie!")
修改关键点说明
- 删除多余的函数调用:只保留用户确认游戏后的那一次调用,确保仅执行10轮游戏
- 保留得分赋值:函数返回的
winsP1和winsP2必须赋值回全局变量,否则统计结果不会更新 - 优化输入判断:用
strip().lower()统一输入格式,再判断是否在允许的集合里,比多个or更简洁 - 避免重复导入:把
randint的导入移到函数外,不要在循环里重复导入模块,这是不良编程习惯 - 简化循环变量:循环变量用
_代替wins,因为这个变量没被用到,更符合Python规范
内容的提问来源于stack exchange,提问作者Rev
相关产品推荐
相关产品推荐

