首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >在python中检查反向字符串是否为回文或不使用堆栈机器的程序

在python中检查反向字符串是否为回文或不使用堆栈机器的程序
EN

Stack Overflow用户
提问于 2021-04-16 01:52:55
回答 1查看 57关注 0票数 0

你能帮我解决以下问题吗?

我试图从用户获得一个字符串输入,然后将该字符串推入StackMachine,以检查该字符串的有效性。如果字符串传递定义的规则,则将检查来自StackMachine的输出字符串,如果它是回文还是非回文,那么到目前为止,我尝试过的是..this。

备注您只能使用StackMachine类中的函数,而不能使用其他方法来确定字符串的有效性。接受字符串的条件是您已经读取了所有输入字符串,并且堆栈为空。

代码语言:javascript
复制
    ```

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()
代码语言:javascript
复制
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,成功地检查堆栈机处理的字符串是否为回文

EN

回答 1

Stack Overflow用户

发布于 2021-04-16 02:13:34

按照定义,StackMachine.pop()返回None

当您执行reversed_text + Stk.pop()时,即使reversed_text是一个字符串,Stk.pop()也是None,这将导致您正在看到的TypeError

为什么需要使用所谓的StackMachine类来检查字符串是否是回文?有更简单的方法来检查字符串是否是回文。

如果您只想获得一个字符串输入并确定它是否是回文,您可以这样做:

代码语言:javascript
复制
text = input()
isPalindrome = text == text[::-1]
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/67118091

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档