我是编程新手,但我正在完成任务。 我已经编写了函数,以便用户输入的字节数被翻译成一个人类可读的字符串。格式。基本上返回适当的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"
答案 0 :(得分:1)
因为这是一个家庭作业,我不会发布完整的代码,只是说它可以在几行中发挥壮举。
专门查看math
库pow
和log
您可以定义这样的范围:
>>> ranges = ['B', 'KB', 'MB', 'GB', 'TB']
然后
log
n
并截断小数。 math.pow
和#1 ranges
数组以获取值“b,kb,mb等”。 这样您就不会使用任何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)
但是,当然,可能意味着它必须以另一种方式解决,例如使用对数。