king紫枫free 发表于 2018-11-21 18:31:17

求助:字符串存储不了

如下代码,用列表进行存储能够计算出来,但是用字符串进行存储就出不来,求大神指点
result = []

def sze2(x):
    if x > 1:
      sze2(x // 2)
      return result.append(x%2)
    elif x ==1 or x ==0 :
      return( result.append(x))

sze2(1689)
print(result)



result = ''

def sze2(x):
    if x > 1:
      sze2(x // 2)
      return result + str(x%2)
    elif x ==1 or x ==0 :
      return( result +str(x))

sze2(1689)
print(result)

塔利班 发表于 2018-11-21 18:51:25

result = ''

def sze2(x):
    global result
    if x > 1:
      sze2(x // 2)
      result +=str(x%2)
    elif x ==1 or x ==0 :
      result += str(x)

sze2(1689)
print(result)

heidern0612 发表于 2018-11-21 19:05:12

本帖最后由 heidern0612 于 2018-11-21 19:32 编辑

1、牵扯到字符串和列表储存的机制不同,列表可以做的不代表字符串可以做大, 但这不是主要理由……

2、楼上的大神解释的很清楚,你函数内部的result没定义,这个result跟外面的result虽然标签一样,但是内存的位置不一样,简单来说就是不是一个东西。

3、最主要原因是:你这个是+,而不是+= 的话,算到最后result也是个默认的空值,不信你可以试试把楼上大神代码改一下,把+=改成+,试试看,结果一样还是什么都没有。

就因为你每次没有把上次的结果加进来,result没有自增上次结果的话,算到最后也是个空。

简单给你分析下:


result = ''

def sze2(x):
    global result
    if x > 1:
      sze2(x // 2)                        #首次循环,假定x为10,这里值为sze2(5);二次循环x为5,sze2(2);三次循环x为2,sze2(1);……
      result +str(x%2)                #空+str(0) ;二次循环,空+str(1);三次循环,空+str(0);……
                                                #到这看出来了吗?你的字符串始终都是默认的空值,并没有加起来,所以你下面无论打印什么,字符串都是空,就是这个原因。
    elif x ==1 or x ==0 :
      result + str(x)

sze2(10)
print(result)

king紫枫free 发表于 2018-11-22 12:23:07

塔利班 发表于 2018-11-21 18:51


谢谢大佬
页: [1]
查看完整版本: 求助:字符串存储不了