2014-09-06 54 views
-2

好吧,我可能已經完全因爲我不能挺字呢屠殺這個問題的措辭,但這裏是我想要做的事:的Python:添加字符的字符串取決於一個的倍量的一個int

我有一個顯示在字符串中的字符顯示的CPU百分比。如果CPU是52%,我希望字符串是CPU:[#####] 64%CPU:[######]但77%CPU:[#######/]等

我可以關閉的唯一方法是有20個if語句,每個語句都有自己的顯示依賴於int百分比值的字符串版本。我覺得這會是一種可怕的做法,並想知道是否有更好的方法可以做到這一點?

回答

0

假設你想哈希的數量是CPU百分比的「十位」,這個簡單的功能,將做到這一點:

def cpu_usage_str(cpu_percentage): 
    return 'CPU:[%s]' % ('#' * cpu_percentage/10) 

print cpu_usage_str(52) 
print cpu_usage_str(64) 
print cpu_usage_str(72) 

(這是假設的Python 2,與地板師你。需要稍微調整Python 3)。我們使用*運算符重複'#'字符串適當的次數。

輸出:

CPU:[#####] 
CPU:[######] 
CPU:[#######] 

另外,如果你想四捨五入到最接近的十(所以36%變爲CPU:[####],說),那麼這將這樣的伎倆:

def alt_cpu_usage_str(cpu_percentage): 
    return 'CPU:[%s]' % ('#' * int(round(cpu_percentage/10.0))) 

首先我們除以10.0得到0.010.0之間的浮點數。然後round帶我們到最近的整數。這是由一個浮點數表示的,所以我們將它轉​​換爲一個int,然後像以前一樣重複該字符串。


如果我們希望有一個反斜槓表明我們是否是下/ 5以上,那麼我們就需要考慮cpu_percentage % 10(該%是模運算符)。這是一個這樣的功能:

def with_slashes_cpu_usage_str(cpu_percentage): 
    hashes_str = '#' * int(round(cpu_percentage/10)) 
    slash_str = '/' * (cpu_percentage % 10 >= 5) 
    return 'CPU:[{hash}{slash}]'.format(hash=hashes_str, slash=slash_str) 

我們分別構造散列和斜槓字符串。布爾cpu_percentage % 10 >= 5被強制爲0或1,這給了我們斜線,或不是,取決於我們是否在上半部分10。

如果你想[] 5%不打印尾隨斜線,然後變成嚴格的不平等。

+0

謝謝!這幾乎是完美的。我也試圖讓'/'等於五,以提高準確度。我如何使它能夠確定最後一個是否<= 5%,以便在77結束時得到/? – 2014-09-06 15:27:23

+0

@RichieaaronMorris:查看編輯。 – alexwlchan 2014-09-06 15:32:06

+1

只需要注意:'//可用於2.x和3.x的整數除法 – 2014-09-06 15:36:47

0

您可以重複使用*(例如, '#'*5給出'#####'

print "CPU:[%s]"%('#'*(percentage/10)) 
相關問題