本系列文章为laracasts.com 的系列视频教程——Code Katas in PHP 的学习笔记。若喜欢该系列视频,可去该网站订阅后下载该系列视频,支持正版。

Kata 是一个简短,可重复的编程挑战,可以帮助我们进行快速地编程练习。

开发模型仍旧是 TDD(测试驱动开发),视频中使用的是 phpspec 进行开发,笔记中使用了 Laravel 应用,因此代码有不同。

本节说明

对应第 6 小节:FizzBuzz

本节内容

这一节我们的练习是 FizzBuzz 游戏。首先我们简单了解下规则:写一个程序按自然数的顺序打印数字,但是在遇到 3 的倍数时用“fizz”替代数字,5 的倍数用“buzz”代替,既是 3 的倍数又是 5 的倍数打印“fizzbuzz”。我们来开始练习:

$ php artisan make:test FizzBuzzTest --unit

添加第一个测试:

namespace Tests\Unit;

use Tests\TestCase;

use App\FizzBuzz;

class FizzBuzzTest extends TestCase

{

public function setUp()

{

parent::setUp();

$this->fizzbuzz = new FizzBuzz();

}

/** @test */

public function it_translate_1_for_fizzbuzz()

{

$this->assertEquals($this->fizzbuzz->execute(1),1);

}

}

运行测试:

我们来让测试通过:

app\FizzBuzz.php

namespace App;

class FizzBuzz

{

public function execute($number)

{

return $number;

}

}

再次测试:

向前推进:

.

.

/** @test */

public function it_translate_2_for_fizzbuzz()

{

$this->assertEquals($this->fizzbuzz->execute(2),2);

}

}

运行测试:

测试通过,所以我们继续向前推进:

.

.

/** @test */

public function it_translate_3_for_fizzbuzz()

{

$this->assertEquals($this->fizzbuzz->execute(3),'fizz');

}

}

我们来让测试通过:

app\FizzBuzz.php

namespace App;

class FizzBuzz

{

public function execute($number)

{

if($number % 3 == 0) return 'fizz';

return $number;

}

}

再次测试:

继续向前推进:

.

.

/** @test */

public function it_translate_5_for_fizzbuzz()

{

$this->assertEquals($this->fizzbuzz->execute(5),'buzz');

}

}

运行测试:

我们来让测试通过:

namespace App;

class FizzBuzz

{

public function execute($number)

{

if($number % 5 == 0) return 'buzz';

if($number % 3 == 0) return 'fizz';

return $number;

}

}

运行测试:

向前推进:

.

.

/** @test */

public function it_translate_6_for_fizzbuzz()

{

$this->assertEquals($this->fizzbuzz->execute(6),'fizz');

}

}

运行测试:

测试通过,所以我们继续推进:

.

.

/** @test */

public function it_translate_10_for_fizzbuzz()

{

$this->assertEquals($this->fizzbuzz->execute(10),'buzz');

}

}

运行测试:

继续推进:

.

.

/** @test */

public function it_translate_15_for_fizzbuzz()

{

$this->assertEquals($this->fizzbuzz->execute(15),'fizzbuzz');

}

}

运行测试:

我们来让测试通过:

namespace App;

class FizzBuzz

{

public function execute($number)

{

if($number % 15 == 0) return 'fizzbuzz';

if($number % 5 == 0) return 'buzz';

if($number % 3 == 0) return 'fizz';

return $number;

}

}

运行测试:

现在我们的三条规则已经测试完毕,为了保险起见,我们可以多做几个随机测试:

.

.

/** @test */

public function it_translate_123_for_fizzbuzz()

{

$this->assertEquals($this->fizzbuzz->execute(123),'fizz');

}

/** @test */

public function it_translate_150_for_fizzbuzz()

{

$this->assertEquals($this->fizzbuzz->execute(150),'fizzbuzz');

}

}

运行测试:

现在我们只用添加一个方法,将转换后的结果组合起来即可:

.

.

/** @test */

public function it_translate_a_sequence_of_number_for_fizzbuzz()

{

$this->assertEquals(

$this->fizzbuzz->executeUpTo(10),

[1,2,'fizz',4,'buzz','fizz',7,8,'fizz','buzz']

);

}

}

代码实现很简单:

.

.

public function executeUpTo($number)

{

$output = [];

foreach (range(1,$number) as $i)

{

$output[] = $this->execute($i);

}

return $output;

}

}

运行测试:

t66y.buzz index.php,6.FizzBuzz相关推荐

  1. buzz fizz 翻译_The Fizz-Buzz

    为何牛津阅读树如此火? 1.完美分级 全套分两大系统:First Stories 和Phonics,纯故事和故事加自然拼读. 这两个部分互相辅助,相互交叉.而每个部分又分别都有清晰的分级,层层递进,让 ...

  2. 【跟Leon一起刷LeetCode】412. Fizz Buzz

    Fizz Buzz Description: Write a program that outputs the string representation of numbers from 1 to n ...

  3. leetcode lintcode python

    目录 1.Two Sum(Hash Table) Given an array of integers,return indices of the two numbers such that they ...

  4. 【代码】LeetCode刷题Python版

    python版LeetCode 算法部分 811. 子域名访问计数 class Solution:def subdomainVisits(self, cpdomains):""&q ...

  5. elasticsearch 嵌入式_Elasticsearch 开箱指南

    内容概要 ES 基础介绍,重点是其中的核心概念. 基础 API 实践操作. 1. 基础介绍 Elasticsearch (ES) 是一个数据库,提供了分布式的.准实时搜索和分析. 基于 Apache ...

  6. python coding_Python终极coding

    作为一名程序员,除了需要具备解决问题的思路以外,代码的质量和简洁性也很关键.因为从一个人的代码可以直接看出你的基本功.对于Python而言,这就意味着你需要对Python的内置功能和库有很深入的了解. ...

  7. Elasticsearch 开箱指南

    内容概要 ES 基础介绍,重点是其中的核心概念. 基础 API 实践操作. 1. 基础介绍 Elasticsearch (ES) 是一个数据库,提供了分布式的.准实时搜索和分析. 基于 Apache ...

  8. Head First HTML and CSS

    <Head First HTML and CSS>是一本html和css入门级的书,知识点很全,风趣幽默.下面是我的读书笔记. 一.Web语言:认识HTML 1.Web服务器        ...

  9. 前端测试一共有哪几种?

    前言 哈喽,大家好,我是海怪. 最近有不少朋友找到我聊了聊测试相关的内容,发现他们对测试的分类有些迷茫.实际上测试一共就 3 种:E2E,集成,单测,其它的功能测试.UI 测试.界面测试只是它们中里面 ...

最新文章

  1. Discuz X2论坛数据库MyISAM转InnoDB的脚本
  2. python切片语法-详解Python 切片语法
  3. 为CDH 5.7集群添加Kerberos身份验证及Sentry权限控制
  4. layui表格弹窗修改_layUI 实现自定义弹窗
  5. 【机器视觉】 Halcon代码导出高级语言代码
  6. (码友推荐)2018-07-12 .NET及相关开发资讯速递
  7. 基于ArcEngine的插件式框架
  8. Linux平台上SQLite数据库教程(二)——C语言API介绍
  9. java mysql 版本查询_如何查看数据库版本
  10. TF使用例子-LSTM实现序列标注
  11. 资源放送丨《如何从零快速搭建一整套监控体系(日志采集+主机+数据库)》PPT视频...
  12. Sublime Text 3.1 编辑管理工程(项目)
  13. 打印机多张双面打印使用说明
  14. LabVIEW 使用入门(简明笔记)
  15. PHP连接MySQL数据库的三种方式
  16. 十、“ifnull()”的使用
  17. 4103 yxc 的日常
  18. 降低Java垃圾回收开销的5条建议
  19. Uva 12325 Zombie's Treasure Chest (贪心,分类讨论)
  20. 获取固定到任务栏的快捷方式的图标

热门文章

  1. RIS镜像中添加网卡和RAID卡驱动方法及实践经验总结
  2. oracle PL/SQL
  3. Andriod监听支付宝收款实现个人支付宝支付接口!附安卓App
  4. 【洛谷 P4934】 礼物 (位运算+DP)
  5. 自建web3 provider服务
  6. phpstorm + xdebug 远程断点调试
  7. mysql 数据库导入导出方法总结
  8. 《C语言课程设计》一3.1 文件复制
  9. 合并两个有序数组为一个新的有序数组
  10. 烦人的Facebook分享授权