Python 学习日记day 5

学习内容:回文检测:

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循环立即停止。总的来说今天学的蛮多的了吧,我看的资料比较理论一点点,主要讲的都是测试和调试什么的,有一说一勉强能看得懂代码。问题不大!!!

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值