家庭作业: 检查文本是否是回文也应该忽略标点符号,空格和大小写。例如,“升起投票,先生。”也是一个回文,但我们目前的计划并没有说它。你能改进上述程序以识别这个回文吗?
原始代码:
def reverse(text):
return text[::-1]
def is_palindrome(text):
return text == reverse(text)
something = input('Enter text: ')
if (is_palindrome(something)):
print("Yes, it is a palindrome")
else:
print("No, it is not a palindrome")
我的尝试:
import re
def reverse(text):
global words
words = text.split()
return words[::-1]
def is_palindrome(text):
return words==reverse(text)
something = input('Enter text: ')
if (is_palindrome(something)):
print("Yes, it is a palindrome")
else:
print("No, it is not a palindrome")
错误:
Enter text: jfldj
Traceback (most recent call last):
File "/Users/apple/PycharmProjects/Problem Solving/user_input.py", line 13, in <module>
print("Yes, it is a palindrome")
File "/Users/apple/PycharmProjects/Problem Solving/user_input.py", line 10, in is_palindrome
NameError: name 'words' is not defined
我应该如何更改我的代码?
最新代码:
import string
def remove_punctuations(word):
return "".join(i.lower() for i in word if i not in string.ascii_letters)
def reverse(text):
return text[::-1]
def is_palindrome(text):
text = remove_punctuations(text)
return text == reverse(text)
something = input('Enter text: ')
if (is_palindrome(something)):
print("Yes, it is a palindrome"
else:
print("No, it is not a palindrome")
无论我输入什么,输出都是。
Enter text: hggjkgkkkk
Yes, it is a palindrome
怎么了?
答案 0 :(得分:3)
要忽略给定文本的标点符号,空格和大小写,您需要定义一个函数remove_punctuations()
,它将一个单词作为参数并返回一个包含所有小写字符的单词,删除标点符号和删除的空格。 / p>
要删除我们需要迭代给定文本的不需要的字符,如果当前字符位于strings.ascii_letters
,则生成使用str.lower()
方法将其转换为低级字符的字符。最后使用"".join()
方法连接生成的str
元素。
import string
def remove_punctuations(word):
return "".join(i.lower() for i in word if i in string.ascii_letters)
def reverse(text):
return text[::-1]
def is_palindrome(text):
text = remove_punctuations(text)
return text==reverse(text)
something = "Rise to vote, sir."
if (is_palindrome(something)):
print("Yes, it is a palindrome")
else:
print("No, it is not a palindrome")
答案 1 :(得分:1)
我在两天前开始学习python,所以我想到了这一点。 它不是那么先进,但就像一个魅力。 :D 我在那里做什么很简单。我只是用“合法”字母(abc =)组成一个元组。然后定义一个函数,该函数首先将所有字母更改为小写,然后检查字符串中具有“合法”字母的每个字符。然后在“过滤”之后,原始文本仅包含“合法”文本。然后,第二个函数只反转第一个函数的结果。比较,然后da ..!
# Palindrome recognize
abc='abcdefghijklmnopqrstuvwxyz'
def rawtext(text):
rawtext=''
text=text.lower()
for j in text[::1]:
for i in abc[::1]:
if j==i:
rawtext=rawtext+j
return rawtext
def reverse(text):
rev= rawtext(text)[::-1]
return rev
text=str(input('Write text:'))
if reverse(text)==rawtext:
print('The text is palindrome')
else:
print('The text is not a palindrome')
答案 2 :(得分:0)
from itertools import izip_longest
def is_palindrome(s):
l = len(s)
fi = (i for i in xrange(l) if s[i].isalpha())
bi = (i for i in xrange(l-1, -1, -1) if s[i].isalpha())
for f, b in izip_longest(fi, bi):
if f >= b: return True
if s[f].lower() != s[b].lower(): return False
return True
希望有所帮助