因此,我有一个表示内存的列表 mem ,在此循环中,我正在搜索 dataSize 表示为“-”的空白空间在内存中。
逻辑如下:
首先搜索“-” (空插槽),然后将其标记为起始位置 writeStart ,然后查看该位置之后我还有多少空插槽,并将其计为 writeSize 。如果我找到了足够的插槽,否则将 Found 设置为True,否则循环中断并返回到原始循环,以 writeStart 的方式搜索另一个空插槽。然后我使用此循环后,writeStart 和 writeSize 作为要写入内存的参数。
此代码正确运行,但是如果我切换了第三条 if 语句如果使用 else ,它将不再起作用。为什么?预先谢谢你。
for i in range(len(mem)):
if(mem[i] == "-"):
writeStart = i
writeSize = 0
for j in range(i, len(mem)):
if(mem[j] == "-"):
writeSize += 1
if(writeSize == dataSize):
found = True
break
if((mem[j] != "-") & (writeSize != dataSize)): #if switched with an else: error
i = j
break
if(found):
break
答案 0 :(得分:2)
如果用“第三个if”表示同时具有mem[j]
条件和writeSize
条件的条件,则问题在于else
子句只能替代writeSize == dataSize
,如果不是两者都适用。
我认为您可以像这样重组代码:
for j in range(i, len(mem)):
if (mem[j] == "-"):
writeSize += 1
if (writeSize == dataSize):
found = True
break
else:
i = j
break
因为检查writeSize
仅在增加它时才重要。
答案 1 :(得分:1)