鱼C论坛

 找回密码
 立即注册
查看: 1695|回复: 22

[已解决]return问题求解

[复制链接]
发表于 2020-6-29 20:54:46 | 显示全部楼层 |阅读模式

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

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

x

def is_palindrome(n, start, end):
    if start > end:
        return 1
    elif n[start] == n[end]:
        return is_palindrome(n, start+1, end-1)
    else:
        return 0

string = input('请输入一串字符串:')
length = len(string) - 1
if is_palindrome(string, 0, length):
    print('%s是回文字符串' % string)
else:
    print('%s不是回文字符串' % string)
   
麻烦问问返回函数的那个return(第二个return)能不能去掉
如果去掉这个return,输入aba显示不是回文字符
有这个return的话,aba就是回文字符
没有想出来这是怎么一回事,麻烦有会的大哥,小姐姐帮忙解答一下,谢谢谢谢
最佳答案
2020-6-29 21:47:50
csuyiqi 发表于 2020-6-29 21:40
咦,这个我是理解了的,但是你看看我上面的那一个,当is_palindrome(aba, 2, 0)时,2>0 return 1.
这时 ...

你理解了,那么你也该理解改成你这样 最后返回的 1 又不是最开始的函数 ,而是你递归重新进入的函数

递归进入的函数的是他的返回值 你只有 return 接受递归 才能接受到他返回的 1

就是 return is_palindrome(n, start+1, end-1) 才能接受他最终返回的 1

而你 :
is_palindrome(n, start+1, end-1)
return 1
是接受不到你最后递归到的 1 的
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

 楼主| 发表于 2020-6-29 20:56:04 | 显示全部楼层
但是偶数的字符的话还是能够正确判断是不是回文字符的
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2020-6-29 21:01:59 | 显示全部楼层

这是什么意思哦
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2020-6-29 21:03:26 | 显示全部楼层
没有那个return的话你怎么返回值呢?
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2020-6-29 21:03:35 | 显示全部楼层
csuyiqi 发表于 2020-6-29 20:56
但是偶数的字符的话还是能够正确判断是不是回文字符的



可以去掉,因为 Python 函数若没有返回值,那么默认函数返回值为 None

而 None 可以看成布尔类型值的  False

两个都是一样的结果  你重新认真的去试试,不要加任何空格
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2020-6-29 21:06:02 | 显示全部楼层
Twilight6 发表于 2020-6-29 21:03
可以去掉,因为 Python 函数若没有返回值,那么默认函数返回值为 None

而 None 可以看成布尔类型 ...

不对啊,我试过了,就是需要return,不过不加空格是什么意思啊
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2020-6-29 21:07:12 | 显示全部楼层
qiuyouzhi 发表于 2020-6-29 21:03
没有那个return的话你怎么返回值呢?

当运行到start > end 的函数的时候不是会返回1嘛
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2020-6-29 21:07:22 | 显示全部楼层
csuyiqi 发表于 2020-6-29 21:06
不对啊,我试过了,就是需要return,不过不加空格是什么意思啊

哈哈哈 看错了 我以为你说第三个 return
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2020-6-29 21:09:29 | 显示全部楼层
Twilight6 发表于 2020-6-29 21:07
哈哈哈 看错了 我以为你说第三个 return

麻烦帮忙看看,而且我把她改成
elif n[start] == n[end]:
        is_palindrome(n, start+1, end-1)
        return 1
也是不行的
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2020-6-29 21:20:54 | 显示全部楼层
csuyiqi 发表于 2020-6-29 21:09
麻烦帮忙看看,而且我把她改成
elif n[start] == n[end]:
        is_palindrome(n, start+1, end-1)
...



不能去掉 因为 你递归 is_palindrome(n, start+1, end-1) 最后返回的结果是另外两个条件的

你如果改成你现在这样,就会导致只要一个字符前后相同都是回文联
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2020-6-29 21:29:36 | 显示全部楼层
Twilight6 发表于 2020-6-29 21:20
不能去掉 因为 你递归 is_palindrome(n, start+1, end-1) 最后返回的结果是另外两个条件的

你如果 ...

没有明白,举个例子,比如说aba这个吧,is_palindrome(aba, 0, 2),然后执行is_palindrome(aba, 1, 1), 然后继续执行is_palindrome(aba, 2, 0),判断start>end,返回1,那么是回文才对啊。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2020-6-29 21:33:29 From FishC Mobile | 显示全部楼层
Twilight6 发表于 2020-6-29 21:03
可以去掉,因为 Python 函数若没有返回值,那么默认函数返回值为 None

而 None 可以看成布尔类型 ...


严格来说,None 更偏向与表示“空”值,
而不同于 False(等价于 0),只是某些方面类似
// 纠错系列
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2020-6-29 21:34:36 | 显示全部楼层
_2_ 发表于 2020-6-29 21:33

严格来说,None 更偏向与表示“空”值,
而不同于 False(等价于 0),只是某些方面类似

我没说等价呀  我的意思就是 None 的bool 的值是 False
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2020-6-29 21:36:43 | 显示全部楼层
csuyiqi 发表于 2020-6-29 21:29
没有明白,举个例子,比如说aba这个吧,is_palindrome(aba, 0, 2),然后执行is_palindrome(aba, 1, 1),  ...

递归过程中 只有第一次遇到的 return 是返回的那个 进入递归的return 和第一次的没有直接关联

而你改成这样:

elif n[start] == n[end]:
        is_palindrome(n, start+1, end-1)
        return 1

不管有没递归 返回的都是 1  所以 只要你 elif 条件成立一次 肯定永远都是回文联
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2020-6-29 21:40:13 | 显示全部楼层
Twilight6 发表于 2020-6-29 21:36
递归过程中 只有第一次遇到的 return 是返回的那个 进入递归的return 和第一次的没有直接关联

而你改 ...

咦,这个我是理解了的,但是你看看我上面的那一个,当is_palindrome(aba, 2, 0)时,2>0 return 1.
这时候也应该返回1 啊
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2020-6-29 21:42:49 | 显示全部楼层
csuyiqi 发表于 2020-6-29 21:40
咦,这个我是理解了的,但是你看看我上面的那一个,当is_palindrome(aba, 2, 0)时,2>0 return 1.
这时 ...

对啊...这个是回文联没毛病吧....有什么问题?
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2020-6-29 21:46:22 | 显示全部楼层
Twilight6 发表于 2020-6-29 21:42
对啊...这个是回文联没毛病吧....有什么问题?

不行啊,你试一下,输入aba,她显示不是回文联
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2020-6-29 21:47:00 From FishC Mobile | 显示全部楼层
Twilight6 发表于 2020-6-29 21:34
我没说等价呀  我的意思就是 None 的bool 的值是 False

吼吼,你还在哈
没事,只是随口一提,知道就好
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2020-6-29 21:47:50 | 显示全部楼层    本楼为最佳答案   
csuyiqi 发表于 2020-6-29 21:40
咦,这个我是理解了的,但是你看看我上面的那一个,当is_palindrome(aba, 2, 0)时,2>0 return 1.
这时 ...

你理解了,那么你也该理解改成你这样 最后返回的 1 又不是最开始的函数 ,而是你递归重新进入的函数

递归进入的函数的是他的返回值 你只有 return 接受递归 才能接受到他返回的 1

就是 return is_palindrome(n, start+1, end-1) 才能接受他最终返回的 1

而你 :
is_palindrome(n, start+1, end-1)
return 1
是接受不到你最后递归到的 1 的
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2020-6-29 21:48:41 | 显示全部楼层
csuyiqi 发表于 2020-6-29 21:46
不行啊,你试一下,输入aba,她显示不是回文联

你代码发我  我都不懂你把代码改成什么样了。。。我怎么测试呢
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

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

本版积分规则

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

GMT+8, 2025-1-20 07:19

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

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