# 4. 变量和名称




### 背景

变量是编程语言中常见的概念。变量实际上很简单，我们可以把它想象成是一个盒子，这个盒子有名字，就是变量名，盒子里面可以放东西进去，就是变量的值。

程序员们一般使用变量让代码变得更加容易理解，因为他们的记忆力很糟糕，所以如果不取一些有意义的变量名的话，他们后来可能就看不懂自己写的代码了。

我们对上一节的内容稍微做一些修改，加入变量的实践。

### 代码实现

新建名为```report_with_var.py```，内容如下

```python
# 打印出本次测试的测试结果
# A: 27/30 B: 40/40 C: 30/30
module_count = 3

case_count_of_module_a = 30.0
success_case_count_of_module_a = 27

case_count_of_module_b = 40.0
success_case_count_of_module_b = 40

case_count_of_module_c = 30.0
success_case_count_of_module_c = 30

print('本次测试覆盖了',module_count ,'个模块')
print('测试用例总数为: ', case_count_of_module_a + case_count_of_module_b + case_count_of_module_c)
print('执行的测试用例总数为: ', case_count_of_module_a + case_count_of_module_b + case_count_of_module_c)
print('用例最多的模块是B模块，B模块比A模块多出的用例数为', case_count_of_module_b - case_count_of_module_a)
print('A模块执行成功', success_case_count_of_module_a, '个用例，执行失败的用例数为', case_count_of_module_a - success_case_count_of_module_a)
print('A模块用例通过率为百分之', success_case_count_of_module_a / case_count_of_module_a * 100)
print('B模块的用例全部执行通过， 通过率为百分之', (success_case_count_of_module_b / case_count_of_module_b) * 100)
print('C模块的用例全部执行通过， 通过率为百分之', (success_case_count_of_module_b / case_count_of_module_b) * 100)
print('B模块的用例比C模块多吗?', case_count_of_module_b > case_count_of_module_c)
print('A模块的用例比C模块多吗?', case_count_of_module_a > case_count_of_module_c)
print('B模块的用例比C模块少吗?', case_count_of_module_b < case_count_of_module_c)

# 结束打印
print('回归不通过')

```

### 运行

在命令行中使用下面的命令去执行代码

```
$python report_with_var.py

```

### 你应该可以看到

如果没有出错的话，你应该可以看到命令行窗口显示如下的内容

```
本次测试覆盖了 3 个模块
测试用例总数为:  100.0
执行的测试用例总数为:  100.0
用例最多的模块是B模块，B模块比A模块多出的用例数为 10.0
A模块执行成功 27 个用例，执行失败的用例数为 3.0
A模块用例通过率为百分之 90.0
B模块的用例全部执行通过， 通过率为百分之 100.0
C模块的用例全部执行通过， 通过率为百分之 100.0
B模块的用例比C模块多吗? True
A模块的用例比C模块多吗? False
B模块的用例比C模块少吗? False
回归不通过
```

### 动手时间

刚开始写代码的时候，我们经常会敲错，比如

```
本次测试覆盖了 3 个模块
Traceback (most recent call last):
  File "report_with_var.py", line 15, in <module>
    print('测试用例总数为: ', case_count_of_moudle_a + case_count_of_module_b + case_count_of_module_c)
NameError: name 'case_count_of_moudle_a' is not defined
```
这是因为变量```case_count_of_moudle_a```没有定义，我们定义的变量名是```case_count_of_module_a```，究其原因，是我们敲代码的时候手误,把module拼错了。

* ```case_count_of_module_a```的值我们定义的是30.0，想一想这是为什么？如果我们定义成30会出现什么情况？
* 注意30.0是浮点型数字，也就是带小数点的，在做除法时，浮点数除法的结果也是浮点数
* ```=```号的作用是赋值，就是把等号右边的值付给左边的变量，相当于是把等号右边的值塞到变量代表的箱子里去
* ```_```是下划线，可以分隔变量名中的各个单词

### 常见问题

* ```=```和```==```的区别是什么？前者是赋值，后者是判断符号两边的元素是否具有相同的值，这个后面会有涉及；

* 为什么你在等号两边都加上了空格？比如写成```a = 100```而不是```a=100```。前者更容易阅读一点，所以推荐前一种写法。




原始封面

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


