2

我正在尝试编写一个以 user_input 的数字结尾的循环 fizzbuzz 代码。到目前为止,代码有效,但它循环了您为 user_input 输入的次数,而不是在 user_input 的限制处结束。例如,如果我输入 25,它将循环 25 次,并且不会在 25 处结束。如何设置参数/范围?

这是我的代码:

puts("Please select a number that is at least 25. This is the limit for the fizzbuzz game.")

user_input = gets().chomp().to_i 

if
user_input < 25 
    puts("Please select a larger number.")

else 
user_input >= 25 
    user_input = user_input

    counter = 1

    while counter < user_input 
        puts(counter)
        counter = counter + 1

    (1..user_input).step do |i|

            if i % 3 == 0 && i % 5 == 0
                puts("fizzbuzz")
            elsif i % 3 == 0 
                puts("fizz")
            elsif i % 5 == 0 
                puts("buzz")
            else
                puts(i) 
            end
        end
    end 
end 
4

1 回答 1

2
  • ()当您不向方法发送参数并且通常不鼓励使用时,它是可选的
  • 你不应该使用else user_input >= 25else就足够了
  • user_input = user_input完全没用的线
  • while带计数器的循环不是 rubists 编码的方式,更喜欢迭代器。而且,你根本不应该while在这里
puts 'Please select a number that is at least 25. This is the limit for the fizzbuzz game.'    
user_input = gets.chomp.to_i
if user_input < 25
  puts 'Please select a larger number.'
else
  1.upto(user_input) do |i|
    if i % 3 == 0 && i % 5 == 0
      puts 'fizzbuzz'
    elsif i % 3 == 0
      puts 'fizz'
    elsif i % 5 == 0
      puts 'buzz'
    else
      puts i
    end
  end
end

可选地,您可以使用case-when而不是多个elsif语句:

puts 'Please select a number that is at least 25. This is the limit for the fizzbuzz game.'
user_input = gets.chomp.to_i
if user_input < 25
  puts 'Please select a larger number.'
else
  1.upto(user_input) do |i|
    case
    when [3, 5].all? { |n| i % n == 0 }; puts 'fizzbuzz'
    when i % 3 == 0; puts 'fizz'
    when i % 5 == 0; puts 'buzz'
    else; puts i
    end
  end
end
于 2014-12-24T04:55:23.743 回答