你能帮我解决以下问题吗?
我试图从用户获得一个字符串输入,然后将该字符串推入StackMachine,以检查该字符串的有效性。如果字符串传递定义的规则,则将检查来自StackMachine的输出字符串,如果它是回文还是非回文,那么到目前为止,我尝试过的是..this。
备注您只能使用StackMachine类中的函数,而不能使用其他方法来确定字符串的有效性。接受字符串的条件是您已经读取了所有输入字符串,并且堆栈为空。
```
class StackMachine(object):
SMRules = {} # dictionary of SM rules
def __init__(self):
self.Stack = ['S'] # populate stack with initial 'S'
self.size = 1 # set size of stack to 1
self.SMRules = {} # Place rules here
def pop(self):
if len(self.Stack) <1:
pass
else:
self.Stack.pop(0)
self.size-= 1 # reduce stack size by 1
return
def peek(self):
ss = ""
if len(self.Stack) < 1:
return ""
else:
ss = self.Stack
return ss[0]
def stackIsEmpty(self):
if len(self.Stack) == 0:
return True
else:
return False
def push(self,str):
sStr = str[::-1] # slicing
for chr in sStr:
self.Stack.insert(0,chr) # push string onto top of stack
self.size = len(self.Stack)
return
def printStack(self):
print("Stack: [",end='')
for item in self.Stack:
print(item,end='')
print("]")
return
def printRules(self):
print("SM Rules:")
rn = 1
for key, value in self.SMRules.items():
print("Rule",rn,"%4s" % key,"|", value)
rn += 1
return
def main():
Stk = StackMachine()
text =str(input('Please enter the string: '))
for character in text:
Stk.push(character)
reversed_text = ''
while not Stk.stackIsEmpty():
reversed_text = reversed_text + Stk.pop()
if text == reversed_text:
print('The string is a palindrome.')
else:
print('The string is not a palindrome.')
if __name__ == '__main__':
main()Am getting the following Error and i dont know how to solve it
```
File "C:\Users\user\Stack-Machine\StackMachine.py", line 91, in main
reversed_text = reversed_text + Stk.pop()
TypeError: can only concatenate str (not "NoneType") to str`enter code here`我的问题是:1.如何解决错误?2.如何从stackMachine 3中逐字符打印字符串chracter,成功地检查堆栈机处理的字符串是否为回文
发布于 2021-04-16 02:13:34
按照定义,StackMachine.pop()返回None。
当您执行reversed_text + Stk.pop()时,即使reversed_text是一个字符串,Stk.pop()也是None,这将导致您正在看到的TypeError。
为什么需要使用所谓的StackMachine类来检查字符串是否是回文?有更简单的方法来检查字符串是否是回文。
如果您只想获得一个字符串输入并确定它是否是回文,您可以这样做:
text = input()
isPalindrome = text == text[::-1]https://stackoverflow.com/questions/67118091
复制相似问题