处理Ruby Case语句
我试图在下面的代码段中重写“if/else语句”,用一个“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
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