数组和while循环-小练习2

分解问题

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

输入是:

  • 一个整数列表,表示所有数字在随机生成列表中的出现次数分布情况

输出是:

  • 一个结构清晰的表格,表示数字及其对应的次数计数,例如

      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 的值。

概述下用笔和纸手动解答的步骤:

  1. 输出标题“number | occurrence”
  2. 循环访问随机生成列表中的每个元素
  3. 输出所需空格数量,以便获得正确的对齐格式
  4. 获取当前索引和列表中的相关值
  5. 按以下格式输出索引和值:”index | value"
  6. 到达循环的结尾了吗?
  7. 如果没有,再次执行步骤 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
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值