nonpalidrome=[]
for word in lowers:
if len(word)>=7:
if word[2:-2:1]==word[2:-2:-1]:
if word[1]!=word[-1]:
nonpalidrome.append(word)
这是我到目前为止所要做的是:
通过过滤下级列表,创建满足的单词列表 以下所有三个条件,打印列表时 完成:
这个词至少有7个字符;在这个词的中间, 跳过第一个和最后一个字母,是一个回文(同样向前) 向后);这个词本身不是回文。
我觉得我非常接近......我缺少什么
答案 0 :(得分:1)
由于您的问题是结果列表为空,这意味着您的某个条件无效:
if len(word)>=7:
if word[2:-2:1]==word[2:-2:-1]:
if word[1]!=word[-1]:
我要尝试的第一件事是在每个语句之后添加print
语句来缩小问题范围:
nonpalidrome=[]
for word in lowers:
print("Got word " + word)
if len(word)>=7:
print("len(word) >= 7")
if word[2:-2:1]==word[2:-2:-1]:
print("word[2:-2:1]==word[2:-2:-1]")
if word[1]!=word[-1]:
print("word[1]!=word[-1]")
nonpalidrome.append(word)
现在您可以查找未显示的打印语句,并且您将知道哪个if
语句没有达到预期效果。
顺便说一下,你的代码要比它需要的复杂得多。为什么不循环遍历字符串而不是比较像1和2这样的硬编码索引?
答案 1 :(得分:0)
尝试这样的事情:
for word in lowers :
if len(word) >=7 and word[1:-1] == word[1:-1][::-1] and word [0] != word[-1]:
nonpalindrome.append(word)
使用[1:-1]
获取单词的中间部分,使用[::-1]
获取反向字符串以匹配是否为回文:
In [172]: word='ballooned'
In [173]: word[1:-1]
Out[173]: 'alloone'
In [174]: word[1:-1][::-1]
Out[174]: 'enoolla'
In [175]: word[::-1]
Out[175]: 'denoollab'
或使用列表理解:
non_palindrome=[x for x lowers if len(x)>=7 and x[1:-1]==x[1:-1][::-1] and x[0] != x[-1] ]