![](/img/trans.png)
[英]Python 2.7 Nested If-statement won't print string literal after printing array position
[英]Recursion won't stop executing after an if-statement
我有这个代码
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
如我们所见,“匹配的字符串”正在替换匹配的字符串(这意味着if条件正在工作)。 我的问题是,此后循环仍然有效。
下一步:将if语句的return false
。 不幸的是输出仍然相同
有谁知道如何停止循环?
您可以添加其他变量。
例如:
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()
因为您是递归调用permute()函数,所以先前再次调用该函数的调用仍在运行。 像上一个答案一样,使用全局布尔变量可能是最简单的解决方案。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.