我想检查一个单词是否是回文。这是我写的要检查的python代码。但它并没有给我正确的结果。
Stack Class
class Stack:
def __init__(self):
self.items=[]
def isEmpty(self):
return self.items==[]
def push(self,data):
self.items.append(data)
def size(self):
return len(Self.items)
def show(self):
print (self.items)
def peek(self):
return self.items[len(self.items)-1]
def pop(self):
assert not self.isEmpty()
return self.items.pop()
该计划
a=input("Enter a word: ")
s=Stack();
for i in a:
s.push(i);
while s is None:
list1 = s.pop();
if(list1 == a):
print("The word is a palindrome");
else:
print("It's not a palindrome");
print(a);
print(list1);
我收到了这个错误。
RESTART: C:/Users/Dil/AppData/Local/Programs/Python/Python36-32/Tutorials/checkpalindrome.py
Enter a word: kayak
Traceback (most recent call last):
File "C:/Users/Dil/AppData/Local/Programs/Python/Python36-32/Tutorials/checkpalindrome.py", line 35, in <module>
if(list1 == a):
NameError: name 'list1' is not defined
但如果我将程序改为以下内容:
a= input("Enter a word: ")
s=Stack();
for i in a:
s.push(i);
list1 = s.pop();
if(list1 == a):
print("The word is a palindrome");
else:
print("It's not a palindrome");
print(a);
print(list1);
它会给我输出如下:
>>>
RESTART: C:/Users/Dil/AppData/Local/Programs/Python/Python36-32/Tutorials/checkpalindrome.py
Enter a word: kayak
It's not a palindrome
kayak
k
>>>
答案 0 :(得分:1)
问题末尾的输出很清楚为什么会发生这种情况。 a
包含字符串kayak
,而list1
包含单个字母:k
。这是因为每次调用list1 = s.pop()
行时list1
都会将list1
重新分配给一个字母。您需要附加到list1
而不是覆盖它。正如Phydeaux所说,正确的方法是在循环之前将list1 = ""
定义为空字符串,如下所示:list1 += s.pop()
。然后在循环中,像这样追加它:s.push(i)
。
但是,还有另一个问题,即在同一个循环中使用list1 += s.pop()
和s.push()
将按顺序复制字符串,而不是按相反顺序复制。这是因为您正在向堆栈添加单个项目,并在每次循环迭代时立即清空它。你应该做的是在一个循环中调用list1 += s.pop()
,然后在第二个循环中调用for i in a:
s.push(i)
list1 = ""
while not s.isEmpty():
list1 += s.pop()
来获得反向字符串。
试试这个:
return a == a[::-1]
作为旁注:python在一行的末尾不需要分号。我意识到你可能会经历数据结构的教程,但检查回文的pythonic方法是with CTE as(
SELECT project_id, MAX(update_date) update_date
FROM YourTable
GROUP BY project_id
)
SELECT cte.project_id, cte.update_date , max(t.update_text) update_text
FROM YourTable T inner join CTE on T.project_id = CTE.project_id
group by cte.project_id, cte.update_date ;
。