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

Python猜数字游戏循环退出异常求助:输入n无法终止游戏

随机数猜谜游戏退出循环问题排查

问题描述

编写随机数猜谜函数,需实现:返回猜测次数、提示猜测结果(正确/过高/过低)、询问用户是否继续游玩。目前前两项功能正常,但输入n无法终止游戏,会持续提示输入错误。

用户代码

#random number guessing game

import random

def generate_random (min,max):
    return random.randint (min,max)

#generate_random (1,100)

star_range=1
end_range=100

#targetnumber=generate_random(start_range,end_range)
#print (targetnumber)

def main():
    targetnumber=generate_random(star_range,end_range)
    number_of_guesses =0 #guarda o numero de tentativas do jogador
    
    print ("Guess a number between 0 e 100.\n")
    
    while True:
        number_of_guesses +=1
        guess = int(input("Guess #" + str(number_of_guesses) + ": "))
        
        if guess > targetnumber:
            print("	 Too High, try again.")
        elif guess < targetnumber:
            print ("	 Too low, try aain")
        else:
            print ("	 Correct")
            print ("	 Congratulations. you got it in",number_of_guesses,"guesses.")
            
            break
        
    playagain=input("\n whould you like to play again? (y/n): ").lower()
    while playagain != "y" or playagain != "n":
        print ("Please print y to continue or n to exit")
        playagain=input("\n whould you like to play again? (y/n): ").lower()
            
   
        if playagain == "y":
            continue
        else:
            break

错误现象

是否要再玩一次?(y/n): n
请输入y继续或n退出
是否要再玩一次?(y/n):

问题分析与修正

核心错误:循环条件逻辑错误

while playagain != "y" or playagain != "n" 这个条件永远为真。因为不管输入是y还是n,总有一个不等式成立(比如输入n时,playagain != "y"为真,整个or条件就为真),导致循环无法退出。应将or改为and,只有当输入既不是y也不是n时才进入循环。

其他问题与修正

  1. 拼写错误:
    • star_range → start_range(变量名拼写错误,会导致函数调用失败)
    • try aain → try again
    • whould → would
  2. 流程逻辑错误:验证输入的循环内不需要continue和break,只需在输入合法后跳出循环,再判断是否重新开始游戏。
  3. 缺少函数调用:没有执行main(),程序无法启动。

修正后的完整代码

# random number guessing game
import random

def generate_random(min_val, max_val):
    return random.randint(min_val, max_val)

start_range = 1
end_range = 100

def main():
    target_number = generate_random(start_range, end_range)
    number_of_guesses = 0  # 记录玩家猜测次数
    
    print("Guess a number between 1 and 100.\n")
    
    while True:
        number_of_guesses += 1
        guess = int(input(f"Guess #{number_of_guesses}: "))
        
        if guess > target_number:
            print("    Too High, try again.")
        elif guess < target_number:
            print("    Too low, try again.")
        else:
            print("    Correct")
            print(f"    Congratulations. You got it in {number_of_guesses} guesses.")
            break
    
    # 询问是否继续游玩
    while True:
        play_again = input("\nWould you like to play again? (y/n): ").lower()
        if play_again == "y" or play_again == "n":
            break
        print("Please enter y to continue or n to exit.")
    
    if play_again == "y":
        main()

# 启动游戏
main()

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.14 20:10:31