以下是代码:
aWord = input("enter the word now")
num = 0
def palindromeMethod(theWord):
length = len(theWord)
if(theWord[num]==theWord[length-num]):
if(num>length):
print("its a palindrome")
num = num+1
palindromeMethod(theWord)
else:
return False
palindromeMethod(aWord)
我在三个num
处收到错误,其中包含:unresolved reference 'num'
,我在运行时收到错误local variable 'num' referenced before assignment
。但是我在方法之前定义了num
,为什么我会收到这些错误?感谢
编辑:自己回答
答案 0 :(得分:2)
函数内部的变量具有局部范围,因此您需要在函数内部初始化num
!但是,由于此处有递归函数,因此无法在函数中指定num=0
。
所以我对这个问题的建议是:
def palindromeMethod(theWord,num=0):
length = len(theWord)
if(theWord[num]==theWord[length-num]):
if(num>length):
print(theWord, "is a palindrome")
return True
num = num+1
return palindromeMethod(theWord,num)
else:
return False
答案 1 :(得分:2)
在python中,要跟踪递归期间需要存在的变量,可以使用带有默认值的参数。
def palindromeMethod(theWord, num=0):
# here ^
length = len(theWord)
if(theWord[num]==theWord[length-num-1]):
if(num>=length-1):
return True
return palindromeMethod(theWord, num+1)
# pass it here ^
else:
return False
if palindromeMethod('aabbccbbaa'):
# don't need to pass it here ^
print('its a palindrome')
我将print
移到了函数外部并修复了一些错误。
答案 2 :(得分:2)
无需索引或长度
def pal(w):
if w == "": return True
if w[0] != w[-1]: return False
return pal(w[1:-1])
但您可能已被要求使用它们......
根据OP的评论,这有效地缩小了可能的响应范围,这里是一个外观,没有切片版本。
def pal(w, l=0, n=0):
# in production use: l = l if l else len(w)
if l ==0:
l = len(w)
print(("0123456789"*3)[:l])
print(w)
print(n, l-n-1, w[n], w[l-n-1])
if w[n] != w[l-n-1]: return False
if n+1 >= l-n-2: return True
return pal(w,l,n+1)
# a bit of testing
for word in ('aabbcbbaa', 'aabbccbbaa', 'aabbccbaa', 'aabbcdbbaa',
'saippuakivikauppias'):
print('Is the word "%s" palindrome? %s.' % (word, pal(word)))
print
表达式用于显示函数的正在进行的工作,OP可能希望删除它们,因为它们未被请求(NB:w / o {{ 1}}等等5 LOC(。)
测试输出
print
012345678
aabbcbbaa
0 8 a a
1 7 a a
2 6 b b
3 5 b b
Is the word "aabbcbbaa" palindrome? True.
0123456789
aabbccbbaa
0 9 a a
1 8 a a
2 7 b b
3 6 b b
4 5 c c
Is the word "aabbccbbaa" palindrome? True.
012345678
aabbccbaa
0 8 a a
1 7 a a
2 6 b b
3 5 b c
Is the word "aabbccbaa" palindrome? False.
0123456789
aabbcdbbaa
0 9 a a
1 8 a a
2 7 b b
3 6 b b
4 5 c d
Is the word "aabbcdbbaa" palindrome? False.
0123456789012345678
saippuakivikauppias
0 18 s s
1 17 a a
2 16 i i
3 15 p p
4 14 p p
5 13 u u
6 12 a a
7 11 k k
8 10 i i
Is the word "saippuakivikauppias" palindrome? True.
答案 3 :(得分:0)
好吧我玩了它并想出了这个,没有任何错误:
aWord = input("enter the word now")
num = 0
def palindromeMethod(theWord, num):
length = len(theWord)
if(theWord[num]==theWord[length-(1+num)]):
if(num>=length-1):
print("its a palindrome")
return True
num = num+1
palindromeMethod(theWord,num)
else:
return False
palindromeMethod(aWord,0)
然而,我不是100%肯定为什么这样做。当我说“返回真实”时,我猜测到了这一点。它突破了外部的if块,并且没有执行if块中的下两行(num = num + 1和palindromeMethod(theWord,num)....这是正确的吗?