簡體   English   中英

如果/ else替代

[英]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庫專門給powlog

你可以定義這樣的范圍:

>>> ranges = ['B', 'KB', 'MB', 'GB', 'TB']

然后

  1. n log和截斷小數。
  2. 使用math.pow和#1中的值計算大小
  3. 打印大小並使用#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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM