鱼C论坛

 找回密码
 立即注册
查看: 1670|回复: 6

[已解决]第十八课课后作业看不明白

[复制链接]
发表于 2022-3-2 23:20:24 | 显示全部楼层 |阅读模式

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

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

x
编写一个函数 findstr(),该函数统计一个长度为 2 的子字符串在另一个字符串中出现的次数。
例如:假定输入的字符串为 “You cannot improve your past, but you can improve your future. Once time is wasted, life is wasted.”,子字符串为 “im”,函数执行后打印“子字母串在目标字符串中共出现 3 次”。

def findStr(desStr, subStr):
    count = 0
    length = len(desStr)
    if subStr not in desStr:
        print('在目标字符串中未找到字符串!')
    else:
        for each1 in range(length-1):      
            if desStr[each1] == subStr[0]:
                if desStr[each1+1] == subStr[1]:
                    count += 1
                    
        print('子字符串在目标字符串中共出现 %d 次' % count)

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

-----
看不明白,请大佬解释一下每一句代码的含义
最佳答案
2022-3-3 00:07:15
def findStr(desStr, subStr):        # 定义一个函数findStr,这个函数接受两个参数:desStr目标字符串、subStr子字符串
    count = 0                       # 用来计算出现次数的变量 count
    length = len(desStr)            # 目标字符串的长度 length
    if subStr not in desStr:        # 如果子字符串subStr不在目标字符串desStr中
        print('在目标字符串中未找到字符串!')  # 输出 '在目标字符串中未找到字符串!'
    else:  # 否则
        for each1 in range(length-1):     # 根据目标字符串的长度产生索引进行循环
            if desStr[each1] == subStr[0]: # 如果目标字符串的第 each1 + 1 (因为索引是从0开始,所以加1)个字符等于 子字符串的第一个字符
                if desStr[each1+1] == subStr[1]: # 如果目标字符串的第 each1 + 2 个字符等于 子字符串的第二个字符
                    count += 1         # 出现次数 加一
                    
        print('子字符串在目标字符串中共出现 %d 次' % count)  # 打印子字符串在目标字符串出现的次数

desStr = input('请输入目标字符串:')    # 输入目标字符串
subStr = input('请输入子字符串(两个字符):')   # 输入子字符串
findStr(desStr, subStr)   # 调用findStr
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2022-3-3 00:07:15 | 显示全部楼层    本楼为最佳答案   
def findStr(desStr, subStr):        # 定义一个函数findStr,这个函数接受两个参数:desStr目标字符串、subStr子字符串
    count = 0                       # 用来计算出现次数的变量 count
    length = len(desStr)            # 目标字符串的长度 length
    if subStr not in desStr:        # 如果子字符串subStr不在目标字符串desStr中
        print('在目标字符串中未找到字符串!')  # 输出 '在目标字符串中未找到字符串!'
    else:  # 否则
        for each1 in range(length-1):     # 根据目标字符串的长度产生索引进行循环
            if desStr[each1] == subStr[0]: # 如果目标字符串的第 each1 + 1 (因为索引是从0开始,所以加1)个字符等于 子字符串的第一个字符
                if desStr[each1+1] == subStr[1]: # 如果目标字符串的第 each1 + 2 个字符等于 子字符串的第二个字符
                    count += 1         # 出现次数 加一
                    
        print('子字符串在目标字符串中共出现 %d 次' % count)  # 打印子字符串在目标字符串出现的次数

desStr = input('请输入目标字符串:')    # 输入目标字符串
subStr = input('请输入子字符串(两个字符):')   # 输入子字符串
findStr(desStr, subStr)   # 调用findStr
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2022-3-3 00:13:04 | 显示全部楼层
def findStr(desStr, subStr): #  desStr->母串  subStr->字串
    count = 0
    length = len(desStr) # 获取母串长度,限定查找范围i
    if subStr not in desStr:   # not in 第一步判断 字串 是否在 母串中出现 ; not in 语法不了解建议复习前面
        print('在目标字符串中未找到字符串!')
    else:
        for each1 in range(length-1):      # 前边 length 开始作用,限定查找范围 ,each1表示下标 从0开始 到 length-1
            if desStr[each1] == subStr[0]: # !
                if desStr[each1+1] == subStr[1]: # ! 这两句并不同用 只能在本题使用, 原理是一个个匹配,由于长度只有2,所以判断下标 0 1就好
                    count += 1
                    
        print('子字符串在目标字符串中共出现 %d 次' % count)

desStr = input('请输入目标字符串:')
subStr = input('请输入子字符串(两个字符):')
findStr(desStr, subStr)
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2022-3-3 00:26:54 | 显示全部楼层
这个应该是通用的
def findStr(desStr, subStr):  # desStr->母串  subStr->字串
    count = 0
    length = len(desStr)  # 获取母串长度,限定查找范围i
    if subStr not in desStr:   # not in 第一步判断 字串 是否在 母串中出现 ; not in 语法不了解建议复习前面
        print('在目标字符串中未找到字符串!')
    else:
        # 前边 length 开始作用,限定查找范围 ,each1表示下标 从0开始 到 length-1
        for each1 in range(length-1):
            if desStr[each1] != subStr[0]:  # 第二个条件 位置和字串开头必须一样
                continue
            else:
                for each2 in range(len(subStr)):  # 遍历字串和母串,遇到不一样就停下
                    # print(desStr[each1+each2], each1, each2, end=" ")
                    if desStr[each1+each2] != subStr[each2] or each1+each2 > length:
                        break
                else:  # 如果顺利执行完
                    count += 1
        print('子字符串在目标字符串中共出现 %d 次' % count)


desStr = input('请输入目标字符串:')
subStr = input('请输入子字符串(两个字符):')
findStr(desStr, subStr)
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2022-3-3 01:19:27 | 显示全部楼层
本帖最后由 jackz007 于 2022-3-3 01:21 编辑

      
看不明白,请大佬解释一下每一句代码的含义

        每一句都看不懂,敢问楼主,这是在使唤家奴吗???
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2022-3-3 23:30:54 | 显示全部楼层
jackz007 发表于 2022-3-3 01:19
每一句都看不懂,敢问楼主,这是在使唤家奴吗???

这么大火气??不懂就问,有啥问题?
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2022-3-3 23:37:01 | 显示全部楼层
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

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

本版积分规则

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

GMT+8, 2025-1-12 06:51

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

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