<?xml version="1.0" encoding="utf-8" standalone="yes"?><rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom"><channel><title>FizzBuzz on kenji.blog</title><link>http://kenji.blog/zh-tw/tags/fizzbuzz/</link><description>Recent content in FizzBuzz on kenji.blog</description><generator>Hugo -- gohugo.io</generator><language>zh-tw</language><copyright>kenjinote</copyright><lastBuildDate>Fri, 18 Apr 2025 00:58:11 +0900</lastBuildDate><atom:link href="http://kenji.blog/zh-tw/tags/fizzbuzz/index.xml" rel="self" type="application/rss+xml"/><item><title>FizzBuzz</title><link>http://kenji.blog/zh-tw/p/fizzbuzz/</link><pubDate>Fri, 18 Apr 2025 00:58:11 +0900</pubDate><guid>http://kenji.blog/zh-tw/p/fizzbuzz/</guid><description>&lt;img src="http://kenji.blog/p/fizzbuzz/img.png" alt="Featured image of post FizzBuzz" />&lt;h2 id="fizzbuzz-到底是什麼">FizzBuzz 到底是什麼？
&lt;/h2>&lt;p>大家好！&lt;/p>
&lt;p>今天我想寫寫關於「FizzBuzz」的事。&lt;/p>
&lt;p>無論你是覺得「啊，那個我知道！」的人，還是「好像聽過，但不太清楚」的人，請稍微陪我一下。幾分鐘就能讀完，或許你會覺得「原來如此」。&lt;/p>
&lt;hr>
&lt;h3 id="不會寫-fizzbuzz-就不夠格當程式設計師是真的嗎">「不會寫 FizzBuzz 就不夠格當程式設計師」是真的嗎？
&lt;/h3>&lt;p>簡單來說，FizzBuzz 大概是這樣的東西。&lt;/p>
&lt;div class="highlight">&lt;div class="chroma">
&lt;table class="lntable">&lt;tr>&lt;td class="lntd">
&lt;pre tabindex="0" class="chroma">&lt;code>&lt;span class="lnt">1
&lt;/span>&lt;span class="lnt">2
&lt;/span>&lt;span class="lnt">3
&lt;/span>&lt;span class="lnt">4
&lt;/span>&lt;span class="lnt">5
&lt;/span>&lt;span class="lnt">6
&lt;/span>&lt;span class="lnt">7
&lt;/span>&lt;span class="lnt">8
&lt;/span>&lt;span class="lnt">9
&lt;/span>&lt;/code>&lt;/pre>&lt;/td>
&lt;td class="lntd">
&lt;pre tabindex="0" class="chroma">&lt;code class="language-python" data-lang="python">&lt;span class="line">&lt;span class="cl">&lt;span class="k">for&lt;/span> &lt;span class="n">i&lt;/span> &lt;span class="ow">in&lt;/span> &lt;span class="nb">range&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="mi">1&lt;/span>&lt;span class="p">,&lt;/span> &lt;span class="mi">101&lt;/span>&lt;span class="p">):&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="k">if&lt;/span> &lt;span class="n">i&lt;/span> &lt;span class="o">%&lt;/span> &lt;span class="mi">15&lt;/span> &lt;span class="o">==&lt;/span> &lt;span class="mi">0&lt;/span>&lt;span class="p">:&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="nb">print&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="s2">&amp;#34;FizzBuzz&amp;#34;&lt;/span>&lt;span class="p">)&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="k">elif&lt;/span> &lt;span class="n">i&lt;/span> &lt;span class="o">%&lt;/span> &lt;span class="mi">3&lt;/span> &lt;span class="o">==&lt;/span> &lt;span class="mi">0&lt;/span>&lt;span class="p">:&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="nb">print&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="s2">&amp;#34;Fizz&amp;#34;&lt;/span>&lt;span class="p">)&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="k">elif&lt;/span> &lt;span class="n">i&lt;/span> &lt;span class="o">%&lt;/span> &lt;span class="mi">5&lt;/span> &lt;span class="o">==&lt;/span> &lt;span class="mi">0&lt;/span>&lt;span class="p">:&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="nb">print&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="s2">&amp;#34;Buzz&amp;#34;&lt;/span>&lt;span class="p">)&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="k">else&lt;/span>&lt;span class="p">:&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="nb">print&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="n">i&lt;/span>&lt;span class="p">)&lt;/span>
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/td>&lt;/tr>&lt;/table>
&lt;/div>
&lt;/div>&lt;p>沒錯，這就是著名的「FizzBuzz 問題」。&lt;/p>
&lt;p>依序查看 1 到 100 的數字，&lt;br>
如果是 3 的倍數就顯示「Fizz」，如果是 5 的倍數就顯示「Buzz」，&lt;br>
如果是兩者的倍數就顯示「FizzBuzz」，非常簡單。&lt;/p>
&lt;p>儘管如此，不知為何它常常被當作「程式設計師的最低測試」來對待。面試時會出現，社群網路上也時常看到「連 FizzBuzz 都不會寫的人&amp;hellip;」這種高高在上的發言。&lt;/p>
&lt;p>不過，請等一下。&lt;/p>
&lt;p>真的能斷言「不會寫 FizzBuzz = 不會寫程式」嗎？&lt;/p>
&lt;hr>
&lt;h3 id="不是會不會而是有沒有會的狀態">不是會不會，而是有沒有會的「狀態」
&lt;/h3>&lt;p>的確，FizzBuzz 要求對語法的理解和基本的邏輯思考能力。所以用來「確認基礎」是可以理解的。&lt;/p>
&lt;p>但是。&lt;/p>
&lt;p>環境不同，結果也會不同。&lt;/p>
&lt;p>例如，&lt;/p>
&lt;ul>
&lt;li>在初次見面的面試官面前感到緊張時&lt;/li>
&lt;li>突然被交給一塊白板，手邊沒有編輯器時&lt;/li>
&lt;li>突然想不起「咦，modulo 是什麼來著？」時&lt;/li>
&lt;/ul>
&lt;p>……這些情況，難道沒有嗎？畢竟是人類，我想是有的。&lt;/p>
&lt;p>所以，與其說「能不能寫出 FizzBuzz」，不如說「能不能讓自己處於能寫出 FizzBuzz 的狀態」，其實才是更重要的。&lt;/p>
&lt;hr>
&lt;h3 id="常見的多練習就好建議的陷阱">常見的「多練習就好」建議的陷阱
&lt;/h3>&lt;p>一談到這個話題，很容易就會出現「所以要每天練習！」這樣的建議。&lt;/p>
&lt;p>的確，透過反覆練習就能寫得很流暢，這是事實，本身也是好事。但是，如果站在「不會寫 FizzBuzz 就不及格」的前提下，它有時就會變成單純的恐懼。&lt;/p>
&lt;p>也就是說，很容易形成「犯錯了 = 自己很沒用」的感覺。&lt;/p>
&lt;p>例如，早上睡過頭的那天，是不是很容易覺得「自己是個懶惰的人&amp;hellip;」？但那可能只是身體剛好累了而已。&lt;/p>
&lt;p>FizzBuzz 也是一樣的。&lt;/p>
&lt;hr>
&lt;h3 id="雖然這麼說fizzbuzz-仍是個好問題">雖然這麼說，FizzBuzz 仍是個好問題
&lt;/h3>&lt;p>儘管如此，並不是說 FizzBuzz 不好。&lt;/p>
&lt;p>相反地，我覺得這是一個非常好的問題。規則簡單，也很容易擴充。例如，試著像這樣改變一下，思考就會變得更深。&lt;/p>
&lt;div class="highlight">&lt;div class="chroma">
&lt;table class="lntable">&lt;tr>&lt;td class="lntd">
&lt;pre tabindex="0" class="chroma">&lt;code>&lt;span class="lnt">1
&lt;/span>&lt;span class="lnt">2
&lt;/span>&lt;span class="lnt">3
&lt;/span>&lt;span class="lnt">4
&lt;/span>&lt;span class="lnt">5
&lt;/span>&lt;span class="lnt">6
&lt;/span>&lt;span class="lnt">7
&lt;/span>&lt;/code>&lt;/pre>&lt;/td>
&lt;td class="lntd">
&lt;pre tabindex="0" class="chroma">&lt;code class="language-python" data-lang="python">&lt;span class="line">&lt;span class="cl">&lt;span class="k">for&lt;/span> &lt;span class="n">i&lt;/span> &lt;span class="ow">in&lt;/span> &lt;span class="nb">range&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="mi">1&lt;/span>&lt;span class="p">,&lt;/span> &lt;span class="mi">101&lt;/span>&lt;span class="p">):&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="n">output&lt;/span> &lt;span class="o">=&lt;/span> &lt;span class="s2">&amp;#34;&amp;#34;&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="k">if&lt;/span> &lt;span class="n">i&lt;/span> &lt;span class="o">%&lt;/span> &lt;span class="mi">3&lt;/span> &lt;span class="o">==&lt;/span> &lt;span class="mi">0&lt;/span>&lt;span class="p">:&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="n">output&lt;/span> &lt;span class="o">+=&lt;/span> &lt;span class="s2">&amp;#34;Fizz&amp;#34;&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="k">if&lt;/span> &lt;span class="n">i&lt;/span> &lt;span class="o">%&lt;/span> &lt;span class="mi">5&lt;/span> &lt;span class="o">==&lt;/span> &lt;span class="mi">0&lt;/span>&lt;span class="p">:&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="n">output&lt;/span> &lt;span class="o">+=&lt;/span> &lt;span class="s2">&amp;#34;Buzz&amp;#34;&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="nb">print&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="n">output&lt;/span> &lt;span class="ow">or&lt;/span> &lt;span class="n">i&lt;/span>&lt;span class="p">)&lt;/span>
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/td>&lt;/tr>&lt;/table>
&lt;/div>
&lt;/div>&lt;p>這是一個「不用 if-elif-else 也能寫出來」的例子。感覺有點聰明吧。&lt;/p>
&lt;p>也就是說，FizzBuzz 不僅僅是「做不做得到」，它也能成為觀察「如何寫」以及「理解到什麼程度」的入口。&lt;/p>
&lt;hr>
&lt;h3 id="總而言之">總而言之
&lt;/h3>&lt;p>我覺得不必對能不能寫出 FizzBuzz 賦予太多過度的意義。&lt;/p>
&lt;p>就算寫不出來，那也可能只是「現在狀態不太好」，而且事後仔細想想能寫出來的情況也很多。&lt;/p>
&lt;p>不用著急，慢慢前進吧。&lt;/p>
&lt;p>程式碼是人類寫的。既然是人類，就有忘記的時候，也有緊張的時候。一邊接受這些，一邊慢慢前進，我想這樣就足夠了。&lt;/p>
&lt;p>那麼，今天也輕鬆地寫程式碼吧。&lt;/p></description></item></channel></rss>