【发布时间】:2020-07-31 01:52:04
【问题描述】:
当字符串“stringa”的长度等于给列表的第一个 x 值(在本例中为 1023)时,列表“stop”应该包含函数给出的 x 和 y 坐标。列表不应更改一次以上,这要归功于 list bool_stop 跟踪对列表所做的更改,以这种方式在再次更改列表的 x 和 y 值之前(在函数“failapiega”内的while循环) if statemet 将检查列表是否已经更改,如果是则阻止操作。这就是为什么我不明白为什么列表不断改变值。我想在函数的 while 循环之外有什么问题,但我无法检测到。
x = 1
iterations = 10
stringa = "AB"
tot = 2 ** (iterations + 2)
In = tot / 4
stop = [[1, -1], [In - 1, None], [2 * In - 1, None], [3 * In - 1, None], [tot - 1, None]]
# stop[1] --> [1023.0, None] #
bool_stop = [True] * 4
def failapiega(stringa, stop, bool_stop):
l = len(stringa)
i = l - 1
while i >= 0:
p = stringa[i]
if p == "A":
stringa += "B"
stop[0][0] += 1
elif p == "B":
stringa += "C"
stop[0][1] += 1
elif p == "C":
stringa += "D"
stop[0][0] -= 1
elif p == "D":
stringa += "A"
stop[0][1] -= 1
if bool_stop[0]:
if stop[1][0] == len(stringa) - 1:
bool_stop[0] = False
stop[1] = stop[0]
i -= 1
return stringa, stop, bool_stop
while 0 <= iterations:
stringa, stop, bool_stop = failapiega(stringa, stop, bool_stop)
iterations -= 1
调试发现
if stop[1][0] == len(stringa) - 1:
bool_stop[0] = False
stop[1] = stop[0]
这部分只执行一次,尽管 stop[1] 每次都在变化。
【问题讨论】:
-
因为你已经这样做了:
stop[1] = stop[0]stop[0] 和 stop[1] 指的是同一个对象。如果您更改其中一个值,则另一个将更改。可以关联。 -
非常感谢。我花了 2 天的时间来解决这个问题。
-
没问题。我会将其转换为答案;我很乐意投票并接受。
-
顺便说一句,
bool_stop = [True] * 4看起来有点奇怪,因为您只使用 bool_stop[0] -
我在后面的代码中访问
bool_stop的其他索引
标签: python string list function while-loop