以二进制形式写入和存储来自输入的数据,如数组
Write and store data from input as binary, like an array
我需要从用户那里获取输入(范围从 1-12)并将数据存储为二进制。 (不能使用数组)
例如:如果用户输入 3,则 return 000000000100。(右数第 3 位)
我在想这可以通过对数算法实现,但我真的不知道从哪里开始。我该怎么做?感谢您的帮助。
如果您想在多个输入中多次将任何索引更新为 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
如果我没看错这个问题,你将被输入 1-12 的数字,并且根据输入的数字,你需要 return 一个二进制字符串,其中给定的任何位置的位都相等到一个(没有 lists/arrays)。为此,您可以将值读入一个集合,然后构造一个字符串,其中输入的值为 1,其他所有值为 0。像这样:
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())
我需要从用户那里获取输入(范围从 1-12)并将数据存储为二进制。 (不能使用数组) 例如:如果用户输入 3,则 return 000000000100。(右数第 3 位)
我在想这可以通过对数算法实现,但我真的不知道从哪里开始。我该怎么做?感谢您的帮助。
如果您想在多个输入中多次将任何索引更新为 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
如果我没看错这个问题,你将被输入 1-12 的数字,并且根据输入的数字,你需要 return 一个二进制字符串,其中给定的任何位置的位都相等到一个(没有 lists/arrays)。为此,您可以将值读入一个集合,然后构造一个字符串,其中输入的值为 1,其他所有值为 0。像这样:
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())