2015-01-21 98 views
-1

好吧,對於中期回顧,這是我需要解決的一個問題:直方圖的Python打印語句

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

設計並實現一個應用程序,該應用程序創建100個範圍爲1到100的值的隨機正整數,然後創建一個圖表顯示如何經常出現這些值。圖表應該看起來像這裏顯示的那個。它顯示了在1到10,11到12等範圍內有多少值。爲每個輸入的值打印一個星號。

備註: a。您必須使用列表 b。不要使用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等)

幫助?

回答

0

所以你有i in range(something),然後你有print i+1,你得到1,2,3,...,但你想得到1-10,11-20,21-30,...對不對?那麼print i*10+1,"-",(i+1)*10應該給你你想要的。

+0

不,我要拿到1 -10,11-20,21-30等 – 2015-01-21 01:49:27

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]))) 

去年line.It的再添加一個數字只是小伎倆數學。

0

我想你應該在

frequency[face%10] + 1 

然後面值使用/% 1〜10將使

frequency[0] += 1

所以,頻率數組的第一個項目是指1-10

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格式 - 保持儘可能靠近你的代碼是可行的。

我認爲有更好的方法,但是這一次是不夠好,正如我們都知道(或應該知道:-),「足夠好就足夠了!」 - )