分解问题
首先需要知道输入是什么,并且希望获得什么样的输出(结果)。
输入是:
- 一个整数列表,表示所有数字在随机生成列表中的出现次数分布情况
输出是:
-
一个结构清晰的表格,表示数字及其对应的次数计数,例如
number | occurrence(数字 | 次数) 0 | 1 1 | 2 2 | 3 3 | 2 4 | 2 5 | 1 6 | 1 7 | 2 8 | 3 9 | 1 10 | 2
要执行的操作
首先需要了解我们依然需要循环访问 count_list 中的所有元素,并且按照特定的格式输出索引和 count_list 的值。
概述下用笔和纸手动解答的步骤:
- 输出标题“number | occurrence”
- 循环访问随机生成列表中的每个元素
- 输出所需空格数量,以便获得正确的对齐格式
- 获取当前索引和列表中的相关值
- 按以下格式输出索引和值:”index | value"
- 到达循环的结尾了吗?
- 如果没有,再次执行步骤 1 到 5(当我们依然在循环访问列表的时候)
转换为代码
看看这些步骤,然后转换为计算机代码。
1. 输出标题“number | occurrence”
比较简单:
print "number | occurrence"
2. 循环访问随机生成列表中的每个元素。我们设置了循环结构。
index = 0
while index < len(random_list):
# Put other code here
index = index + 1
请注意,我们已经将 index = index + 1
添加到循环中了。此代码可以保证计算机不会进入无限循环中。对于多数循环而言,我们始终需要明确定义结束点。在此示例中,结束点是数字 index
大于列表长度时。
3. 输出所需空格数量,以便获得正确的对齐格式
为了动态地执行这一步骤,我们需要明白我们可以计算要输出的所需空格数量,然后再输出索引。如果想输出字符串“0”,则需要输出 5 个空格,然后输出“0”,以便与标题的“number”中的字母“r”对齐。
如果想输出字符串“10”,该怎么办?我们需要输出 4 个空格,因为字符“10”占了两个空格。无论数字是多少,空格数和字符数之和应该为 6,即字符串“number”的长度。
在每个循环里,我们都根据每个索引的字符长度动态地计算需要输出的空格数:
num_spaces = len("number") - len(str(index))
因为每次循环时 len("number") 都不变化,所以在循环外面计算并存储字符串“number”的长度:
num_len = len("number")
while index < len(count_list):
num_spaces = num_len - len(str(index))
4-5. 获取当前索引和列表中的相关值,并按照所需的格式输出来。将整数转换为字符串,并使用“+”运算符连接字符串。
print " " * num_spaces + str(index) + " | " + str(count_list[index])
5. 到达循环的结尾了吗?如果没有,再次执行 while 循环部分。
我们的循环结构已经考虑到这一条件,因为在循环的顶部,我们始终检查索引编号是否依然小于随机列表的长度:index < len(random_list)
我们采用的是以下逻辑:如果索引编号小于列表的长度,则可以有信心地判断,每当我们使用 index
访问列表时,始终不会产生错误,并且将能够使用数字 index
访问列表中的元素。
答案代码
print "number | occurrence"
index = 0
num_len = len("number")
while index < len(count_list):
num_spaces = num_len - len(str(index))
print " " * num_spaces + str(index) + " | " + str(count_list[index])
index = index + 1
完整的答案代码
import random
random_list = []
list_length = 20
while len(random_list) < list_length:
random_list.append(random.randint(0,10))
count_list = [0] * 11
index = 0
while index < len(random_list):
number = random_list[index]
count_list[number] = count_list[number] + 1
index = index + 1
print "number | occurrence"
index = 0
num_len = len("number")
while index < len(count_list):
num_spaces = num_len - len(str(index))
print " " * num_spaces + str(index) + " | " + str(count_list[index])
index = index + 1