首页 > 解决方案 > python3中的标准输出为空

问题描述

这是一个查找字符串是否为回文的程序。但是当我运行这段代码时,我得到了错误“标准输出错误”。

class Palindrome:
  @staticmethod
  def is_palindrome(word):
    flag = word;
    lengths = len(word);
    j=lengths;
    lengths = lengths/2;
    lengths = int(lengths);
    for i in lengths:
        if (word[i] == word[j]):
            count = count+1;
            j = j-1;
    if (count == lengths):
        r = "yes";
    else:
        r = "no";
    return r
word = input();
print(Palindrome.is_palindrome(word));

标签: python-3.x

解决方案


代码有一些错误,

首先,您正在尝试迭代一个intlike for i in lengths,这会引发错误。您必须像使用它一样for i in range(lengths)

count = count+1此外,您甚至在初始化之前就尝试这样做count,这将引发错误。count要解决这个问题,您可以在循环之前将变量初始化为0.

代码的另一个问题是,您要比较word[i]word[j]where jislength这是不可能的,因为对于 length 字符串n,索引从0to运行n-1。因此,您必须使用length-1as j

此外,Python 中不需要分号。

纠正我上面提到的所有事情,您可以像这样重写代码

class Palindrome:
    @staticmethod
    def is_palindrome(word):
        flag = word
        lengths = len(word)
        j=lengths-1
        lengths = lengths/2
        lengths = int(lengths)
        count = 0
        for i in range(lengths):
            if (word[i] == word[j]):
                count = count+1
                j = j-1
        if (count == lengths):
            r = "yes"
        else:
            r = "no"
        return r
word = input()
print(Palindrome.is_palindrome(word))

如果您可以使用~运算符,您可以在很大程度上整理代码。可以这样做。

class Palindrome:
    @staticmethod
    def is_palindrome(word):
        if all(word[i] == word[~i] for i in range(len(word) // 2)):
            return "yes"
        else:
            return "no"

word = input()
print(Palindrome.is_palindrome(word)

如果您想了解~操作员的工作原理,请查看这篇文章。

如果您可以使用索引来反转字符串,则可以进一步改进它。如果您可以反转字符串,然后检查原始字符串。

class Palindrome:
    @staticmethod
    def is_palindrome(word):
        if word == word[::-1]:
            return "yes"
        else:
            return "no"

word = input()
print(Palindrome.is_palindrome(word)

推荐阅读