鱼C论坛

 找回密码
 立即注册
查看: 2376|回复: 10

[已解决]请问我这段代码是哪里出了问题(零基础学python018讲,第2题)

[复制链接]
发表于 2019-11-8 15:25:49 | 显示全部楼层 |阅读模式

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

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

x
本帖最后由 牛牛pp 于 2019-11-8 15:29 编辑
def findstr(x,y):
    x = input ('请输入目标字符串:')
    y = input ('请输入子字符串(两个字符):')
    n = len(x)
    a = 0
    b = 2
    count = 0
    
    while b <= n:
       singal = x.find(y,a,b)
       if singal != -1:
           count += 1
        a += 1
        b += 1
           
    return count

发不了图片....
最佳答案
2019-11-8 20:35:26
本帖最后由 zltzlt 于 2019-11-8 20:36 编辑

缩进错误:

def findstr(x,y):
    x = input ('请输入目标字符串:')
    y = input ('请输入子字符串(两个字符):')
    n = len(x)
    a = 0
    b = 2
    count = 0
   
    while b <= n:
       singal = x.find(y,a,b)
       if singal != -1:
            count += 1
        a += 1
        b += 1
           
    return count

正确代码:
def findstr():
    x = input ('请输入目标字符串:')
    y = input ('请输入子字符串(两个字符):')
    n = len(x)
    a = 0
    b = 2
    count = 0
    
    while b <= n:
        singal = x.find(y,a,b)
        if singal != -1:
            count += 1
        a += 1
        b += 1
           
    return count

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

使用道具 举报

发表于 2019-11-8 15:39:07 | 显示全部楼层
def findstr():
    x = input ('请输入目标字符串:')
    y = input ('请输入子字符串(两个字符):')
    n = len(x)
    a = 0
    b = 2
    count = 0
   
    while b <= n:
        singal = x.find(y,a,b)
        if singal != -1:
            count += 1
        a += 1
        b += 1
           
    return count
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2019-11-8 15:39:16 | 显示全部楼层
对齐
def findstr(x,y):
    x = input ('请输入目标字符串:')
    y = input ('请输入子字符串(两个字符):')
    n = len(x)
    a = 0
    b = 2
    count = 0
    
    while b <= n:
        singal = x.find(y,a,b)
        if singal != -1:
            count += 1
        a += 1
        b += 1
           
    return count
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2019-11-8 15:43:22 | 显示全部楼层
本帖最后由 jackz007 于 2019-11-8 16:06 编辑
       singal = x.find(y,a,b)     
      这一句,find() 方法为什么要指定 b 选项,每次在 2 个字符中寻找,find() 方法的优势根本得不到充分发挥,如果是这样的话,你完全可以不用 find() 方法,直接按 2 个字符从头到尾循环比较就可以了。

      下面是我写的代码,楼主可以参考一下:
def findstr(x , y):
    a , count = 0 , 0
    while a >= 0 and a <= len(x) - len(y) :
        a = x . find(y , a)
        if a != -1:
            count += 1
            a += len(y)
    return count

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

使用道具 举报

发表于 2019-11-8 16:20:34 | 显示全部楼层
jackz007 发表于 2019-11-8 15:43
这一句,find() 方法为什么要指定 b 选项,每次在 2 个字符中寻找,find() 方法的优势根本得不到充 ...

你直接
def findStr(a,b):
        for i in range(len(a)-len(b)):
                if a[i:i+len(b)]==b:
                        return i
        else:
                return -1
岂不是更好……
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2019-11-8 20:25:37 | 显示全部楼层
除了缩进应该没啥问题,但是太复杂了,没必要find
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2019-11-8 20:35:26 | 显示全部楼层    本楼为最佳答案   
本帖最后由 zltzlt 于 2019-11-8 20:36 编辑

缩进错误:

def findstr(x,y):
    x = input ('请输入目标字符串:')
    y = input ('请输入子字符串(两个字符):')
    n = len(x)
    a = 0
    b = 2
    count = 0
   
    while b <= n:
       singal = x.find(y,a,b)
       if singal != -1:
            count += 1
        a += 1
        b += 1
           
    return count

正确代码:
def findstr():
    x = input ('请输入目标字符串:')
    y = input ('请输入子字符串(两个字符):')
    n = len(x)
    a = 0
    b = 2
    count = 0
    
    while b <= n:
        singal = x.find(y,a,b)
        if singal != -1:
            count += 1
        a += 1
        b += 1
           
    return count

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

使用道具 举报

发表于 2019-11-10 16:27:02 | 显示全部楼层
本帖最后由 zltzlt 于 2019-11-10 17:41 编辑

请删除
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2019-11-10 17:38:51 | 显示全部楼层
zltzlt 发表于 2019-11-8 20:35
缩进错误:

def findstr(x,y):

确实,一不小心就错了。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2019-11-10 17:46:26 | 显示全部楼层
本帖最后由 牛牛pp 于 2019-11-10 17:50 编辑
jackz007 发表于 2019-11-8 15:43
这一句,find() 方法为什么要指定 b 选项,每次在 2 个字符中寻找,find() 方法的优势根本得不到充 ...


思维还没有转变过来,总觉得,要去“找”东西,就想到find(),楼下的那位兄弟的方法挺简洁。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2019-11-10 17:50:40 | 显示全部楼层

多谢指导,没想到还可以这样
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

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

本版积分规则

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

GMT+8, 2025-1-12 18:50

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

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