|
马上注册,结交更多好友,享用更多功能^_^
您需要 登录 才可以下载或查看,没有账号?立即注册
x
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)
# 课后第18讲 灵活即强大
‘ ‘ ‘
上面这道题else语句里面的内容怎么理解?
‘ ‘ ‘
本帖最后由 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[each1] == subStr[0]: # 比较 desStr[each1] 是否与 subStr 的第 1 个字符相同
- if desStr[each1+1] == subStr[1]: # 如果前面的比较相等,再比较 desStr[each1 + 1] 是否与 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[each1] == subStr[0]:
- if desStr[each1+1] == subStr[1]:
- each1 += 1
- count += 1
- each1 += 1
-
- print('子字符串在目标字符串中共出现 %d 次' % count)
- desStr = input('请输入目标字符串:')
- subStr = input('请输入子字符串(两个字符):')
- findStr(desStr, subStr)
复制代码
楼主不妨比较一下看看。
|
|