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

Ruby猜谜游戏第2、3轮逻辑错误求助:正确答题仍判失败

Ruby猜谜程序第2、3轮问题修复方案

问题根源

  1. 变量作用域不匹配:你在answer_my_question函数里定义的out_of_guesses是局部变量,外部判断时用的是第一轮游戏中定义的同名变量,两者完全无关。不管第二轮、第三轮有没有猜对,外部判断的都是第一轮的状态,这就导致即使答对也会触发"用完次数"的逻辑。
  2. 大小写处理不完整:只有第一次输入用了downcase转小写,第二次、第三次输入没有转,用户输入大写时还是会匹配失败。
  3. 函数无返回值:函数没有把内部的猜测结果传递给外部,外部无法获取真实的答题状态。

修复步骤

  1. 让answer_my_question函数返回用户是否猜对,外部通过接收返回值来判断计分。
  2. 所有用户输入都添加downcase,确保大小写完全不敏感。
  3. 外部调用函数时,用变量接收返回结果,替换原来的全局变量判断逻辑。

修正后的完整代码

points = 0
puts "欢迎来到我的猜谜游戏!本次游戏共有3轮题目。"
puts "每轮在3次机会内答对可获得1分" 
puts "请按回车键继续"
gets

puts "第1轮"
puts "我正在想一个1到100之间的随机数,你有3次机会猜对它"

random_number = rand(1 .. 100)

guess = ""
guess_count = 0
out_of_guesses = false

while guess != random_number and !out_of_guesses
    if guess_count == 0
        puts "输入你的猜测:"
        guess = gets.chomp.to_i
        guess_count += 1
      
    elsif guess_count == 1
      if random_number > 50
        puts "答错了!再试一次"
        puts "提示1:"
        puts "我的数比50大"
      elsif random_number < 50
        puts "答错了!再试一次"
        puts "提示1:"
        puts "我的数比50小"
      end
        puts "输入你的第二次猜测:"
        guess = gets.chomp.to_i
        guess_count += 1
      
    elsif guess_count == 2
      if guess > random_number 
        diff1 = guess - random_number
        puts "答错了!再试一次"
        puts "提示2:"
        puts "我的数和你的猜测相差#{diff1}"
      elsif guess < random_number
        diff2 = random_number - guess
        puts "答错了!再试一次"
        puts "提示2:"
        puts "我的数和你的猜测相差#{diff2}"
      end
        puts "输入你的最后一次猜测:"
        guess = gets.chomp.to_i
        guess_count += 1

    else 
        out_of_guesses = true
    end
end

if out_of_guesses
    puts "答错了!"
    puts "你已经用完了所有猜测机会,本轮得0分。"
    puts "我想的数是#{random_number}"
else
    points += 1
    puts "恭喜!你获得1分!"
    puts "你用了#{guess_count}次就猜对了我想的数#{random_number}。"
end

puts "请按回车键继续"
gets

# 修改后的函数:返回是否猜对
def answer_my_question(question, right_answer)
  answer = ""
  out_of_guesses = false
  guess_count = 0
  guess_limit = 3

  puts "你有3次机会回答这个问题,本轮没有提示"
  puts question

  while answer != right_answer.downcase and !out_of_guesses
    if guess_count == 0
      puts "输入你的第一次回答"
      answer = gets.chomp.downcase
      guess_count += 1
    elsif guess_count < guess_limit - 1
      puts "答错了!再试一次"
      answer = gets.chomp.downcase
      guess_count += 1
    else
      puts "输入你的最后一次回答"
      answer = gets.chomp.downcase
      guess_count += 1
      out_of_guesses = true if answer != right_answer.downcase
    end
  end

  # 返回是否猜对
  return !out_of_guesses
end

puts "第2轮"
# 接收函数返回的结果
round2_correct = answer_my_question("西班牙的首都是哪里?", "madrid")

if !round2_correct
    puts "答错了!"
    puts "你已经用完了所有猜测机会,本轮得0分"
else
    points += 1
    puts "恭喜!你获得1分!"
    puts "你答对了这个问题。"
end

puts "请按回车键继续"
gets

puts "第3轮"
round3_correct = answer_my_question("牙买加属于哪个大洲?", "north america")

if !round3_correct
    puts "答错了!"
    puts "你已经用完了所有猜测机会,本轮得0分"
else
    points += 1
    puts "恭喜!你获得1分!"
    puts "你答对了这个问题。"
end

puts "请按回车键继续"
gets

puts "游戏结束!你最终获得#{points}分"

额外说明

  • 函数里调整了循环条件,原来的逻辑会让第三次输入直接进入"用完次数",现在改为先接收第三次输入再判断是否正确,更符合预期。
  • 所有提示文本已翻译成中文,贴合使用习惯。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.27 05:28:11