以下是我的代码。在“观察到的数字”循环的某处,有一个索引错误,我似乎无法找到或修复。我认为这与PINS列表有关,但我不确定,因为我的编辑都没有产生任何影响。观察失败的测试用例= '11'。单个案件全部通过。不幸的是,由于我正在使用代码转换,因此没有给出错误的行,只有以下内容:
回溯:
in
在get_pins中
IndexError:字符串索引超出范围
def get_pins(observed):
# Let's see what we're working with
print("observed")
print(observed)
print(" ")
# Dictionary of possible numbers for a half-assed observation of a key press.
possible = {'0':'08','1':'124','2':'1235','3':'236',
'4':'1457','5':'24568','6':'3569',
'7':'478','8':'05789','9':'689'}
# Single digit pwd case
PINS=[]
if len(observed) == 1:
for digit in possible[observed]:
PINS.append(digit)
return PINS
# Find number of possible PINs
num_possibles = 1
# Step through observed digits
for digit in observed:
num_possibles*=len(possible[digit])
# Populate PINS to allow string manipulation
PINS = " "*num_possibles
print(PINS[num_possibles])
num_change = num_possibles
change = []
count = 0
# Step through observed, determine change of digit,
for digit in observed:
# Last digit in observed means it iterates every time
if digit != observed[len(observed)-1]:
# Develop array for checking position
num_change = num_change/len(possible[digit])
for i in range(1,len(possible[digit])):
change.append(i*num_change)
print(change)
# Populate PINS with possible digit, full pin is created after final iteration of digit/observed loop
for pin in range(0,num_possibles-1):
PINS[pin] = PINS[pin] + possible[digit][count]
if (pin+1) in change:
count+=1
change=[]
count =0
else:
for pin in range(0,num_possibles-1):
PINS[pin] = PINS[pin] + possible[digit][count]
count+=1
if count == len(possible[digit]):
count = 0
return PINS
答案 0 :(得分:0)
问题在于:
PINS = " "*num_possibles
print(PINS[num_possibles])
第一行创建一个长度为num_possibles
的空格字符串。这意味着有效索引为0, 1, ..., num_possibles - 1
。但是,在下一行中,您尝试将字符串索引为不存在的索引num_possibles
。
我只想放弃print
。有什么意义呢?你知道PINS
是一个包含所有空格的字符串,所以为什么要这么麻烦?
字符串是不可变的,因为PINS
是一个字符串,即行
PINS[pin] = PINS[pin] + possible[digit][count]
会触发错误:
TypeError: 'str' object does not support item assignment
您应该做的是将PINS
初始化为
PINS = [' ']*num_possibles
或者,甚至可能更好
PINS = ['']*num_possibles
在哪种情况下
PINS[pin] = PINS[pin] + possible[digit][count]
是合法的(虽然可以通过使用+=
来缩短) - 虽然我不确定这是否是你真正想要做的事情,因为你将{存储的值的字符串连接在一起{ {1}}并且不添加由这些字符串表示的数字。
在功能结束时,将possible
替换为return PINS
''。join(PINS)`
这将修复你的一些错误,但由于我既不知道预期输入也不知道输出我不能再说了。