轨道
/
PHP
PHP
/
练习
/
幸运数字
幸运数字

幸运数字

学习练习

简介

类型转换

类型转换有时也叫强制类型转换。 类型转换是指为了执行某种运算,把两个不同类型的值转换成同一类型。

$baskets = 5 // int
$apples_per_basket = "3" // string
$baskets * $apples_per_basket
# => 15

这种转换可以隐式进行(见上面的例子),也可以用 C 风格的强制类型转换显式完成:

$apples_per_basket = "3" // string
$my_number = (int) $apples_per_basket // cast string to int
# => 3 // int

手动强制类型转换允许的类型有:bool、int、float、string、array、object。 最常见的情况是用强制类型转换把整数(int)变成浮点数(float),或者反过来。

说明

你的朋友 Kojo 是个数字迷。 他有一个用来玩数字的小网站。 Kojo 的编程水平不太好,所以他向你求助。

你要为 Kojo 网站上的新数字游戏构建两个辅助方法,再构建第三个方法来验证用户可以输入的某些内容。

1. 计算老虎机上数字的和

Kojo 网站上的其中一个游戏看起来像一台老虎机,上面有两组带数字的转轮。 每一组数字代表一个数。 为了实现游戏机制,Kojo 需要知道这两个数的和。

编写一个方法 sumUp,它接受两个数组作为形参。 每个数组由一个或多个 0 到 9 之间的数字组成。 这个方法应该把每个数组解释成一个数,并返回这两个数的和。

<?php
$lucky_numbers = new LuckyNumbers()

$lucky_numbers->sumUp([1, 2, 3], [0, 7]);
//=> 130

// [1, 2, 3] represents 123 and [0, 7] represents 7.
// 123 + 7 = 130

2. 判断一个数是否为回文数

网站上的另一个游戏是一个叫“Lucky Numbers”的小测验。 用户可以输入一个数,然后看到这个数是否属于某个秘密序列或模式。 “幸运数字”的序列或模式每个月都会变化,每个用户只有有限的尝试次数来猜出它。

本月的幸运数字应该是回文数。 回文数在把数字反转后仍然保持不变。

实现新的 isPalindrome 函数,它接受一个整数作为形参。 如果这个数是回文数,函数应该返回 true,否则返回 false。 输入的整数始终是正整数。

<?php
$lucky_numbers = new LuckyNumbers()

$lucky_numbers->isPalindrome(1441);
//=>  true

$lucky_numbers->isPalindrome(123);
//=> false

3. 为无效的用户输入生成错误信息

网站上有多个地方设有输入框,用户可以在其中输入数字并点击按钮来触发某些操作。 Kojo 想提升网站的用户体验。 他希望当用户点击按钮、但输入框里的值无效时,显示一条错误信息。

下面是关于输入框的值是如何提供的一些补充说明。

  • 如果用户在输入框中键入内容,与之关联的值始终是字符串,即使用户只键入了数字也是如此。
  • 如果用户键入了内容又把它删掉,这个变量将是一个空字符串。
  • 在用户开始键入之前,这个变量也是空字符串。

编写一个函数 validate,它接受用户输入作为形参。 如果用户没有提供任何输入,validate 应该返回 'Required field'。 如果输入不代表一个正的非零整数(依据 PHP 类型转换规则),则应返回 'Must be a whole number larger than 0'。 在其他所有情况下,你可以假定输入是有效的,此时返回值应该是一个空字符串。

<?php
$lucky_numbers = new LuckyNumbers()

$lucky_numbers->validate('123');
// => ''

$lucky_numbers->validate('');
// => 'Required field'

$lucky_numbers->validate('abc');
// => 'Must be a whole number larger than 0'
通过 GitHub 编辑 链接将在新窗口或新标签页中打开
PHP Exercism

准备好开始 幸运数字 了吗?

注册 Exercism,借助 11 个概念122 个练习 和真人导师指导,学习并掌握 PHP,全部免费。