将输入中的数据以二进制形式写入和存储,例如数组
Posted
技术标签:
【中文标题】将输入中的数据以二进制形式写入和存储,例如数组【英文标题】:Write and store data from input as binary, like an array 【发布时间】:2021-11-06 06:13:38 【问题描述】:我需要从用户那里获取一个输入(范围从 1 到 12)并将数据存储为二进制。 (不能使用数组) 例如:如果用户输入 3,则返回 000000000100。(右起第三位)
我认为这可以通过日志算法实现,但我真的不知道从哪里开始。我该怎么做?任何帮助表示赞赏。
【问题讨论】:
...你想返回字符串"000000000100"
,还是二进制值100
,也就是数字4?
1 << (n-1)
将计算该值
@khelwood 我需要它是 12 个字节,因为这需要多个输入,所以 000000000100
您要返回什么类型的值?一个字符串?一个整数?一个数组?
我们的目标是让它成为一个可以像数组一样读取的 int。我的意思是用户可以输入多个数字,相应的字节将变为 1。例如。 1 = 000000000001;输入 2 和 1 将是 000000000011
【参考方案1】:
如果我正确地阅读了这个问题,您将被输入数字 1-12,并且根据输入的数字,您需要返回一个二进制字符串,其中给出的任何位置的位都等于 1(没有列表/数组)。为了实现这一点,您可以将值读入一个集合,然后构造一个字符串,其中输入的值为 1,其他所有值都为零。像这样:
def read_in():
positions = set()
while True:
print('Enter 1-12 or Q to stop:',end=' ')
entry = input()
if entry != 'Q':
positions.add(int(entry))
else:
break
ret = ''
for i in range(12,0,-1):
if i in positions:
ret += '1'
else:
ret += '0'
return ret
print(read_in())
【讨论】:
非常感谢!【参考方案2】:如果您想在多个输入中多次将任何索引更新为 1,您可能需要使用包含 12 个可以勾选的元素的 list
。然后使用该列表,您已经可以获得两个字符串值,例如"000000000100"
和 int 值,例如4
# Initialize list that we will tick
bin_digits = ["0"] * 12
# Let's assume that the input from user is from 1 to 12
for num in range(1, 13):
# Tick the target index
bin_digits[-num] = "1"
bin_str = "".join(bin_digits) # String value
bin_int = int(bin_str, 2) # Int value
print(bin_digits, bin_str, bin_int)
输出
['0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '1'] 000000000001 1
['0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '1', '1'] 000000000011 3
['0', '0', '0', '0', '0', '0', '0', '0', '0', '1', '1', '1'] 000000000111 7
['0', '0', '0', '0', '0', '0', '0', '0', '1', '1', '1', '1'] 000000001111 15
['0', '0', '0', '0', '0', '0', '0', '1', '1', '1', '1', '1'] 000000011111 31
['0', '0', '0', '0', '0', '0', '1', '1', '1', '1', '1', '1'] 000000111111 63
['0', '0', '0', '0', '0', '1', '1', '1', '1', '1', '1', '1'] 000001111111 127
['0', '0', '0', '0', '1', '1', '1', '1', '1', '1', '1', '1'] 000011111111 255
['0', '0', '0', '1', '1', '1', '1', '1', '1', '1', '1', '1'] 000111111111 511
['0', '0', '1', '1', '1', '1', '1', '1', '1', '1', '1', '1'] 001111111111 1023
['0', '1', '1', '1', '1', '1', '1', '1', '1', '1', '1', '1'] 011111111111 2047
['1', '1', '1', '1', '1', '1', '1', '1', '1', '1', '1', '1'] 111111111111 4095
【讨论】:
以上是关于将输入中的数据以二进制形式写入和存储,例如数组的主要内容,如果未能解决你的问题,请参考以下文章