# 3. 数字和计算




### 背景

几乎所有的编程语言都支持数学计算。不要认为不是数学高手就不能学习编程，很多时候我们在代码里只会用到非常简单的数学运算，常见的有

* +: 加法
* -: 减法
* /: 除法
* \*: 乘法
* %: 整除取余
* <: 小于
* >: 大于
* >=: 大于等于
* <=: 小于等于

考虑这样的场景，我们的测试用例一个分布在3个模块(A/B/C)，A模块有30个用例，成功运行27个, B模块有40个用例，全部成功运行，C模块有30个用例全部运行成功，假设每个用例执行一次平均需要5分钟，打印出一些测试报告的明细。

### 代码实现

新建名为```report_with_math.py```，内容如下

```python
# 打印出本次测试的测试结果
# A: 27/30 B: 40/40 C: 30/30

print('本次测试覆盖了3个模块')
print('测试用例总数为: ', 30 + 40 + 30)
print('执行的测试用例总数为: ', 30 + 40 + 30)
print('用例最多的模块是B模块，B模块比A模块多出的用例数为', 40 - 30)
print('A模块执行成功27个用例，执行失败的用例数为', 30 - 27)
print('B模块的用例全部执行通过， 通过率为百分之', (40 / 40) * 100)
print('C模块的用例全部执行通过， 通过率为百分之', (30 / 30) * 100)
print('B模块的用例比C模块多吗?', 40 > 30)
print('A模块的用例比C模块多吗?', 30 > 30)
print('B模块的用例比C模块少吗?', 40 < 30)

# 结束打印
print('回归不通过')
```

### 运行

在命令行中使用下面的命令去执行代码

```
python report_with_math.py
```

### 你应该可以看到

如果没有出错的话，你应该可以看到命令行窗口显示如下的内容

```
本次测试覆盖了3个模块
测试用例总数为:  100
执行的测试用例总数为:  100
用例最多的模块是B模块，B模块比A模块多出的用例数为 10
A模块执行成功27个用例，执行失败的用例数为 3
B模块的用例全部执行通过， 通过率为百分之 100.0
C模块的用例全部执行通过， 通过率为百分之 100.0
B模块的用例比C模块多吗? True
A模块的用例比C模块多吗? False
B模块的用例比C模块少吗? False
回归不通过
```


### 动手时间

* 在每一行上面用#加上注释，解释一下这行代码的作用
* 找一些自己需要计算的东西，比如早餐吃3个包子才能吃饱，每个包子3块钱，那么早餐要花多少钱才能吃饱。建立.py文件去计算并执行
* 算一下模块A的通过率，找资料了解一下python的浮点数(float)类型，模块A的通过率的预期结果应该是0.9

### 常见问题

* **%号是怎么工作的**: 取余数，比如 15 % 4 的结果是3, 16 % 4的结果是0；
* **运算符号的优先级是怎么样的**: 跟我们小时候学习的四则混合运算一样，乘除优先于加减，有括号的话括号优先，把握不准的情况下，把需要优先计算的部分用括号括起来;




原始封面

![课程图片](https://images.unsplash.com/photo-1501889967782-18b135710152?w=300)


