鱼C论坛

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

[已解决]第18讲课后题,动动手代码问题求指点

[复制链接]
发表于 2020-3-10 15:16:32 | 显示全部楼层 |阅读模式

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

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

x

1、编写一个函数 findstr(),该函数统计一个长度为 2 的子字符串在另一个字符串中出现的次数,我写的代码,若第五行用return,则返回值有(),用print,则返回值会多一个NONE,求解这是为什么,以及请指出我这个代码的问题:
def findstr(x,y):
    y = input('请输入目标字符串:')
    x = input('请输入子字符串(两个字符):')
    n = y.count(x)
    return('子字符串在目标字符串中共出现',n,'次')

print(findstr('lo','i love you'))

小甲鱼给出的参考答案没有用count,请问是为什么,是否有什么好处?
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)

一个大问题里的三个小问题,请大神尽量都指点下哈……之前帮忙解答其他问题的热心大神都是一人回答一个小问题,到选最佳答案的时候我就很纠结,为什么只能设一个最佳答案qaq……
最佳答案
2020-3-10 16:40:34
我觉得你是还没理解 return 的含义。return 是一条语句,不用加括号,用于返回指定的值(在函数中)而且不会打印那个值。

而 print() 只是单纯地打印一个值,并不会起到返回值的作用。

如果你把 return 改成 print,则会直接打印字符串。由于你并没有返回任何值,所以会隐式地返回 None 。这时你 print() 出来的就是返回的 None 值。

如果在函数中一定要用 print() ,那把这句话:
print(findstr('lo','i love you'))

改成这样就行了(去掉 print):
findstr('lo','i love you')
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2020-3-10 15:42:41 | 显示全部楼层
本帖最后由 qiuyouzhi 于 2020-3-10 15:44 编辑

1,return是一个语句,不是函数,把括号去掉后用print
2,锻炼动手能力了
就跟算法题一样,人家让你用位运算实现加法,你却直接用+算出结果,道理是一样的
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2020-3-10 16:40:34 | 显示全部楼层    本楼为最佳答案   
我觉得你是还没理解 return 的含义。return 是一条语句,不用加括号,用于返回指定的值(在函数中)而且不会打印那个值。

而 print() 只是单纯地打印一个值,并不会起到返回值的作用。

如果你把 return 改成 print,则会直接打印字符串。由于你并没有返回任何值,所以会隐式地返回 None 。这时你 print() 出来的就是返回的 None 值。

如果在函数中一定要用 print() ,那把这句话:
print(findstr('lo','i love you'))

改成这样就行了(去掉 print):
findstr('lo','i love you')
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2020-3-11 13:11:30 | 显示全部楼层
zltzlt 发表于 2020-3-10 16:40
我觉得你是还没理解 return 的含义。return 是一条语句,不用加括号,用于返回指定的值(在函数中)而且不 ...

明白了,感谢。
还想问下,为什么最后的函数给了参数,跑起来需要重新给参数,而不是直接给答案呢
findstr('lo','i love you')
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2020-3-11 13:12:42 | 显示全部楼层
miusa 发表于 2020-3-11 13:11
明白了,感谢。
还想问下,为什么最后的函数给了参数,跑起来需要重新给参数,而不是直接给答案呢

其实 x、y 参数根本不需要,可以去掉
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2020-3-11 13:33:13 | 显示全部楼层
zltzlt 发表于 2020-3-11 13:12
其实 x、y 参数根本不需要,可以去掉

去掉他就报错了 name x is not defined
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2020-3-11 13:34:00 | 显示全部楼层
miusa 发表于 2020-3-11 13:33
去掉他就报错了 name x is not defined
def findstr():
    y = input('请输入目标字符串:')
    x = input('请输入子字符串(两个字符):')
    n = y.count(x)
    return('子字符串在目标字符串中共出现',n,'次')

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

使用道具 举报

 楼主| 发表于 2020-3-11 22:04:02 | 显示全部楼层

懂了,谢谢大神~
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

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

本版积分规则

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

GMT+8, 2025-1-27 08:45

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

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