【问题标题】:Total newb here and other fizzbuzz issue这里的总新手和其他 fizzbuzz 问题
【发布时间】:2014-12-24 04:33:59
【问题描述】:

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

【问题讨论】:

  • 当您只需要一个时,您正在使用两个循环。删除step 循环,并将所有对i 的引用替换为counter。这应该让您更接近解决方案的step(呵呵)。 (检查你的&lt;;另外,请注意user_input &gt;= 25 是两次无用的,因为它不被任何东西使用,而且即使你写的是elsif 而不是else,在评估时它总是正确的。)或者(更好),使用范围做所有事情并删除while
  • 不喜欢 while 语句,我会使用 1.upto(user_input) 并在其中实现一个案例

标签: ruby fizzbuzz


【解决方案1】:
  • 当您不向方法发送参数并且通常不鼓励使用时,可以选择写()
  • 你不应该用else user_input &gt;= 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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2010-10-19
    • 1970-01-01
    • 2023-04-03
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多