学习内容:回文检测:
def isPalindrome(s):
"""假设s是字符串
如果s是回文字符串则返回True,否则返回False。
忽略标点符号、空格和大小写。"""
def toChars(s): #寻找字符串中的字母。
s = s.lower() #字符串的字母统一成小写
letters = ''
for c in s:
if c in 'abcdefghijklmnopqrstuvwxyz': #排除空格,标点对检测的干扰。
letters = letters + c
return letters
def isPal(s): #回文函数
if len(s) <= 1:
return True
else:
return s[0] == s[-1] and isPal(s[1:-1]) #运用递归 求其是否第一位和最后一位始终相同
return isPal(toChars(s))
print(isPalindrome('abc, d ,cba'))
print(isPalindrome('abc, D ,Cba'))
print(isPalindrome('abc, d cba'))
print(isPalindrome('ab, d ,cba'))
用while语句也可以进行筛选:
def toChars(s): #寻找字符串中的字母。
s = s.lower() #字符串的字母统一成小写
letters = ''
i=0
while i <len(s):
c=s[i]
if str(c) in 'abcdefghijklmnopqrstuvwxyz': #排除空格,标点对检测的干扰。
letters = letters + c
i += 1
return letters
输入一串字符串,然后toChars函数和isPal函数进行工作,由于 isPal(toChars(s))的约定,是先进行toChars函数的筛选,将非字符的纯字母输出给letters,然后将输出结果lettes 发送给isPal函数进行回文。
深:
由于列表里有一个倒叙函数 revese()所以可以将输入转换成一个list列表做回文,就连递归都不需要了。代码如下:
def isPal(x):
"""假设x是列表
如果列表是回文,则返回True,否则返回False"""
temp = x[:] #如果列表x不用x[:]表示的话在下一步t的倒叙时和t一起倒叙
temp.reverse()
if temp == x:
return True
else:
return False
x=[2,2,2,9,2,9]
y=[9,2,9,9,2,9]
print(isPal(x))
print(isPal(y))
运行结果如下:
如果想加一个排除空格 标点的干扰,和上面一样,用for语句或者whlie循环语句,不过现在实在列表里面进行筛选,其实大差不差jie
总结:
在学习函数这一章节的时候,开篇就被提醒最好写一个test测试函数,测试函数是否能像预期一样,进行操作,可是我觉得太麻烦了。今天已经感受到了,test函数的重要性,改了一天的bug,最深刻的bug就是在将列表x赋值给t后,t进行倒叙,x也会莫名其妙的进行倒叙,根据之后的逻辑就一直会输出true,我每行print一下才找到这个问题的,我只知道在用for函数给变量赋值时若列表变了for循环立即停止。总的来说今天学的蛮多的了吧,我看的资料比较理论一点点,主要讲的都是测试和调试什么的,有一说一勉强能看得懂代码。问题不大!!!