如果程序是这样编写的:
from collections import deque
word = "tacrocat"
def check_palindrome(word):
d = deque(word)
while len(d) > 1:
if d.pop() == d.popleft():
return True
return False
print(check_palindrome(word))
At iteration-1:个个
由于双端队列中的第一个字符(‘t’)和最后一个字符(‘t’)相等,因此它将进入If条件并返回True.当在函数中执行RETURN语句时,控件就会从该函数中出来.换句话说,一旦执行了Return True语句,控制就返回到Print语句,而不执行While循环的剩余迭代,因为我们返回了True,所以True将被打印为输出.
让我们来分析一下第二个节目:
from collections import deque
word = "tacrocat"
def check_palindrome(word):
d = deque(word)
while len(d) > 1:
if d.pop() != d.popleft():
return False
return True
print(check_palindrome(word))
At iteration-1:个个
Current deque: [t,a,c,r,o,c,a,t]
我们同时弹出第一个元素和最后一个元素,并判断它们在If条件中是否不相等.因为‘t’和‘t’相等,所以IF条件将不会执行,而While循环将继续.
At iteration-2:个
Current deque: [a,c,r,o,c,a]
由于‘a’和‘a’相等,IF条件将不会执行,而While循环将继续.弹出第一个和最后一个元素(POP和POPPLFT)
At iteration-3:个
Current deque: [c,r,o,c]
由于‘c’和‘c’相等,IF条件将不会执行,而While循环将继续.弹出第一个和最后一个元素(POP和POPPLFT)
At iteration-4:个
Current deque: [r,o]
由于‘r’和‘o’不相等,因此将执行IF条件并返回FALSE语句.因此,函数CHECK_PARINDIZAL将终止,返回值为FALSE,因此我们得到的输出为FALSE.
第二个程序是正确的,因为要判断一个单词是否为回文,我们需要判断所有字母是否满足条件.只判断单词的第一个和最后一个字符,如果它们相等,并不意味着其他字母是相同的.我们也需要判断一下.