好吧,我可能已經完全因爲我不能挺字呢屠殺這個問題的措辭,但這裏是我想要做的事:的Python:添加字符的字符串取決於一個的倍量的一個int
我有一個顯示在字符串中的字符顯示的CPU百分比。如果CPU是52%,我希望字符串是CPU:[#####] 64%CPU:[######]但77%CPU:[#######/]等
我可以關閉的唯一方法是有20個if語句,每個語句都有自己的顯示依賴於int百分比值的字符串版本。我覺得這會是一種可怕的做法,並想知道是否有更好的方法可以做到這一點?
好吧,我可能已經完全因爲我不能挺字呢屠殺這個問題的措辭,但這裏是我想要做的事:的Python:添加字符的字符串取決於一個的倍量的一個int
我有一個顯示在字符串中的字符顯示的CPU百分比。如果CPU是52%,我希望字符串是CPU:[#####] 64%CPU:[######]但77%CPU:[#######/]等
我可以關閉的唯一方法是有20個if語句,每個語句都有自己的顯示依賴於int百分比值的字符串版本。我覺得這會是一種可怕的做法,並想知道是否有更好的方法可以做到這一點?
假設你想哈希的數量是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.0
和10.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%不打印尾隨斜線,然後變成嚴格的不平等。
您可以重複使用*
(例如, '#'*5
給出'#####'
print "CPU:[%s]"%('#'*(percentage/10))
謝謝!這幾乎是完美的。我也試圖讓'/'等於五,以提高準確度。我如何使它能夠確定最後一個是否<= 5%,以便在77結束時得到/? – 2014-09-06 15:27:23
@RichieaaronMorris:查看編輯。 – alexwlchan 2014-09-06 15:32:06
只需要注意:'//可用於2.x和3.x的整數除法 – 2014-09-06 15:36:47