故事如下。用户输入一个数字。 Python 将字符串转换为 int,并使用算法生成二进制数。例如:
firstdecimal=input("Please enter your first denary number: ")
> 45
StrToInt = int(firstdecimal)
InputInt = ToBin(StrToInt) # a working binary conversion function
print(InputInt)
> [1, 0, 1, 1, 0, 1]
我需要的是函数 Addzero(x)
能够获取二进制数列表 (InputInt
),并添加 0
让我们开始吧。如果列表中已经有 8
元素,则不需要添加 0
。
def Addzero(value):
reverse = value[::-1]
if len(value) != 8:
value.extend([0])
if len(value) == 8:
reverse = value[::-1]
elif len(value) == 8:
return
我找不到让我将元素添加到开头的代码,所以我只是实现了一个反向功能来绕过它。
当我打印这个函数的内容时,我得到...
> None
这显然不是预期的结果。我需要输出。 (由 0
、1
组成的完整 8
元素列表)
像这样:
> [0, 0, 1, 0, 1, 1, 0, 1]
最佳答案
它返回 None
的原因仅仅是因为您的 return
语句缺少表达式:
elif len(value) == 8:
return
因此 return
简单的意思是:“我们完成了,停止执行这个函数,什么都不应该返回”。
此外,并非所有代码路径都会执行 return 语句。最后,您的 AddZero
似乎只添加了一个单个 零,这可能是低效的。
更好的解决方案可能是:
def Addzero(value):
return [0] * max(0,8-len(value)) + value
此处的表达式 [0]*n
表示您在列表中重复 0
n 次。所以 [0]*4
将导致 [0,0,0,0]
。现在我们需要添加的次数是 max(0,8-len(value))
。 max(0,...)
实际上甚至不是必需的,因此您可以将其重写为:
def Addzero(value):
return [0] * (8-len(value)) + value
这意味着我们必须缩短生成八项列表的元素数被构造为零列表。我们用 +
添加(追加)原始列表。
如@Later42 在 his answer 中所示,您可以通过先执行 len
检查来提高效率,如果它等于 8,则返回列表本身:
def Addzero(value):
if(len(value) > 8) :
return value
else :
return [0] * (8-len(value)) + value
演示 使用 Python 的交互式 shell:
$ python
Python 2.7.9 (default, Apr 2 2015, 15:33:21)
[GCC 4.9.2] on linux2
Type "help", "copyright", "credits" or "license" for more information.
>>> def Addzero(value):
... return [0] * (8-len(value)) + value
...
>>> Addzero([1, 0, 1, 1, 0, 1])
[0, 0, 1, 0, 1, 1, 0, 1]
关于python - 将零添加到列表中,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34244943/