我有这段代码
def swap(a, i, j):
a[i], a[j] = a[j], a[i]
def permute(a, i, n):
if (a == b):
print('String matched')
else:
if i == n:
print(a)
for j in range(i, n + 1):
swap(a, i, j)
permute(a, i + 1, n)
swap(a, i, j)
def main():
string = "ABCD"
n = len(string)
a = list(string)
global b
b = list("ABDC")
permute(a, 0, n - 1)
if __name__ == '__main__':
main()
我的目标是在字符串匹配字符串b时停止循环,但程序输出是
['A', 'B', 'C', 'D']
String matched
['A', 'C', 'B', 'D']
['A', 'C', 'D', 'B']
['A', 'D', 'C', 'B']
['A', 'D', 'B', 'C']
['B', 'A', 'C', 'D']
['B', 'A', 'D', 'C']
['B', 'C', 'A', 'D']
['B', 'C', 'D', 'A']
['B', 'D', 'C', 'A']
['B', 'D', 'A', 'C']
['C', 'B', 'A', 'D']
['C', 'B', 'D', 'A']
['C', 'A', 'B', 'D']
['C', 'A', 'D', 'B']
['C', 'D', 'A', 'B']
['C', 'D', 'B', 'A']
['D', 'B', 'C', 'A']
['D', 'B', 'A', 'C']
['D', 'C', 'B', 'A']
['D', 'C', 'A', 'B']
['D', 'A', 'C', 'B']
['D', 'A', 'B', 'C']
Process finished with exit code 0
正如我们所看到的,“String matched”正在替换匹配的字符串(这意味着if条件正在工作)。我的问题是,之后循环仍然有效。
接下来尝试:将return false
放入if语句。不幸的是,输出仍然是相同的
有谁知道如何停止循环?
答案 0 :(得分:0)
您可以添加其他变量。
例如:
def swap(a, i, j):
a[i], a[j] = a[j], a[i]
def permute(a, i, n):
if (a == b):
global flag
flag = True
print('String matched')
elif not flag:
if i == n:
print(a)
for j in range(i, n + 1):
swap(a, i, j)
permute(a, i + 1, n)
swap(a, i, j)
def main():
string = "ABCD"
n = len(string)
a = list(string)
global flag
global b
flag = False
b = list("ABDC")
permute(a, 0, n - 1)
if __name__ == '__main__':
main()
答案 1 :(得分:0)
因为您以递归方式调用permute()函数,所以再次调用该函数的先前调用仍在运行。像上一个答案一样使用全局布尔变量可能是最简单的解决方案。