所以我试图检查一个单词是否是使用堆栈的回文。我有一个例外,它让它工作。如果我尝试“水平”这个词。但是,如果我尝试“levell'它回来了。这是我的代码:
import Stack
def check_palindrome():
s = Stack.Stack()
word = input('Enter a word: ')
for x in word:
s.push(x)
palindrome = True
for x in range(len(word)):
if s.pop() == word[x]:
palindrome = True
else:
palindrome = False
if palindrome == True:
print(word, 'is a palindrome.')
else:
print(word, 'is not a palindrome.')
check_palindrome()
我似乎无法弄清楚为什么说这是真的。也许我错误地想到了这一点。我的想法是使用
将每个字母添加到堆栈中for x in word:
s.push(x)
然后由于FILO而将其弹出并将最后一个与第一个进行比较。任何见解都将不胜感激!
答案 0 :(得分:2)
我不知道你是否故意想要使用Stack,为什么不检查这个词是否与其相反,就像这样?
def check_palindrome(word):
palindrome = word == word[::-1] # True if word is equal to its reverse
if palindrome == True:
print(word, 'is a palindrome.')
else:
print(word, 'is not a palindrome.')
答案 1 :(得分:2)
当然,还有更好的方法可以检查一个单词是一个回文,使用反向字符串并比较自身(在这个网站上有很多答案可以解决这个问题)。
那说,关于你的问题:
t=# do
$$
declare _r record;
begin
for _r in (with j as (select * from (values ('3'),('{"valid":true}'),('notValid') ) as son) select column1 v from j) loop
begin
perform _r.v::json;
exception when others then raise info '%',concat(_r.v,' ',SQLSTATE);
end;
end loop;
end;
$$
;
INFO: notValid 22P02
DO
t=# \e
INFO: test3 22P02
INFO: notValid 22P02
DO
如果一个字母不匹配,则应该for x in range(len(word)):
if s.pop() == word[x]:
palindrome = True
else:
palindrome = False
循环,否则答案仅受最后一次循环迭代的限制。我写道:
break
{for letter in word:
if s.pop() != letter:
palindrome = False
break # one mismatch: bail out
else:
palindrome = True # OK
循环的else
仅在未遇到for
的情况下实现所有迭代时执行。
答案 2 :(得分:0)
问题是,即使您发现不匹配,您的比较仍会继续,因此即使将fmaf()
设置为palindrome
,True
也会重置为False
。总的来说,你实际上只是检查你单词的第一个和最后一个字母是否相同。当您发现不匹配时,可以通过break
解决此问题。
同样作为样式注释,您可以将if palindrome == True:
替换为if palindrome: