陌生的谜语 发表于 2019-2-20 12:25:26

关于第18讲 灵活即强大的问题求助

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

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


# 课后第18讲   灵活即强大
‘ ‘ ‘
上面这道题else语句里面的内容怎么理解?

‘ ‘ ‘

jackz007 发表于 2019-2-20 12:48:01

本帖最后由 jackz007 于 2019-2-20 13:23 编辑

def findStr(desStr, subStr):
    count = 0
    length = len(desStr)
    if subStr not in desStr:                                 # 如果子字符串没有出现在目标字符串当中
      print('在目标字符串中未找到字符串!')                     # 屏幕显示相应信息
    else:                                                      # 否则
      for each1 in range(length-1):                        # 循环,按索引 0 到 len(desStr) - 1 遍历字符串 desStr 中的每 1 个字符。之所以确定范围是 0 ~ len(desStr) - 1 是因为搜索是按照 2 个字符为 1 组进行的,总共需要循环len(desStr) - 1 次   
            if desStr == subStr:                     # 比较 desStr 是否与 subStr 的第 1 个字符相同
                if desStr == subStr:               # 如果前面的比较相等,再比较 desStr 是否与 subStr 的第 2 个字符相同
                  count += 1                                 # 如果前面两个字符比较都相同,那么,计数器加 1
                  
      print('子字符串在目标字符串中共出现 %d 次' % count)      # 搜索完毕,屏显输出计数结果

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

      其实,这个代码是有缺陷的,在极端情况下,例如:desStr = 'aaaaaaaaa' , subStr = 'aa' 的时候,这个代码给出的结果将是错误的。因为在没有找到 subStr 的情况下,each1 每次循环增 1 是正确的,但是,如果找到了,那么,增加的值显然应该是 2,而不应该还是 1。

      所以,原代码应该这么改:
def findStr(desStr, subStr):
    count = 0
    length = len(desStr)
    if subStr not in desStr:
      print('在目标字符串中未找到字符串!')
    else:
      each1 = 0
      while(each1 < length - 1):
            if desStr == subStr:
                if desStr == subStr:
                  each1 += 1
                  count += 1
            each1 += 1
                  
      print('子字符串在目标字符串中共出现 %d 次' % count)

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

   楼主不妨比较一下看看。

前路 发表于 2019-2-20 12:53:19

for each1 in range(length-1):      
    if desStr == subStr:
      if desStr == subStr:
            count += 1
具体如下:
1,用循环控制 遍历整个目标字符串;
2,由于需要到比对的子串是两个;
3,if desStr == subStr: 用if来判断子串的第一个在目标串的位置
4,在子串第一个成功的情况下再用 if desStr == subStr来判断子串的第二个是不是在目标串中紧跟其后的
页: [1]
查看完整版本: 关于第18讲 灵活即强大的问题求助