在enqueue(rb,x)的函数定义中,有一个带增量的if语句,在if语句后有一个大小增量。当我运行代码时,两个变量都没有增加。
我尝试更改main()函数,该函数的范围从N开始,以-1步长在1结束,它将列表的第一个元素更改为1,但仍然不递增,因此它会不断更改第一个元素
def create(capacity):
buff = stdarray.create1D(capacity, None)
count = 0
for i in buff:
if i != None:
count += 1
size = count
first = 0
for i in range(len(buff)):
if buff[i] != None and first == 0:
first += i
last = 0
for i in range(len(buff)):
if buff[i] == None and buff[i - 1] != None and buff[i +1] == None:
last += i
break
rb = [buff, size, first, last]
return rb
def enqueue(rb, x):
last = rb[3]
size = rb[1]
rb[0][last] = x
if last + 1 == len(rb[0]):
last = 0
else:
last += 1
size += 1
def _main():
N = int(sys.argv[1])
rb = create(N)
for i in range(1, N + 1):
enqueue(rb, i)
stdio.writeln(rb)
if __name__ == '__main__':
_main()
如果输入为5,则输出应为[[1, 2, 3, 2, 5], 5, 0, 0]
。我得到的是[[5, None, None, None, None], 0, 0, 0]
。
答案 0 :(得分:2)
我不认为您的if
会被跳过,因为它里面的语句不会做任何事情,因为那些变量(size
和last
)不会保留在该功能之外的任何地方。
在函数内部声明的变量只会持续到函数返回为止;如果您不将它们分配给寿命更长的对象(例如实例变量)或返回它们,则更改它们的值将无济于事。
答案 1 :(得分:0)
count = 0
for i in buff:
if i != None:
count += 1
size = count
计数器为0,因此大小为零,因为您启动了buff = [无,无,无,无,无]。