tiger吴 发表于 2020-5-18 23:22:13

我又来了


#写一个检测文字是否为回文联的函数
str1=input('dhhdh')
def myfun(n):
    lenth=len(n)
    if lenth==1:
      
      print(n,'是回文联')
    if lenth==0:
      print(n,'是回文联')
    if n==n[-1]:
      return myfun(n)
    else:
      print(n,'不是回文联')
   
myfun(str1)

程序报错,index超出范围了

Twilight6 发表于 2020-5-18 23:25:31

本帖最后由 Twilight6 于 2020-5-18 23:34 编辑

因为你这边是print 打印 不会终止代码继续运行导致代码为空字符串时继续下面的代码导致索引出错

Twilight6 发表于 2020-5-18 23:30:09

本帖最后由 Twilight6 于 2020-5-18 23:31 编辑

如果递归到最后为空字符串 就说明 前面所有递归时候你这里的条件都满足
if n == n[-1]:
所以你把代码改成这样即可
str1 = input('dhhdh')

def myfun(n):
    lenth = len(n)
    if lenth == 0:
      return n+'是回文联'
        # 因为你这边是print 打印 不会终止代码继续运行导致代码为空字符串时继续下面的代码导致索引出错
    if n == n[-1]:
      return myfun(n)
    else:
      return n+'不是回文联'
print(mufun(str1))

tiger吴 发表于 2020-5-18 23:31:00

Twilight6 发表于 2020-5-18 23:25
你这样肯定是会超出范围的,像我刚刚那样递归着写才行。前面加行判断n =='' 是否等于空字符串
因为最后一 ...

我写的if lenth==0不就是判断参数是不是空了吗

Twilight6 发表于 2020-5-18 23:32:15

tiger吴 发表于 2020-5-18 23:31
我写的if lenth==0不就是判断参数是不是空了吗

没错,你看下我代码里的注释 要把print改成return

Twilight6 发表于 2020-5-18 23:34:01

tiger吴 发表于 2020-5-18 23:31
我写的if lenth==0不就是判断参数是不是空了吗

我前面第一次说的是错的,后面代码里的解释才是对的 抱歉{:10_266:}

tiger吴 发表于 2020-5-18 23:39:50

Twilight6 发表于 2020-5-18 23:34
我前面第一次说的是错的,后面代码里的解释才是对的 抱歉

感谢,明白的明明白白了,另外判断长度为基数的情况我多余了

Twilight6 发表于 2020-5-18 23:41:00

tiger吴 发表于 2020-5-18 23:39
感谢,明白的明明白白了,另外判断长度为基数的情况我多余了

{:10_256:}欢迎继续提问

tiger吴 发表于 2020-5-19 00:01:29

Twilight6 发表于 2020-5-18 23:41
欢迎继续提问

好嘞
页: [1]
查看完整版本: 我又来了