繁体   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