盡管很忙匿辩,作業(yè)還是要完成的舔庶,晚上去健身房的時間用來寫作業(yè),不過學(xué)習(xí)一門新的語言還是很興奮的。
** 這期的作業(yè)題目是這個樣子的 **
Write a program that outputs the string representation of numbers from 1 to n.
But for multiples of three it should output “Fizz” instead of the number and for the multiples of five output “Buzz”. For numbers which are multiples of both three and five output “FizzBuzz”.
Example:
n = 15,
Return: [
"1",
"2",
"Fizz",
"4",
"Buzz",
"Fizz",
"7",
"8",
"Fizz",
"Buzz",
"11",
"Fizz",
"13",
"14",
"FizzBuzz"
]
我的思路
從 1 開始循環(huán)膝晾,如果能被對3 求余等于0幻赚,則輸出Fizz
,如果能被5除盡,則輸出Buzz
领跛,如果既能被3除盡,也能被5除盡,則輸出 FizzBuzz
蘑拯,否則輸出該數(shù)本身
其實(shí)思路很簡單很簡單孔轴,重要的是讓我們練習(xí)一下 Ruby 的 一些新語法。
于是,剛開始我寫了下面的代碼
class FizzBuzz
def fizz_buzz(n)
for i in 1..n
if i % 3 == 0 && i % 5 == 0
puts("FizzBuzz")
elsif i % 5 == 0
puts("Buzz")
elsif i % 3 == 0
puts("Fizz")
else
puts i
end
end
end
end
object = FizzBuzz.new()
object.fizz_buzz(15)
這里要注意的是浓领,Ruby 用 def .... end
來定義一個函數(shù)玉凯,輸出既可以用puts
,也可以用 print
,但是這兩個是有一點(diǎn)區(qū)別的联贩,具體區(qū)別請看print 和 p 的區(qū)別
然后漫仆,我針對我寫的代碼用 test_unit 寫了測試,所以泪幌,對第一次寫的代碼進(jìn)行了稍微的改動盲厌,之后代碼長這樣,
class FizzBuzz
def fizz_buzz(n)
array = Array.new
for i in 1..n
if i % 3 == 0 && i % 5 ==0
array << "FizzBuzz"
elsif i % 5 == 0
array << "Buzz"
elsif i % 3 == 0
array << "Fizz"
else
array << i
end
end
array
end
end
對應(yīng)的測試是這樣的
require 'test/unit'
require "./fizz_buzz.rb"
class FizzBuzzTest < Test::Unit::TestCase
def test_fizz_buzz()
object = FizzBuzz.new
result = object.fizz_buzz(15)
assert_equal[1,2,"Fizz",4,"Buzz","Fizz",7,8,"Fizz","Buzz",11,"Fizz",13,14,"FizzBuzz"], result
end
end
寫代碼時遇到的問題
- 創(chuàng)建數(shù)組時祸泪,寫成了
array = array.new
,所以一直報錯吗浩,我竟然很長時間沒有改出來。 - 第一次還是用以前的 puts 方法没隘,并沒有用數(shù)組的方法懂扼,因?yàn)槲蚁氲降氖?既然 js 可以用
spyon
來測試 ``console.log,那么Ruby 也應(yīng)該有方法來測試
puts` 吧,但是我在搜了一會兒資料阀湿,發(fā)現(xiàn)并不好寫赶熟,而且測試將會變的很麻煩,所以我將輸出的結(jié)果都放進(jìn)數(shù)組里面陷嘴,這樣測試就變的很簡單映砖。 - 數(shù)組方法第一次我并不知道還有
>>
這個方法,我用的是array.push()
這個方法灾挨,結(jié)果運(yùn)行結(jié)果也正確邑退,無意間看到了同學(xué)寫的代碼,我發(fā)現(xiàn)了這個符號劳澄,更改之后發(fā)現(xiàn)運(yùn)行也正常瓜饥,所以這兩種方法都是可行的。
測試通過的樣子是這樣的
這和 Jasmine 跑測試結(jié)果是一樣的浴骂,但是需要強(qiáng)調(diào)的是 test_unit 的測試方法其實(shí)和 Junit 比較像,而不是 Jasmine宪潮。
Demo 的 github 地址:https://github.com/RangelZZZ/ruby_example