鱼C论坛

 找回密码
 立即注册
查看: 2869|回复: 7

[学习笔记] 【Pyhon 018讲心得体会】【统计双字符串出现次数】

[复制链接]
发表于 2018-11-17 19:40:44 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能^_^

您需要 登录 才可以下载或查看,没有账号?立即注册

x
本帖最后由 heidern0612 于 2018-12-17 09:56 编辑

写的内容都是自我思考的过程,难免有疏漏,有错误的地方欢迎广大鱼油给予指正!


1、实参、形参、关键字参数、默认参数:

        A、形参指的是函数创建和定义过程中小括号里的参数,而实参指的是函数在调用过程中传递进去的参数。
       
        B、关键字参数,是指函数在调用的时候,带上参数的名字去指定具体调用的是哪个参数,从而可以不用按照参数的顺序调用函数。

        C、关键字参数是在函数调用的时候,通过参数名制定需要赋值的参数,这样做就不怕因为搞不清参数的顺序而导致函数调用出错。

        D、而默认参数是在参数定义的过程中,为形参赋初值,当函数调用的时候,不传递实参,则默认使用形参的初始值代替。
       
        关键字参数的定义和默认参数比较类似,举例说明:

默认参数:

def guy (name,gd = "男",pfs = "ADC",):                                             #默认参数为gd和pfs;
        print(f"你的名字是{name},性别是{gd},位置是{pfs}。")

guy("烬")                                                                                           #由于有两个默认参数,只需要传入一个值就行。

        打印结果为:你的名字是烬,性别是男,位置是ADC。


不足之处是,传入的实参和变量必须一一对应,否则就会出现如下情况:
def guy (name,gd ,pfs = "ADC"):                                             #前两个参数未定义,第三个默认参数为pfs;
        print(f"你的名字是{name},性别是{gd},位置是{pfs}。")

guy("男","烬")                                                                   #未对应位置姓名和性别位置。

        打印结果为:你的名字是男,性别是烬,位置是ADC。


关键字参数如下:
def guy (name,gd = "男",pfs = "ADC"):                                             #默认参数为gd和pfs;
        print(f"你的名字是{name},性别是{gd},位置是{pfs}。")

guy(pfs = "APC",gd = "女",name = "艾希")

关键字位置不用一一对应,只需要对应形参的名字就行。




2、动动手答案分析:这道题倒是很明显的可以解释默认参数(base = 3)和关键字参数(base = 5)的不同。
def mFun(*param, base=3):      #*param设定收集参数,不确定用户需要输入多少,用*param代替。
    result = 0
    for each in param:                #根据用户输入多少,遍历用户输入的数据
        result += each                        #each所有和相加

    result *= base                        #和的结果乘以3,返回给base
    
    print('结果是:', result)

mFun(1, 2, 3, 4, 5, base=5)


3、水仙花数算法跟之前学过的类似,小甲鱼老师只是多定义了一个def函数,不多解释了。



4、统计双字符串出现的次数  (两个字符串必须相互挨着,不能跳着算。)

分析老师的思路:
def findStr(desStr, subStr):
    count = 0
    length = len(desStr)                                        #统计字符串的总长度
    if subStr not in desStr:                
        print('在目标字符串中未找到字符串!')
    else:
        for each in range(length-1):                        #each1遍历字符串的长度数,为什么减一呢?因为2个字符串2个一起比较的话,只能比较到倒数第二位,五个字符串只能比较四次,六个字符串只能比较五次
                                                                        类推,还不明白的话,自己画张5个字符的图 ,两个两个比较看能比较几次就明白了。如果这里是三个字符串呢?那就是lengh -2了。


            if desStr[each1] == subStr[0]:                #这个嵌套循环if比较类似红、黄、绿球那题的感觉,如果desStr的each位元素跟subStr的第一位元素比较相同的话,往下分支;
                if desStr[each+1] == subStr[1]:        #上面条件满足的情况下,如果desStr的each+1位元素跟subStr的第二位元素比较还是相同的话;下分支
                    count += 1                                        #count 自增1
   

#简单说以上两个条件都满足的情况下,count才+1;循环的次数按照(字符串的长度-1)计算。
                 
        print('子字符串在目标字符串中共出现 %d 次' % count)

desStr = input('请输入目标字符串:')
subStr = input('请输入子字符串(两个字符):')
findStr(desStr, subStr)



本帖被以下淘专辑推荐:

想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2019-2-27 18:06:31 | 显示全部楼层
还是有两个地方不太懂:
1、
def guy (name,gd = "男",pfs = "ADC"):                                             #默认参数为gd和pfs;
        print(f"你的名字是{name},性别是{gd},位置是{pfs}。")

guy(pfs = "APC",gd = "女",name = "艾希")
为啥这段代码print后要加一个f?不明白它的作用是什么...
2、最后统计字符串的程序,还是不明白为什么range(length-1),我们不是不清楚目标字符串的长度吗?那为什么讲子字符串2个一起比较的话,只能比较到倒数第二位,五个字符串只能比较四次?这层逻辑理解不了,导致我在纸上写了好几遍也不明白。
希望朋友能够给予解答!万分感谢!
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2019-2-28 08:51:33 | 显示全部楼层
来论坛学潮汕话 发表于 2019-2-27 18:06
还是有两个地方不太懂:
1、

1、print(f“我是字符串”)这个格式化字符串的方法,小甲鱼老师的课程里面并没有讲,这是python3.6版本之后的新特性。你可以在别的书里面找到这种写法。

2、假如比较到最后一位的话,最后一位是第一个字符串,第二个字符串不就超出字符串的范围了吗?..

例如:“海上升明月”这个字符串,假如你有“海上”需要比较,你只需要比较到“海上生明”这里,再进行比较“月”的话,“月”只有一个字符串,怎么拿“海上”两个字符串去比较一个“月”这一个字符串呢?
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2019-2-28 11:59:32 | 显示全部楼层
heidern0612 发表于 2019-2-28 08:51
1、print(f“我是字符串”)这个格式化字符串的方法,小甲鱼老师的课程里面并没有讲,这是python3.6版本之 ...

我好像明白了,是不是subStr在range的时候是用2个字符串去对比目标字符串中的一个字符串。
比如我们换成六个字符:“枯藤老树昏鸦”,我们需要比较“枯藤”,那么就是“枯藤”先比较“枯”,然后再比较“藤”、“老”、“树”、“昏”、“鸦”,而最后一个字符如果要用“枯藤”去比较的话,比完第一个字符后,第二个字符就没有字符串与之对比了,所以没有对比的意义,因此,要用length-1,是这么个逻辑吗?
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2019-2-28 12:18:24 | 显示全部楼层
来论坛学潮汕话 发表于 2019-2-28 11:59
我好像明白了,是不是subStr在range的时候是用2个字符串去对比目标字符串中的一个字符串。
比如我们换成 ...

对啊,两个只能跟两个进行比较啊,两个跟一个怎么进行比较~
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2019-9-6 13:57:36 | 显示全部楼层
我想问一下如果把两个if 换成一个while, while desStr[each1] == subStr[0] and desStr[each+1] == subStr[1]: count+=1. 怎么程序就跑不起来?
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2020-1-13 01:37:28 | 显示全部楼层
来论坛学潮汕话 发表于 2019-2-28 11:59
我好像明白了,是不是subStr在range的时候是用2个字符串去对比目标字符串中的一个字符串。
比如我们换成 ...

惨了 我还是不理解,range(length-1),这个意思,我试着把‘-1’去掉  也可以比较啊。
‘each’已经是‘desStr’的字符长度了,减掉一个长度干嘛
   会不会有机会计算出错呢,应该要把整个‘desStr’ 遍历干净才好嘛
还有这个和步进有啥关系,怎么又成倒着步进了

‘海上生明月’,难道不是‘海’,依次比较‘海,上,生,明,月’吗
‘range(length-1)’,不就是0123的索引,没有 ‘月’ 了

求大佬指教 解惑 我是进入了什么无趣,真小白   视频重复看三遍以上,作业要三天
  是不是要劝退了   
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2020-1-13 01:50:39 | 显示全部楼层
heidern0612 发表于 2019-2-28 08:51
1、print(f“我是字符串”)这个格式化字符串的方法,小甲鱼老师的课程里面并没有讲,这是python3.6版本之 ...

好的  
   清楚了一个点  字符串的长度是不含o,range的列表是有0的,那‘-0’,就对上了
步进 咋成的 倒数的 还是不清楚
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2025-1-12 16:12

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表