处理Ruby Case语句

处理Ruby Case语句,ruby,Ruby,我试图在下面的代码段中重写“if/else语句”,用一个“case”语句替换它,我被它卡住了几个小时——我遗漏了什么 puts "Welcome to 'Guess My Number!'" print "What is your name?" input = gets name = input.chomp puts "Welcome, #{name.upcase!}!" puts "I've got a random number between 1 and 100!" puts "Can

我试图在下面的代码段中重写“if/else语句”,用一个“case”语句替换它,我被它卡住了几个小时——我遗漏了什么

puts "Welcome to 'Guess My Number!'"
print "What is your name?"
input = gets
name = input.chomp

puts "Welcome, #{name.upcase!}!"
puts "I've got a random number between 1 and 100!"
puts "Can you guess it?"
target = rand(100) + 1 

num_guesses = 0
guessed_it = false
until num_guesses == 10 || guessed_it
    remaining_guesses = 10 - num_guesses
    puts "You've got #{remaining_guesses.to_s} guesses left!"
    print "Make a guess, put down a number: "
    guess = gets.chomp.to_i
    num_guesses = num_guesses + 1
end

puts case verification
    when guess < target 
        then "Ooops. Your guess was LOW."
    when guess > target
        then "Ooops. Your guess was HIGH."
    when guess < -1 
        then puts "Oooops. You have entered a number lower that 1!"
    when guess > 100
        then puts "Oooops. You have entered a number higher than 100!"
    when guess =~ /^([w])/
        then puts "Ooops. Looks like you have entered a non numeric 
value!"
    when guess == String
        then puts "Oooops! Looks like you have entered a non numeric 
value"

    when guess == target 
        then puts "Good job, #{name}!"  
             puts "You guessed my number in #{num_guesses} guesses!"
             guessed_it = true
end

unless guessed_it
    puts "Sorry, you didn't get my number. My number was #{target}."
end
显示“欢迎来到‘猜我的号码!’
打印“你叫什么名字?”
输入=获取
name=input.chomp
放上“欢迎,#{name.upcase!}!”
放入“我有一个介于1和100之间的随机数!”
写着“你能猜到吗?”
目标=兰特(100)+1
num_猜测=0
猜到了吗
直到num|u猜测==10||猜到为止
剩余猜数=10-num猜数
放上“你还有{剩余的{猜测。剩下的{猜测!”
打印“猜一猜,记下一个数字:”
guess=get.chomp.to_i
num_猜测=num_猜测+1
结束
案例验证
当猜测<目标
然后“哎呀,你猜得太低了。”
当猜测>目标
然后“哎呀,你猜得太高了。”
当猜测<-1时
然后输入“哎呀,你输入的数字比1小!”
当猜测>100
然后输入“哎呀,你输入了一个大于100的数字!”
当猜测=~/^([w])/
然后输入“oops.看起来您输入了一个非数字
价值!”
当guess==字符串时
然后输入“Oooops!看起来您输入了一个非数字
“价值”
当guess==目标时
然后放上“干得好,{name}!”
把“你猜到我的号码了{num_猜}猜!”
猜到了吗
结束
除非你猜到了
“对不起,你没有收到我的号码。我的号码是#{target}。”
结束
“案例陈述”用于替换和增强以下if else陈述的逻辑:

if guess < target
    puts "Ooops. Your guess was LOW."
 elsif guess > target
  puts "Ooops. Your guess was HIGH."
 elsif guess == target 
  puts "Good job, #{name}!" 
  puts "You guessed my number in #{num_guesses} guesses!"
  guessed_it = true
 end
如果猜测目标
“哎呀,你猜得很高。”
elsif guess==目标
“干得好,{name}!”
把“你猜到我的号码了{num_猜}猜!”
猜到了吗
结束

您的问题是,您使用的是带有可选条件的
case
形式,但您使用的是
when
子句,就好像您使用的是条件较少的
case

puts case
     when guess < target 
       "Ooops. Your guess was LOW."
put case
当猜测<目标
“哎呀,你猜得太低了。”
应该有用

进一步解释: 使用无条件的
case
,执行带有truthy表达式的
分支时最早的
。这就是你想要的

但是您使用的是
案例
验证
。在这种情况下,将所有分支与
验证
进行比较,并执行
验证===分支条件
为真的第一个分支。
因为在您的示例中,我猜测
验证
总是
nil
,并且您的所有分支的条件总是
true
false
,所以不会执行任何分支。

您可以使用
case
这样的语句:

类字符串
def绿色;“\e[32m{self}\e[0m”结束
def黄色;“\e[33m{self}\e[0m”结束
def青色;“\e[36m{self}\e[0m”结束
def bg#U blue;“\e[44m{self}\e[0m”;结束
def bold;“\e[1m{self}\e[22m”结束
def下划线;“\e[4m{self}\e[24m”结束
def border(num);“\n#{'-'*num}\n#{self}\n#{'-'*num}\n”结束
结束
puts;puts“欢迎来到‘猜我的号码!’”。粗体。bg_蓝;puts
打印“你叫什么名字?”绿色
name=gets.chomp
将“\nWelcome,#{name.upcase!}!\n”放入青色下划线
输入“我有一个介于1和100之间的随机数!\n你猜得到吗?”。border(44)
目标=兰特(100)+1
num_猜测=0
猜到了吗
直到num|u猜测==10||猜到为止
剩余猜数=10-num猜数
放置“\n您还有{剩余的}个猜测!\n”
输入;打印“猜一猜,输入一个数字:”
guess=get.chomp
case guess.to_i
何时(1…目标)
放上“哦,你的猜测很低”。黄色。边框(26)
何时(目标+1..100)
放上“哎哟,你的猜测很高”。黄色。边框(26)
当目标
放置;放置;放置
放上“干得好,#{name}!”。粗体。绿色
在“+”{num#u guesses}guesses!”中输入“你猜到我的号码了!”青色
放置;放置;放置
猜到了吗
其他的
放置“Oooops.您没有输入1到100之间的数字”。黄色。边框(47);放置
结束
num_猜测+=1
结束
除非你猜到了
对不起,你没有收到我的号码。我的号码是#{target}
结束

非常感谢大家!在你们无价的帮助下,我终于从这个小任务中恢复了耐心和满足感:)我的错误是,我违反了常识规则,试图以错误的顺序运行几段代码。我将case语句移到了until循环中,现在我所要做的就是纠正错误错误,尤其是when/then语句。它有效:)

直到num|u猜测==10||猜到它
剩余猜数=10-num猜数
放上“你还有{剩余的{猜测。剩下的{猜测!”
打印“猜一猜,记下一个数字:”
guess=get.chomp.to_i
num_猜测=num_猜测+1
提出
当猜测<目标
然后“哎呀,你猜得太低了。”
当猜测>目标
然后“哎呀,你猜得太高了。”
当猜测<-1时
然后输入“哎呀,你输入的数字比1小!”
当猜测>100
然后输入“哎呀,你输入了一个大于100的数字!”
当猜测=~/^([w])/
然后放入“oops.看起来您输入了一个非数值!”
当guess==字符串时
然后放入“Oooops!看起来您输入了一个非数值”
当guess==目标时
然后放上“干得好,{name}!”
把“你猜到我的号码了{num_猜}猜!”
猜到了吗
结束
结束
除非你猜到了
“对不起,你没有收到我的号码。我的号码是#{target}。”
结束

1.在发布的代码2中没有if/else语句。请发布发生了什么,以及您希望发生什么
    until num_guesses == 10 || guessed_it
    remaining_guesses = 10 - num_guesses
    puts "You've got #{remaining_guesses.to_s} guesses left!"
    print "Make a guess, put down a number: "
    guess = gets.chomp.to_i
    num_guesses = num_guesses + 1

        puts case 
        when guess < target 
            then "Ooops. Your guess was LOW."
        when guess > target
            then "Ooops. Your guess was HIGH."
        when guess < -1 
            then puts "Oooops. You have entered a number lower that 1!"
        when guess > 100
            then puts "Oooops. You have entered a number higher than 100!"
        when guess =~ /^([w])/
            then puts "Ooops. Looks like you have entered a non numeric value!"
        when guess == String
            then puts "Oooops! Looks like you have entered a non numeric value"

        when guess == target 
            then puts "Good job, #{name}!"  
                 puts "You guessed my number in #{num_guesses} guesses!"
        guessed_it = true
    end
end

unless guessed_it
    puts "Sorry, you didn't get my number. My number was #{target}."
end