直方图的Python打印语句

时间:2015-01-21 01:33:44

标签: python python-3.x histogram

好的,对于中期审查,这是我需要解决的一个问题:

/////////////////////////////////////////////// ////////////////////////////////////////////////// //////////////////////////////////////////////

设计并实现一个应用程序,该应用程序创建100个随机正整数值,范围为1到100,然后创建一个图表,显示值出现的频率。该图表应如下所示。它显示有多少值落在1到10,11到12之间,依此类推。为每个输入的值打印一个星号。

注意: 一个。您必须使用列表 湾不要使用if语句

以下示例:

1  - 10   | ****
11 - 20   | **
21 - 30   | ****************
31 - 40   | 
41 - 50   | ***
51 - 60   | ********
61 - 70   | ****************
71 - 80   | *****
81 - 90   | *
91 - 100  | ***

/////////////////////////////////////////////// ////////////////////////////////////////////////// ///////////////////

无论如何,到目前为止这是我的代码:

import random
frequency = [0,0,0,0,0,0,0,0,0,0]
for roll in range( 1,101 ):
    face = random.randrange( 1, 100  )
    frequency[face%10] += 1
    print(frequency)

for i in range( len( frequency ) ):
    print("%7d%5d %-s" % ((i+1,frequency[i], "*" * frequency[i])))

/////////////////////////////////////////////// /////////////////////////////////

当我打印时,这就是我得到的:

[8, 12, 8, 12, 12, 9, 9, 11, 9, 10]
  1    8 ********
  2   12 ************
  3    8 ********
  4   12 ************
  5   12 ************
  6    9 *********
  7    9 *********
  8   11 ***********
  9    9 *********
 10   10 **********

/////////////////////////////////////////////// ///////////////////////////////////////////////// < / p>

我的程序运行正常,但我的问题代码是这部分:

print("%7d%5d %-s" % ((i+1,frequency[i], "*" * frequency[i])))

/////////////////////////////////////////////// ////////////////////////////////////////////////// ///////////////////

我的问题是我不知道如何做原始示例中的1 - 10,11-20等部分。我所知道的就是让它向上计数(1,2,3,4,5等)

帮助?

4 个答案:

答案 0 :(得分:0)

所以你拥有i in range(something),然后你拥有print i+1而得到1,2,3,...,但你想让1-10,11-20,21-30,...正确吗?那么print i*10+1,"-",(i+1)*10应该给你你想要的东西。

答案 1 :(得分:0)

你差点接近,试试这个:

import random
frequency = [0,0,0,0,0,0,0,0,0,0]
for roll in range( 1,101 ):
    face = random.randrange( 1, 100  )
    frequency[face%10] += 1

print(frequency)

for i in range(len(frequency)):
   print("%7d-%2d %5d %-s" % ((i*10+1,(i+1)*10,frequency[i], "*" * frequency[i])))

在最后一行再添加一个数字。这只是一个小数学技巧。

答案 2 :(得分:0)

我认为您应该使用/而不是

中的%
frequency[face%10] + 1

然后面值1~10将

frequency[0] += 1

因此,频率数组的第一项意味着1-10

答案 3 :(得分:0)

看起来你很近,你只需要做一些改变......:

import random
frequency = [0,0,0,0,0,0,0,0,0,0]
for roll in range( 1,101 ):
    face = random.randrange( 1, 100  )
    frequency[face // 10] += 1
print(frequency)

for i in range( len( frequency ) ):
    print("%2d - %3d %5d %-s" %
         (((10*i+1, 10*i+10, frequency[i], "*" * frequency[i]))))

我正在使用face // 10(截断除法),你使用的face % 10(模数)毫无意义,并稍微改变了最终print中的格式 - 保持尽可能接近尽可能使用您的代码。

我认为有更好的方法但是这个方法足够好,而且我们都知道(或者应该知道:-),“足够好就足够了”! - )