Python猜数字游戏猜对仍显示失败提示 如何让代码仅在for循环结束后执行
问题原因
末尾的失败提示打印语句没有附加任何判断条件,无论for循环是因为猜对数字执行break提前退出,还是猜测次数耗尽自然结束,这行代码都会被执行,因此出现猜对后依然弹出失败提示的问题。仅调整缩进只能控制这行代码是否属于循环体,无法解决逻辑判断缺失的问题。
修复方案
方案1:使用Python for循环自带的else分支
Python的for...else是原生支持的语法,仅当for循环完整跑完所有迭代、没有被break中断时,才会执行else块下的代码,完全匹配你的需求,修改后代码如下:
def main(random_pick, guesses): for i in range(guesses): try: guess = int(input(f"{BLUE}[ ? ]{WHITE} Guess the number : ")) if guess > random_pick: print(f"{RED}[ ! ]{WHITE} Your guess is high!") elif guess < random_pick: print(f"{RED}[ ! ]{WHITE} Your guess is low") else: print(f"{GREEN}[ $ ]{WHITE} You guessed it! Congratulations") break except ValueError: print(f"{RED}[ ! ]{WHITE} Wrong value, try again!") else: print(f"{YELLOW}[ ! ]{WHITE} Better luck next time, the number was {random_pick}")
方案2:新增状态变量判断游戏结果
如果不习惯for...else的写法,也可以新增布尔变量标记是否猜对,最后根据变量值判断是否输出失败提示:
def main(random_pick, guesses): guess_right = False for i in range(guesses): try: guess = int(input(f"{BLUE}[ ? ]{WHITE} Guess the number : ")) if guess > random_pick: print(f"{RED}[ ! ]{WHITE} Your guess is high!") elif guess < random_pick: print(f"{RED}[ ! ]{WHITE} Your guess is low") else: print(f"{GREEN}[ $ ]{WHITE} You guessed it! Congratulations") guess_right = True break except ValueError: print(f"{RED}[ ! ]{WHITE} Wrong value, try again!") if not guess_right: print(f"{YELLOW}[ ! ]{WHITE} Better luck next time, the number was {random_pick}")
两种方案均可解决问题,方案1语法更简洁,属于Python的标准用法。
内容的提问来源于stack exchange,提问作者34598240
相关产品推荐
相关产品推荐

