csuyiqi 发表于 2020-6-29 20:54:46

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就是回文字符
没有想出来这是怎么一回事,麻烦有会的大哥,小姐姐帮忙解答一下,谢谢谢谢

csuyiqi 发表于 2020-6-29 20:56:04

但是偶数的字符的话还是能够正确判断是不是回文字符的

csuyiqi 发表于 2020-6-29 21:01:59

杜思政 发表于 2020-6-29 20:55
:victory:;P:kiss:

这是什么意思哦

qiuyouzhi 发表于 2020-6-29 21:03:26

没有那个return的话你怎么返回值呢?

Twilight6 发表于 2020-6-29 21:03:35

csuyiqi 发表于 2020-6-29 20:56
但是偶数的字符的话还是能够正确判断是不是回文字符的



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

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

两个都是一样的结果你重新认真的去试试,不要加任何空格

csuyiqi 发表于 2020-6-29 21:06:02

Twilight6 发表于 2020-6-29 21:03
可以去掉,因为 Python 函数若没有返回值,那么默认函数返回值为 None

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

不对啊,我试过了,就是需要return,不过不加空格是什么意思啊

csuyiqi 发表于 2020-6-29 21:07:12

qiuyouzhi 发表于 2020-6-29 21:03
没有那个return的话你怎么返回值呢?

当运行到start > end 的函数的时候不是会返回1嘛

Twilight6 发表于 2020-6-29 21:07:22

csuyiqi 发表于 2020-6-29 21:06
不对啊,我试过了,就是需要return,不过不加空格是什么意思啊

哈哈哈 看错了 我以为你说第三个 return

csuyiqi 发表于 2020-6-29 21:09:29

Twilight6 发表于 2020-6-29 21:07
哈哈哈 看错了 我以为你说第三个 return

麻烦帮忙看看,而且我把她改成
elif n == n:
      is_palindrome(n, start+1, end-1)
      return 1
也是不行的

Twilight6 发表于 2020-6-29 21:20:54

csuyiqi 发表于 2020-6-29 21:09
麻烦帮忙看看,而且我把她改成
elif n == n:
      is_palindrome(n, start+1, end-1)
...



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

你如果改成你现在这样,就会导致只要一个字符前后相同都是回文联

csuyiqi 发表于 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,那么是回文才对啊。

_2_ 发表于 2020-6-29 21:33:29

Twilight6 发表于 2020-6-29 21:03
可以去掉,因为 Python 函数若没有返回值,那么默认函数返回值为 None

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


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

Twilight6 发表于 2020-6-29 21:34:36

_2_ 发表于 2020-6-29 21:33

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


我没说等价呀我的意思就是 None 的bool 的值是 False

Twilight6 发表于 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 == n:
      is_palindrome(n, start+1, end-1)
      return 1

不管有没递归 返回的都是 1所以 只要你 elif 条件成立一次 肯定永远都是回文联

csuyiqi 发表于 2020-6-29 21:40:13

Twilight6 发表于 2020-6-29 21:36
递归过程中 只有第一次遇到的 return 是返回的那个 进入递归的return 和第一次的没有直接关联

而你改 ...

咦,这个我是理解了的,但是你看看我上面的那一个,当is_palindrome(aba, 2, 0)时,2>0 return 1.
这时候也应该返回1 啊

Twilight6 发表于 2020-6-29 21:42:49

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

对啊...这个是回文联没毛病吧....有什么问题?

csuyiqi 发表于 2020-6-29 21:46:22

Twilight6 发表于 2020-6-29 21:42
对啊...这个是回文联没毛病吧....有什么问题?

不行啊,你试一下,输入aba,她显示不是回文联

_2_ 发表于 2020-6-29 21:47:00

Twilight6 发表于 2020-6-29 21:34
我没说等价呀我的意思就是 None 的bool 的值是 False

吼吼,你还在哈{:10_245:}
没事,只是随口一提,知道就好

Twilight6 发表于 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 的

Twilight6 发表于 2020-6-29 21:48:41

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

你代码发我我都不懂你把代码改成什么样了。。。我怎么测试呢
页: [1] 2
查看完整版本: return问题求解