总计newb在这里和其他fizzbuzz问题

时间:2014-12-24 04:33:59

标签: ruby fizzbuzz

我正在尝试编写一个以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 

1 个答案:

答案 0 :(得分: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