【问题标题】:Python print statement for Histogram直方图的 Python 打印语句
【发布时间】:2015-01-21 01:33:43
【问题描述】:

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

/////////////////////////////////////// ///////////////////////////////////////// ///////////////////////////////////////p>

设计并实现一个应用程序,该应用程序创建 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 **********

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

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

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

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

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

帮助?

【问题讨论】:

    标签: python python-3.x histogram


    【解决方案1】:

    你快接近了,试试这个方法:

    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】:

      我认为你应该在

      中使用/而不是%
      frequency[face%10] + 1
      

      那么面值1~10就可以了

      frequency[0] += 1

      所以,频率数组的第一项表示1-10

      【讨论】:

        【解决方案3】:

        看起来您已经很接近了,您只需要进行一些更改...:

        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 中的格式——尽可能接近您的代码。

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

        【讨论】:

          【解决方案4】:

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

          【讨论】:

          • 不,我要1-10、11-20、21-30等。
          猜你喜欢
          • 2011-06-15
          • 2011-12-20
          • 1970-01-01
          • 2017-07-17
          • 2014-03-26
          • 2013-09-26
          • 1970-01-01
          • 2018-04-01
          • 1970-01-01
          相关资源
          最近更新 更多