t66y.buzz index.php,6.FizzBuzz
本系列文章为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相关推荐
- buzz fizz 翻译_The Fizz-Buzz
为何牛津阅读树如此火? 1.完美分级 全套分两大系统:First Stories 和Phonics,纯故事和故事加自然拼读. 这两个部分互相辅助,相互交叉.而每个部分又分别都有清晰的分级,层层递进,让 ...
- 【跟Leon一起刷LeetCode】412. Fizz Buzz
Fizz Buzz Description: Write a program that outputs the string representation of numbers from 1 to n ...
- leetcode lintcode python
目录 1.Two Sum(Hash Table) Given an array of integers,return indices of the two numbers such that they ...
- 【代码】LeetCode刷题Python版
python版LeetCode 算法部分 811. 子域名访问计数 class Solution:def subdomainVisits(self, cpdomains):""&q ...
- elasticsearch 嵌入式_Elasticsearch 开箱指南
内容概要 ES 基础介绍,重点是其中的核心概念. 基础 API 实践操作. 1. 基础介绍 Elasticsearch (ES) 是一个数据库,提供了分布式的.准实时搜索和分析. 基于 Apache ...
- python coding_Python终极coding
作为一名程序员,除了需要具备解决问题的思路以外,代码的质量和简洁性也很关键.因为从一个人的代码可以直接看出你的基本功.对于Python而言,这就意味着你需要对Python的内置功能和库有很深入的了解. ...
- Elasticsearch 开箱指南
内容概要 ES 基础介绍,重点是其中的核心概念. 基础 API 实践操作. 1. 基础介绍 Elasticsearch (ES) 是一个数据库,提供了分布式的.准实时搜索和分析. 基于 Apache ...
- Head First HTML and CSS
<Head First HTML and CSS>是一本html和css入门级的书,知识点很全,风趣幽默.下面是我的读书笔记. 一.Web语言:认识HTML 1.Web服务器 ...
- 前端测试一共有哪几种?
前言 哈喽,大家好,我是海怪. 最近有不少朋友找到我聊了聊测试相关的内容,发现他们对测试的分类有些迷茫.实际上测试一共就 3 种:E2E,集成,单测,其它的功能测试.UI 测试.界面测试只是它们中里面 ...
最新文章
- Discuz X2论坛数据库MyISAM转InnoDB的脚本
- python切片语法-详解Python 切片语法
- 为CDH 5.7集群添加Kerberos身份验证及Sentry权限控制
- layui表格弹窗修改_layUI 实现自定义弹窗
- 【机器视觉】 Halcon代码导出高级语言代码
- (码友推荐)2018-07-12 .NET及相关开发资讯速递
- 基于ArcEngine的插件式框架
- Linux平台上SQLite数据库教程(二)——C语言API介绍
- java mysql 版本查询_如何查看数据库版本
- TF使用例子-LSTM实现序列标注
- 资源放送丨《如何从零快速搭建一整套监控体系(日志采集+主机+数据库)》PPT视频...
- Sublime Text 3.1 编辑管理工程(项目)
- 打印机多张双面打印使用说明
- LabVIEW 使用入门(简明笔记)
- PHP连接MySQL数据库的三种方式
- 十、“ifnull()”的使用
- 4103 yxc 的日常
- 降低Java垃圾回收开销的5条建议
- Uva 12325 Zombie's Treasure Chest (贪心,分类讨论)
- 获取固定到任务栏的快捷方式的图标