意外的 Python 行为 - 函数在 return 语句后无法终止
Unexpected Python behaviour - function fails to terminate after return statement
我写了一个函数 traverseMountain(altitude, stepsleft, substring) 作为 helper 函数来解决其中一个 hackerrank 问题。我认为在编写函数时测试函数是更好的做法,这就是我遇到问题的地方。
#!/bin/python3
import math
import os
import random
import re
import sys
# Complete the countingValleys function below.
def countingValleys(n, s):
altitude = 0
mountiansCount = 0
valleysCount = 0
def tailRecurseSolution(stepsleft, substring):
head, tail = substring[0], substring[1:]
if (head == 'U'):
mountiansCount+=1
traverseMountain(n-1, tail)
if (head == 'D'):
traverseValley(altitude+1, n-1, tail)
# return valleysCount
def traverseMountain(altitude, stepsleft, substring):
head, tail = substring[0], substring[1:]
if (head=="D"):
altitude-=1
if (head=="U"):
altitude+=1
stepsleft-=1
if (altitude<=0 or stepsleft<=0 or (not tail)):
x = stepsleft
return x
elif (altitude>0 and stepsleft>0 and tail):
traverseMountain(altitude, stepsleft,tail)
#def traverseValley(alt, stepsleft, substring):
# return x
if __name__ == '__main__':
altitude = 0
stepsleft = 99
path = "UUUDUDDD"
print(traverseMountain(altitude, stepsleft, path))
您可以忽略 countingValleys 函数,因为它不完整且未被调用。
我期待的是函数traverseMountian满足if条件,在最后一次递归调用时(当altitude变量为0或tail为空字符串时)进入块然后退出函数和 return stepsLeft 变量的值。
我看到的是我的调试器进入了 if 语句,但立即跳转到 elif 语句(我不明白为什么会那样做)并且我收到的变量被重置?
我想在这里做一个 post 以防它是代码的预期行为
我今天花了很多时间试图弄清楚为什么 Python 在 return 语句之后没有终止函数。我已经尝试了条件语句、return 语句的放置等,但没有成功。
您 returning x
但在递归调用中您没有对 return 值执行任何操作。
您可能希望 return traverseMountain(altitude, stepsleft,tail)
作为 traverseMountain
?
中的最后一行
我写了一个函数 traverseMountain(altitude, stepsleft, substring) 作为 helper 函数来解决其中一个 hackerrank 问题。我认为在编写函数时测试函数是更好的做法,这就是我遇到问题的地方。
#!/bin/python3
import math
import os
import random
import re
import sys
# Complete the countingValleys function below.
def countingValleys(n, s):
altitude = 0
mountiansCount = 0
valleysCount = 0
def tailRecurseSolution(stepsleft, substring):
head, tail = substring[0], substring[1:]
if (head == 'U'):
mountiansCount+=1
traverseMountain(n-1, tail)
if (head == 'D'):
traverseValley(altitude+1, n-1, tail)
# return valleysCount
def traverseMountain(altitude, stepsleft, substring):
head, tail = substring[0], substring[1:]
if (head=="D"):
altitude-=1
if (head=="U"):
altitude+=1
stepsleft-=1
if (altitude<=0 or stepsleft<=0 or (not tail)):
x = stepsleft
return x
elif (altitude>0 and stepsleft>0 and tail):
traverseMountain(altitude, stepsleft,tail)
#def traverseValley(alt, stepsleft, substring):
# return x
if __name__ == '__main__':
altitude = 0
stepsleft = 99
path = "UUUDUDDD"
print(traverseMountain(altitude, stepsleft, path))
您可以忽略 countingValleys 函数,因为它不完整且未被调用。
我期待的是函数traverseMountian满足if条件,在最后一次递归调用时(当altitude变量为0或tail为空字符串时)进入块然后退出函数和 return stepsLeft 变量的值。
我看到的是我的调试器进入了 if 语句,但立即跳转到 elif 语句(我不明白为什么会那样做)并且我收到的变量被重置?
我想在这里做一个 post 以防它是代码的预期行为 我今天花了很多时间试图弄清楚为什么 Python 在 return 语句之后没有终止函数。我已经尝试了条件语句、return 语句的放置等,但没有成功。
您 returning x
但在递归调用中您没有对 return 值执行任何操作。
您可能希望 return traverseMountain(altitude, stepsleft,tail)
作为 traverseMountain
?