为什么if语句和递归以这种方式行事?

时间:2015-11-29 21:02:01

标签: python

我在这里遇到问题,我正在学习python,因为我一直想利用它,而且只需要很少的研究就可以很容易地得出结论,Python是最容易理解和使用的。< / p>

import sys
    def run_program():
       print("[*] Palidrome Checker")
       word = raw_input("Enter your word: ")
       word = word.lower()
       def Palindrome(word, i):
           if(i >= 1):
                if(word[0] == word[i]):
                    i -= 2
                    Palindrome(word[1:], i)
                else:
                    return False
                    sys.exit(0)
           elif(len(word) == 1):
                print("Please enter a word, not a character")
                run_program()
           return True

       print(Palindrome(word, len(word)-1))

run_program()

我的问题是,为什么它只对第一个和最后一个字母相同的单词保持返回true,为什么我的if语句不返回false。

单词&#39; test&#39; 我打印了输出,并将e与s进行了比较,但它并没有返回false,尽管第一个嵌套if语句的输出为false。那个else语句不应该抓住它吗?

另外,假设我要在My Palindrome函数中添加另一个参数,所以它看起来像:

def Palindrome(word,i,a)

我不能指定为0,但是我想说我想要一个从零开始的变量非全局变量,我该怎么做?

提前谢谢。

2 个答案:

答案 0 :(得分:1)

您的if语句 返回false,但您没有对结果做任何事情。您应该return Palindrome(word[1:], i)而不是对结果不做任何事情。

请注意,您的sys.exit(0)无效,因为它位于return False之后。

关于添加另一个参数的问题没有多大意义,因为你没有解释你想用它做什么,也没有你希望变量具有什么范围(非全局太模糊,因为你有一个嵌套函数)。请注意,Palindrome()可以访问run_program()的本地变量。

以下是您的代码的更简洁版本:

import sys

def run_program():
    print('[*] Palidrome Checker') # move this into the loop if you want it to print before asking for input again after invalid input
    word = ''
    while True:
        word = raw_input('Enter your word: ')
        word = word.lower()

        if len(word) > 1: # quit the loop if we have a word
            break
        print('Please enter a word, not a character')

    def Palindrome(word):
        if len(word) < 2:
            return True
        if word[0] == word[-1]:
            return Palindrome(word[1:-1])
        return False

    print(Palindrome(word))

run_program()

答案 1 :(得分:-2)

最简单的回文检查器就像:

>>> n = 'level'
>>> True if n == n[::-1] else False # this ternary, you could do it like 'right' if n == n[::-1] else 'wrong'
True
# the simplest should be n == n[::-1]