列表和while循环

分解问题
首先需要知道输入是什么,并且希望获得什么样的输出(结果)。

输入是:

包含 20 个随机生成的整数的列表
输出是:

一个整数列表,每个数字(称其为“n”)表示整数出现在随机生成的整数列表中 n 次。

例如,如果数字 4 出现在随机生成的列表里 5 次,那么我们需要创建另一个列表,该列表索引 4 的位置是数字 5。如果数字 6 出现在随机生成的列表里 2 次,那么输出列表的索引 6 处将为数字 2。到目前为止的输出列表为:[0,0,0,0,5,0,2,0,0,0,0]

要执行的操作
概述下用笔和纸手动解答的步骤:

循环访问随机生成列表中的每个元素
获取列表中的当前数字
现在需要将此数字的计数器加一
通过查看输出列表获取此数字的当前计数,然后将该计数器加一
到达循环结束位置了吗?
如果没有,重新执行步骤 1-5(当我们依然在循环访问列表的时候)
转换为代码
看看这些步骤,然后转换为计算机代码。

1. 循环访问列表中的每个元素
似乎首先需要设置循环结构,循环访问列表中的每个元素。为此,我们应该设置一些变量,以便存储列表的当前索引并创建初始 count_list:

count_list = [0]*11
index = 0
现在可以设置循环结构了:

while index < len(random_list):
  # Put other code here
  index = index + 1
请注意,我们已经将 index = index + 1 添加到循环中了。此代码可以保证计算机不会进入无限循环中。对于多数循环而言,我们始终需要明确定义结束点。在此示例中,结束点是数字 index 大于列表长度时

2. 获取列表中的当前数字
通过访问列表的当前索引获取该数字:

number = random_list[index]
3-4. 现在需要将此数字的计数器加一。
因为 count_list 的索引是查询依据,我们可以按照以下方法增加当前数字的计数:

count_list[number] = count_list[number] + 1
5: 到达循环的结尾了吗?如果没有,再次执行 while 循环部分。
我们的循环结构已经考虑到这一条件,因为在循环的顶部,我们始终检查索引编号是否依然小于随机列表的长度:index < len(random_list)

我们采用的逻辑:如果索引编号小于列表的长度,则可以有信心地判断,每当我们使用 index 访问列表时,始终不会产生错误,并且将能够使用数字 index 访问列表中的元素。

答案代码
count_list = [0]*11
count = 0

while index < len(random_list):
  number = random_list[index]
  count_list[number] = count_list[number] + 1
  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
count = 0

while index < len(random_list):
  number = random_list[index]
  count_list[number] = count_list[number] + 1
  index = index + 1
方法二: 简单for
import random

random_list = []
list_len = 10
while len(random_list)<list_len:
    random_list.append(random.randint(0,10))
print random_list

count_list = [0]*11
for ele in random_list:
    count_list[ele]+=1
print count_list


猜你喜欢

转载自blog.csdn.net/u012338816/article/details/78914545