波大大12138 发表于 2020-6-7 11:04:34

程序有什么问题看下


<p>def a(x):
    y=x%2
    temp=[]
    str=''
   
    ifx==0 or x==1:
      temp.append(x)
      str+=str(temp.pop())
      return str
    else:
      temp.append(y)
      a(x//2)

x=int(input('请输入一个正整数:'))
a(x)</p><p>以上程序是我想用递归的方法写十进制转化成二进制的程序不知道哪里有问题一直报错请看一下</p>

波大大12138 发表于 2020-6-7 11:05:39

<p>不知道哪来的不是程序中的

liuzhengyuan 发表于 2020-6-7 11:07:13

不要拿 str 做变量名
不然会和 str 字符串类型重名,就会报错……

波大大12138 发表于 2020-6-7 11:10:17

liuzhengyuan 发表于 2020-6-7 11:07
不要拿 str 做变量名
不然会和 str 字符串类型重名,就会报错……

我把str换成s了,不报错了,但是结果出不来
def a(x):
    y=x%2
    temp=[]
    s=''
   
    ifx==0 or x==1:
      temp.append(x)
      s+=str(temp.pop())
      return s
    else:
      temp.append(y)
      a(x//2)

x=int(input('请输入一个正整数:'))
a(x)

KevinHu 发表于 2020-6-7 11:15:32

波大大12138 发表于 2020-6-7 11:10
我把str换成s了,不报错了,但是结果出不来

最后要用print()把结果打印出来

liuzhengyuan 发表于 2020-6-7 11:16:08

本帖最后由 liuzhengyuan 于 2020-6-7 11:18 编辑

波大大12138 发表于 2020-6-7 11:10
我把str换成s了,不报错了,但是结果出不来

最后要加 print -> print(a(x))
把 s 变成全局变量试试?
第 12 行 加一个 return 试试?return a(x//2)

波大大12138 发表于 2020-6-7 11:21:41

liuzhengyuan 发表于 2020-6-7 11:16
最后要加 print -> print(a(x))
把 s 变成全局变量试试?
第 12 行 加一个 return 试试?return a(x/ ...

加了return,print,全局变量,我输入4只出来一个1

波大大12138 发表于 2020-6-7 11:24:40

KevinHu 发表于 2020-6-7 11:15
最后要用print()把结果打印出来

加了但是显示出来的是错的输入4出来1

Twilight6 发表于 2020-6-7 11:29:12

波大大12138 发表于 2020-6-7 11:24
加了但是显示出来的是错的输入4出来1

temp = []
def a(x):
    y = x % 2
    if x == 0:
      for i in temp[::-1]:
            print(i,end='')
    else:
      temp.append(str(y))
      return a(x // 2)

x = int(input('请输入一个正整数:'))
a(x)

波大大12138 发表于 2020-6-7 11:52:22

Twilight6 发表于 2020-6-7 11:29


我的这个程序该如何改进才能达到理想的效果呢?

Twilight6 发表于 2020-6-7 11:57:23

波大大12138 发表于 2020-6-7 11:52
我的这个程序该如何改进才能达到理想的效果呢?

9 楼发了代码了不是嘛,你看看和你代码差别是在哪

你要记着递归时候你的代码每次都会运行:temp=[]和 s=''

导致每次递归都是加入空的而不是在原有的基础上添加上

波大大12138 发表于 2020-6-7 12:18:51

Twilight6 发表于 2020-6-7 11:57
9 楼发了代码了不是嘛,你看看和你代码差别是在哪

你要记着递归时候你的代码每次都会运行:temp=[]和...

def a(x):
    y=x%2
    s=''
    ifx==0 :
      temp.append(0)
      s+=str(temp.pop())
      return s
    else:
      temp.append(str(y))
      return a(x//2)
temp=[]
x=int(input('请输入一个正整数:'))
print(a(x))

我改了之后还是只出一个

Twilight6 发表于 2020-6-7 12:21:59

波大大12138 发表于 2020-6-7 12:18
我改了之后还是只出一个

你不会复制我的拿去试试看吗?

Twilight6 发表于 2020-6-7 12:23:03

波大大12138 发表于 2020-6-7 12:18
我改了之后还是只出一个

我的代码就是在你的基础上改动的,把没用的去了

波大大12138 发表于 2020-6-7 12:25:24

Twilight6 发表于 2020-6-7 12:23
我的代码就是在你的基础上改动的,把没用的去了

你的和我的在倒序输出那里不一样我是用了一个str来操作的,你没有,你换了一种方法

Twilight6 发表于 2020-6-7 12:29:31

本帖最后由 Twilight6 于 2020-6-7 12:33 编辑

波大大12138 发表于 2020-6-7 12:25
你的和我的在倒序输出那里不一样我是用了一个str来操作的,你没有,你换了一种方法



多余操作一大堆,帮你改了你说又是另一种方法,把多余的去掉叫另一种方法???
def a(x):
    y=x%2
    s=''
    ifx==0 :
      return s
    else:
      temp.append(str(y))
      s += str(temp.pop())
      return a(x//2)+s
temp=[]
x=int(input('请输入一个正整数:'))
print(a(x))

字符串去掉多余操作:
def a(x):
    y=x%2
    s=''
    ifx==0 :
      return s
    else:
      s += str(y)
      return a(x//2)+s
x=int(input('请输入一个正整数:'))
print(a(x))

列表去掉多余操作:
temp = []
def a(x):
    y = x % 2
    if x == 0:
      for i in temp[::-1]:
            print(i,end='')
    else:
      temp.append(str(y))
      return a(x // 2)

x = int(input('请输入一个正整数:'))
a(x)

波大大12138 发表于 2020-6-7 13:20:12

Twilight6 发表于 2020-6-7 12:29
多余操作一大堆,帮你改了你说又是另一种方法,把多余的去掉叫另一种方法???

字符串去掉多余 ...

return a(x//2)+s
这个语句什么意思啊?为什么要加s

Twilight6 发表于 2020-6-7 13:23:10

波大大12138 发表于 2020-6-7 13:20
return a(x//2)+s
这个语句什么意思啊?为什么要加s

每次递归都会把 s 给重新赋值为 ‘’所以要把每次的字符串拼接上在返回
页: [1]
查看完整版本: 程序有什么问题看下