[英]If/else alternative
我是編程新手,但我正在完成一項任務。 我編寫了函數,以便用戶輸入的字節數轉換為“人類可讀”格式。 基本上返回適當的B,KB,MB,GB,TB。
但是,賦值說我們應該嘗試編寫沒有循環或if語句的代碼,但我們可以使用數組。
我想知道我怎么做這個......
這是我目前的代碼:
def memory_size(n):
if n < 1024:
print n,"B"
if 1024 <= n < 1048576:
nKB = n / 1024
print nKB,"KB"
if 1048576 <= n < 1073741824:
nMB = (n / 1024) / 1024
print nMB,"MB"
if 1073741824 <= n < 1.099511628*(10**12):
nGB = ((n / 1024) / 1024) / 1024
print nGB,"GB"
if 1.099511628*(10**12) <= n < 1.125899907*(10**15):
nTB =(((n / 1024) / 1024) / 1024) / 1024
print nTB,"TB"
因為這是一個家庭作業,我不打算發布整個代碼,只是說它可以在幾行中壯舉。
看看math
庫專門給pow
和log
你可以定義這樣的范圍:
>>> ranges = ['B', 'KB', 'MB', 'GB', 'TB']
然后
n
log
和截斷小數。 math.pow
和#1中的值計算大小 ranges
數組以獲取值“b,kb,mb等”。 這樣您就不會使用任何if/else
語句或for/while
循環。
沒有給你代碼,因為這是作業,基本的方法是你存儲范圍數據(堆可能是一個很好的解決方案),然后搜索它以找到給定范圍的條目,並讓該條目存儲您需要的其他數據。 然后,你只有一個版本的代碼,如下所示:
nKB = n / 1024
print nKB,"KB"
使用檢索到的數據代替硬編碼常量。
更新:
正如DavidRobinson指出的那樣,你不能使用循環,任何隱式或顯式搜索方法都使用循環。 因此,另一種方法是獲取輸入數據,並將其轉換為可用於對所選數據結構進行單次,恆定時間查找的形式。 一個對數數組是這里的方法,並再次映射到替換上述代碼段中的常量的數據。
幾個想法; 既不滿足要求,也許它們會幫助你思考
方法1:創建從下限/上限到除數和顯示字符串的字典。 循環遍歷字典以查找適當的條目,然后使用值。
方法2:將輸入除以1024,直到小於1024.使用操作數查找顯示字符串。
純娛樂。 您可以使用1024上的除法結果作為字典鍵。 字典可以存儲結果數據。 這里有一些python 3代碼,它解決了沒有循環或if語句的任務:
def memory_size(n):
is_b = int(n >= 1)
is_kb = int(n / 1024 >= 1)
is_mb = int(n / 1024**2 >= 1)
is_gb = int(n / 1024**3 >= 1)
is_tb = int(n / 1024**4 >= 1)
array = {}
array[1, 0, 0, 0, 0] = (0, 'B')
array[1, 1, 0, 0, 0] = (1, 'KB')
array[1, 1, 1, 0, 0] = (2, 'MB')
array[1, 1, 1, 1, 0] = (3, 'GB')
array[1, 1, 1, 1, 1] = (4, 'TB')
power, name = array[is_b, is_kb, is_mb, is_gb, is_tb]
print(n / 1024**power, name)
memory_size(100)
memory_size(1024)
memory_size(1048576)
memory_size(1073741824)
memory_size(1099511627776)
但是,當然,可能意味着它必須以另一種方式解決,例如使用對數。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.