如果/ else替代

时间:2014-09-11 16:50:51

标签: python function if-statement

我是编程新手,但我正在完成任务。 我已经编写了函数,以便用户输入的字节数被翻译成一个人类可读的字符串。格式。基本上返回适当的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"

4 个答案:

答案 0 :(得分:1)

因为这是一个家庭作业,我不会发布完整的代码,只是说它可以在几行中发挥壮举。

专门查看mathpowlog

您可以定义这样的范围:

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

然后

  1. log n并截断小数。
  2. 使用math.pow和#1
  3. 中的值计算大小
  4. 打印大小并使用#1中的数字查找ranges数组以获取值“b,kb,mb等”。
  5. 这样您就不会使用任何if/else语句或for/while循环。

答案 1 :(得分:0)

没有给你代码,因为这是家庭作业,基本方法是你存储范围数据(堆可能是一个很好的解决方案),然后搜索它以找到给定范围的条目,并具有条目存储您需要的其他数据。然后你只有一个版本的代码:

nKB = n / 1024
print nKB,"KB"

使用检索到的数据代替硬编码常量。

更新

正如DavidRobinson指出的那样,你不能使用循环,任何隐式或显式搜索方法都使用循环。因此,另一种方法是获取输入数据,并将其转换为可用于对所选数据结构进行单次,恒定时间查找的形式。一个对数数组是这里的方法,并再次映射到替换上述代码段中的常量的数据。

答案 2 :(得分:0)

夫妻的想法;既不满足要求,也许他们会帮助你思考

方法1:从下限/上限到除数和显示字符串创建字典。循环遍历字典以查找相应的条目,然后使用值。

方法2:将输入除以1024,直到小于1024.使用操作数查找显示字符串。

答案 3 :(得分:0)

只是为了好玩。您可以使用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)

但是,当然,可能意味着它必须以另一种方式解决,例如使用对数。