return问题求解
def is_palindrome(n, start, end):
if start > end:
return 1
elif n == n:
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 20:55
:victory:;P:kiss:
这是什么意思哦 没有那个return的话你怎么返回值呢? csuyiqi 发表于 2020-6-29 20:56
但是偶数的字符的话还是能够正确判断是不是回文字符的
可以去掉,因为 Python 函数若没有返回值,那么默认函数返回值为 None
而 None 可以看成布尔类型值的False
两个都是一样的结果你重新认真的去试试,不要加任何空格
Twilight6 发表于 2020-6-29 21:03
可以去掉,因为 Python 函数若没有返回值,那么默认函数返回值为 None
而 None 可以看成布尔类型 ...
不对啊,我试过了,就是需要return,不过不加空格是什么意思啊
qiuyouzhi 发表于 2020-6-29 21:03
没有那个return的话你怎么返回值呢?
当运行到start > end 的函数的时候不是会返回1嘛 csuyiqi 发表于 2020-6-29 21:06
不对啊,我试过了,就是需要return,不过不加空格是什么意思啊
哈哈哈 看错了 我以为你说第三个 return Twilight6 发表于 2020-6-29 21:07
哈哈哈 看错了 我以为你说第三个 return
麻烦帮忙看看,而且我把她改成
elif n == n:
is_palindrome(n, start+1, end-1)
return 1
也是不行的 csuyiqi 发表于 2020-6-29 21:09
麻烦帮忙看看,而且我把她改成
elif n == n:
is_palindrome(n, start+1, end-1)
...
不能去掉 因为 你递归 is_palindrome(n, start+1, end-1) 最后返回的结果是另外两个条件的
你如果改成你现在这样,就会导致只要一个字符前后相同都是回文联 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,那么是回文才对啊。
Twilight6 发表于 2020-6-29 21:03
可以去掉,因为 Python 函数若没有返回值,那么默认函数返回值为 None
而 None 可以看成布尔类型 ...
额
严格来说,None 更偏向与表示“空”值,
而不同于 False(等价于 0),只是某些方面类似
// 纠错系列 _2_ 发表于 2020-6-29 21:33
额
严格来说,None 更偏向与表示“空”值,
而不同于 False(等价于 0),只是某些方面类似
我没说等价呀我的意思就是 None 的bool 的值是 False csuyiqi 发表于 2020-6-29 21:29
没有明白,举个例子,比如说aba这个吧,is_palindrome(aba, 0, 2),然后执行is_palindrome(aba, 1, 1),...
递归过程中 只有第一次遇到的 return 是返回的那个 进入递归的return 和第一次的没有直接关联
而你改成这样:
elif n == n:
is_palindrome(n, start+1, end-1)
return 1
不管有没递归 返回的都是 1所以 只要你 elif 条件成立一次 肯定永远都是回文联
Twilight6 发表于 2020-6-29 21:36
递归过程中 只有第一次遇到的 return 是返回的那个 进入递归的return 和第一次的没有直接关联
而你改 ...
咦,这个我是理解了的,但是你看看我上面的那一个,当is_palindrome(aba, 2, 0)时,2>0 return 1.
这时候也应该返回1 啊 csuyiqi 发表于 2020-6-29 21:40
咦,这个我是理解了的,但是你看看我上面的那一个,当is_palindrome(aba, 2, 0)时,2>0 return 1.
这时 ...
对啊...这个是回文联没毛病吧....有什么问题? Twilight6 发表于 2020-6-29 21:42
对啊...这个是回文联没毛病吧....有什么问题?
不行啊,你试一下,输入aba,她显示不是回文联 Twilight6 发表于 2020-6-29 21:34
我没说等价呀我的意思就是 None 的bool 的值是 False
吼吼,你还在哈{:10_245:}
没事,只是随口一提,知道就好 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 的 csuyiqi 发表于 2020-6-29 21:46
不行啊,你试一下,输入aba,她显示不是回文联
你代码发我我都不懂你把代码改成什么样了。。。我怎么测试呢
页:
[1]
2