<?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-cn/tags/fizzbuzz/</link><description>Recent content in FizzBuzz on kenji.blog</description><generator>Hugo -- gohugo.io</generator><language>zh-cn</language><copyright>kenjinote</copyright><lastBuildDate>Fri, 18 Apr 2025 00:58:11 +0900</lastBuildDate><atom:link href="http://kenji.blog/zh-cn/tags/fizzbuzz/index.xml" rel="self" type="application/rss+xml"/><item><title>FizzBuzz</title><link>http://kenji.blog/zh-cn/p/fizzbuzz/</link><pubDate>Fri, 18 Apr 2025 00:58:11 +0900</pubDate><guid>http://kenji.blog/zh-cn/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都写不出来的人……”这样高高在上的言论。&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>比如，早上睡懒觉的那天，是不是很容易觉得“我真是个懒虫……”？但那也许只是刚好身体累了而已。&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>