剧透警报:我是一个真正的新手。任务中弄清楚fizz的嗡嗡声 ruby for class,虽然我发现了多个版本的代码 解决问题,我的理解是如此简陋,我不能 弄清楚这些例子是如何真正起作用的。
第一个问题(如果你大声笑出来,请参考扰流警报): 如何在Ruby中打印1到100的数字?
第二个问题:可以'if else'用来解决这个问题吗?我失败的代码是 下面(附件有截屏):
puts('Lets play fizzbuzz')
print('enter a number: ')
number = gets()
puts(number)
if number == % 3
puts ('fizz')
elsif number == % 5
puts ('buzz')
elsif number == %15
puts ('fizzbuzz')
end
谢谢,
答案 0 :(得分:3)
多数民众赞成新手,我们都必须从某个地方开始吧? Ruby非常可爱,因为它让我们一直使用块,所以要数到100,你可以在fixnum上使用几种方法,查看文档以获取更多信息。这是一个可能对您有帮助的例子;
1.upto 100 do |number|
puts number
end
对于你的第二个问题,也许你可以快速浏览一下我为你掀起的小实现,希望可以帮助你理解这个问题:
1.upto 100 do |i|
string = ""
string += "Fizz" if i % 3 == 0
string += "Buzz" if i % 5 == 0
puts "#{i} = #{string}"
end
答案 1 :(得分:2)
答案 2 :(得分:2)
另一种有用的方法:
puts (1..100).map {|i|
f = i % 3 == 0 ? 'Fizz' : nil
b = i % 5 == 0 ? 'Buzz' : nil
f || b ? "#{ f }#{ b }" : i
}
答案 3 :(得分:1)
关于失败的代码,您的条件语句应如下所示:
if number % 3 == 0
puts "Fizz"
end
if number % 5 == 0
puts "Buzz"
end
您不需要最后一个elsif语句,因为它永远不会被执行 (如果一个数字不能被3整除或被5整除,则肯定不能被15整除) 通过将第二个elsif更改为简单来调整此项,如果数字可以除以5而不是3,那么Fizz将不会输出但是Buzz将会
我只是向您展示如何更正您的代码,但正如其他人所指出的那样,Ruby中有更优雅的解决方案。
答案 4 :(得分:1)
不是最美妙的写作方式,但对初学者和可读性都有好处。
def fizzbuzz(n)
(1..n).each 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
fizzbuzz(100)
答案 5 :(得分:1)
1.upto(100).each do |x| # Question #1 The 'upto' method here takes is
# what you would use to count in a range.
if (x % 3 == 0) && (x % 5 == 0)
puts " Fizzbuzz"
elsif x % 3 == 0
puts " Fizz"
elsif x % 5 == 0
puts " Buzz"
else
puts x
end
end
问题#2是的,可以,但我会寻找一种更优雅的方式将其作为定义的一部分来编写,如
def fizzbuzz(last_number)
1.upto(last_number).each do |x|
if (x % 3 == 0) && (x % 5 == 0)
puts " Fizzbuzz"
elsif x % 3 == 0
puts " Fizz"
elsif x % 5 == 0
puts " Buzz"
else
puts x
end
end
end
这是帮助我理解没有使用.each方法创建变量的答案。抱歉我的缩进。还在学习如何使用Stackoverflow文本编辑。
答案 6 :(得分:1)
作为一个班轮
;WITH XmlCte AS
(
SELECT
LibraryId,
RealXmlData = CAST(XmlData AS XML)
FROM dbo.Library
)
SELECT
LibraryId,
Author = XC.value('(Author/text())[1]', 'varchar(50)'),
Title = XC.value('(Title/text())[1]', 'varchar(50)')
FROM
RealXmlData
CROSS APPLY
XmlData.nodes('/Library/Books/LibraryBook') AS XT(XC)
答案 7 :(得分:0)
这是我最“惯用的红宝石”解决方案:
class FizzBuzz
def perform
iterate_to(100) do |num,out|
out += "Fizz" if num.divisable_by?(3)
out += "Buzz" if num.divisable_by?(5)
out || num
end
end
def iterate_to(max)
(1..max).each do |num|
puts yield num,nil
end
end
end
class Fixnum
def divisable_by?(num)
self % num == 0
end
end
class NilClass
def +(other)
other
end
end
FizzBuzz.new.perform
它有效:
答案 8 :(得分:-1)
FizzBuzz
(1..100).每个做 |num|
if num % 3 == 0 && num % 5 == 0
puts "#{num}. FIZZBUZZ!"
elsif num % 3 == 0
puts "#{num}. FIZZ!"
elsif num % 5 == 0
puts "#{num}. BUZZ!"
else
puts "#{num}."
end
结束
答案 9 :(得分:-2)
第一个问题:
for i in 1..100
puts i
end