我在这里遇到问题,我正在学习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,但是我想说我想要一个从零开始的变量非全局变量,我该怎么做?
提前谢谢。
答案 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]