【问题标题】:Print out all numbers 1 - 1000 except those divisible by 100打印除能被 100 整除的所有数字 1 - 1000
【发布时间】:2018-04-10 22:19:01
【问题描述】:

我的练习希望返回所有数字 1 - 1000,但可被 100 整除的数字除外。

n = 1
1000.times do
  if n % 1 == 0
    if n % 100 == 0
      if n % 400 == 0
        p n
      else
      end
    else
      p n
    end
  else
  end
  n = n + 1
end

数字 400 和 800 仍在打印中。需要帮助了解为什么这不起作用。

【问题讨论】:

  • 好吧,你的代码清楚地表明应该打印能被 400 整除的数字(包括 400 和 800)......为什么if n % 400 == 0 行甚至从那里开始?
  • 您可以使用(1..10).each { |n| p n unless n % 2 == 0 } 打印除可被2 整除的数字1 到10。将此用作模板。
  • 能否请您澄清过滤后的数字是否应作为数组返回或在处理时打印?
  • 感谢您的回复和帮助。应该在处理它们时打印出来
  • 好的。我想我明白了。谢谢你。我删除了 400。谢谢。我只需要了解为什么包含 400。

标签: ruby loops conditional


【解决方案1】:

与其使用Integer#times 并自己跟踪n,不如考虑像这样使用Range#each

(1..1000).each do |n|
  puts n if n % 100 != 0
end

您也可以将块传递给Integer#times,但您应该知道n 将从0 开始并上升到Integer - 1

【讨论】:

  • 感谢您的帮助。所以这是一个初学者的 Ruby 练习。所以,我们还没有被介绍给你建议的流程。我们将按原样运行程序。
【解决方案2】:

你可以这样做:
创建一个介于 1 和 1000 之间的数字范围,并过滤掉可被 100 整除的数字。

puts [*1..1000].reject{|n| n % 100 == 0}

【讨论】:

    【解决方案3】:

    这里有两个提示

    • 您确实不需要为此引入一个新变量。您可以使用范围提供给您的那个。

      1000.times do |i|
        # code
      end
      
    • 特别是在 Ruby 中,unless 关键字用作否定的 if。想想这句话:“除非我正在查看的变量可以被零整除,否则我想打印它。”您可以使用它来提供帮助。您确实不需要需要多个条件。

    【讨论】:

      【解决方案4】:

      好的。所以我相信我更好地理解了代码并删除了 400 及其对应的 else/end。我相信这是正确的答案。谢谢你们的帮助。刚开始学习Ruby。

      n = 1
      
      1000.times do
       if n % 1 == 0 
        if n % 100 == 0
                else
                    p n
                end
              else
              end
      n = n + 1 
      end
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2022-01-23
        • 2019-04-16
        • 1970-01-01
        • 1970-01-01
        • 2020-08-04
        • 2021-01-09
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多