循环范围和自定义输出 上面注释掉的代码正是我试图消除和消除的 用ruby中的for else循环完成 本质上,我想检查用户是否在 有效范围(0-100),然后执行与之相关的代码,如果用户输入的数字超出范围,请使用其他重试 我想给出一个与输入值相关的字母等级。 因此,如果输入了有效值->获取与之关联的等级->否则“请重试”。你有没有想过如何通过更多的 最佳循环,而不是我讨厌的多个案例之前的代码

循环范围和自定义输出 上面注释掉的代码正是我试图消除和消除的 用ruby中的for else循环完成 本质上,我想检查用户是否在 有效范围(0-100),然后执行与之相关的代码,如果用户输入的数字超出范围,请使用其他重试 我想给出一个与输入值相关的字母等级。 因此,如果输入了有效值->获取与之关联的等级->否则“请重试”。你有没有想过如何通过更多的 最佳循环,而不是我讨厌的多个案例之前的代码,ruby,for-loop,range,Ruby,For Loop,Range,更新: 正如你所想的那样简单,如果我现在明白了,你只需要在用户的输入在你想要的范围内时询问,如果是,你可以跳过while并做你想做的事情: 完整代码为: puts 'Please insert a number between 1 and 100.' num = gets.to_i while !num.between?(1, 100) #num = gets.chomp.to_i grade = loop do puts 'Check your score!' input = ge

更新:


正如你所想的那样简单,如果我现在明白了,你只需要在用户的输入在你想要的范围内时询问,如果是,你可以跳过while并做你想做的事情:

完整代码为:

puts 'Please insert a number between 1 and 100.'
num = gets.to_i

while !num.between?(1, 100)
#num = gets.chomp.to_i

grade = loop do
  puts 'Check your score!'
  input = gets.to_i  
  case input
  when 1..60
    break 'F'
  when 60..70
    break 'D'
  when 70..80
    break 'C'      
  when 80..90
    break 'B'
  when 90..100
    break 'A'              
  else
    puts 'Please insert a VALID number between 1 and 100.'
    num = gets.to_i
  end      
end    

puts "Your grade is #{grade}"

end

正如你所想的那样简单,如果我现在明白了,你只需要在用户的输入在你想要的范围内时询问,如果是,你可以跳过while并做你想做的事情:

完整代码为:

puts 'Please insert a number between 1 and 100.'
num = gets.to_i

while !num.between?(1, 100)
#num = gets.chomp.to_i

grade = loop do
  puts 'Check your score!'
  input = gets.to_i  
  case input
  when 1..60
    break 'F'
  when 60..70
    break 'D'
  when 70..80
    break 'C'      
  when 80..90
    break 'B'
  when 90..100
    break 'A'              
  else
    puts 'Please insert a VALID number between 1 and 100.'
    num = gets.to_i
  end      
end    

puts "Your grade is #{grade}"

end

你设计得太过火了

puts 'Please insert a number between 1 and 100.'
num = gets.to_i

while not num.between?(0,100) do

    puts 'Please insert a number between 1 and 100.'
    num = gets.to_i

end

puts 'Thanks. You inserted ' + num.to_s + '!'
case num
  when 60
    puts "Student gets F grade"
  when 60..70
    puts "Student gets D grade"    
  when 70..80
    puts "Student gets C grade"    
  when 80..90
    puts "Student gets B grade"    
  when 90..100
    puts "Student gets A grade"    
  else
    puts "Grade not available for that value."
end    

你设计得太过火了

puts 'Please insert a number between 1 and 100.'
num = gets.to_i

while not num.between?(0,100) do

    puts 'Please insert a number between 1 and 100.'
    num = gets.to_i

end

puts 'Thanks. You inserted ' + num.to_s + '!'
case num
  when 60
    puts "Student gets F grade"
  when 60..70
    puts "Student gets D grade"    
  when 70..80
    puts "Student gets C grade"    
  when 80..90
    puts "Student gets B grade"    
  when 90..100
    puts "Student gets A grade"    
  else
    puts "Grade not available for that value."
end    

我认为你对case表达式的理解是正确的。只需将其全部放入一个
循环
,并将其返回值赋给一个变量即可。如果分支使用
break('grade')


我认为你对case表达式的理解是正确的。只需将其全部放入一个
循环
,并将其返回值赋给一个变量即可。如果分支使用
break('grade')


这是以类似Ruby的方式获得所需结果的多种方法之一

grade = loop do
  puts 'What\'s your score'
  input = gets.to_i  
  case input
  when 1..10
    break 'F'
  when 11..20
    break 'E'
  else
    puts 'invalid score try again'
  end
end

puts "Your grade is #{grade}"
NumberToLetter=[[F',59],'D',69],'C',79],'B',89],'A',100]]
def字母_等级
num=数量\等级

letter,|=NumberToLetter.find{| |,n | num这是以类似Ruby的方式获得所需结果的多种方法之一

grade = loop do
  puts 'What\'s your score'
  input = gets.to_i  
  case input
  when 1..10
    break 'F'
  when 11..20
    break 'E'
  else
    puts 'invalid score try again'
  end
end

puts "Your grade is #{grade}"
NumberToLetter=[[F',59],'D',69],'C',79],'B',89],'A',100]]
def字母_等级
num=数量\等级


字母,=NumberToLetter.find{| | |,n | num这是如何将字母等级与值关联的?这是如何将字母等级与值关联的?这是如何将字母等级与值关联的?@KennethNoisewater博士对不起,我不完全理解这个问题,你认为字母等级与值关联是什么意思?@JoshBrody哈哈,谢谢,但我犯了一个巨大的错误b以前那么现在我有点confused@Dr.KennethNoisewater现在我明白了,我修改了答案现在它做了你想做的第一件事你应该能够重构它以避免两个不同的
get
调用。这如何将字母等级与值关联?@Dr.kennethnoiswater抱歉,我不完全理解这个问题,w“你是说字母等级有什么价值?”JoshBrody哈哈谢谢,但我以前犯了一个很大的错误,所以现在我有点confused@Dr.KennethNoisewater现在我明白了,我修改了答案现在它做了你想做的第一件事你应该能够重构它以避免两个不同的
get
调用otten close,我已经更新了Q。谢谢使用这个我已经接近了,我已经更新了Q。我喜欢你如何将有效输入的集合从实际转换中分离出来。我喜欢你如何将有效输入的集合从实际转换中分离出来。在我看来,你好像把下面两个独立的答案结合在一起,结果是一团糟。哟你有两个循环,一个循环在另一个循环中,你有三个单独的调用
get
。你可能想退一步,了解你真正在做什么。你很少看到
for..else..end
。Ruby的方法是使用带有枚举数的块,例如
obj.each{…
obj.map{…}
等等。这在一定程度上是因为块创建了一个新的作用域,该作用域对代码的其他部分隐藏信息。如果从该语言中删除了“
for..else..end”
,则会对某些现有应用程序造成严重破坏,但不会错过。在我看来,您将下面两个单独的答案组合在一起,结果是一团糟。Y你有两个循环,一个循环在另一个循环中,你有三个单独的调用
get
。你可能想退一步,了解你真正在做什么。你很少看到
for..else..end
。Ruby的方法是使用带有枚举数的块,例如
obj.each{…
obj.map{…}
等等。这在一定程度上是因为块创建了一个新的作用域,该作用域对代码的其他部分隐藏信息。如果从语言中删除了“
for..else..end”
,则会对某些现有应用程序造成严重破坏,但不会错过。