我正在努力学习While循环.

为了练习,我创建了一个简单的While循环,并在函数中使用if语句来判断和查看单词是否为回文.出于某种原因,即使单词不是回文,它也总是返回True.

我原以为最后一行的打印函数的输出为FALSE:

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))

注意:当我将If语句的求值更改为"!=",将If语句中的Return语句更改为False,并将While循环中的Return语句更改为True时,它似乎可以准确地检测回文-但我不知道为什么.

推荐答案

如果程序是这样编写的:

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.

第二个程序是正确的,因为要判断一个单词是否为回文,我们需要判断所有字母是否满足条件.只判断单词的第一个和最后一个字符,如果它们相等,并不意味着其他字母是相同的.我们也需要判断一下.

Python相关问答推荐

如何使用symy打印方程?

类型错误:输入类型不支持ufuncisnan-在执行Mann-Whitney U测试时[SOLVED]

在Polars(Python库)中将二进制转换为具有非UTF-8字符的字符串变量

如何使用它?

从一个系列创建一个Dataframe,特别是如何重命名其中的列(例如:使用NAs/NaN)

给定高度约束的旋转角解析求解

如何从列表框中 Select 而不出错?

使用特定值作为引用替换数据框行上的值

Python—转换日期:价目表到新行

从旋转的DF查询非NaN值

当条件满足时停止ODE集成?

polars:有效的方法来应用函数过滤列的字符串

比较两个有条件的数据帧并删除所有不合格的数据帧

用0填充没有覆盖范围的垃圾箱

如何将验证器应用于PYDANC2中的EACHY_ITEM?

使用Scikit的ValueError-了解

ValueError:必须在Pandas 中生成聚合值

如何从具有完整层次数据的Pandas框架生成图形?

大Pandas 每月重新抽样200万只和300万只

为什么任何一个HTML页面在保存到文件后都会变大6个字节?