鱼C论坛

 找回密码
 立即注册
查看: 858|回复: 17

[已解决]程序有什么问题看下

[复制链接]
发表于 2020-6-7 11:04:34 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能^_^

您需要 登录 才可以下载或查看,没有账号?立即注册

x
<p>def a(x):
    y=x%2
    temp=[]
    str=''
    
    if  x==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>
最佳答案
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=''
    if  x==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=''
    if  x==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)

想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

 楼主| 发表于 2020-6-7 11:05:39 | 显示全部楼层
<p>不知道哪来的不是程序中的
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2020-6-7 11:07:13 | 显示全部楼层
不要拿 str 做变量名
不然会和 str 字符串类型重名,就会报错……
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2020-6-7 11:10:17 | 显示全部楼层
liuzhengyuan 发表于 2020-6-7 11:07
不要拿 str 做变量名
不然会和 str 字符串类型重名,就会报错……

我把str换成s了,不报错了,但是结果出不来
def a(x):
    y=x%2
    temp=[]
    s=''
    
    if  x==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)
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2020-6-7 11:15:32 | 显示全部楼层
波大大12138 发表于 2020-6-7 11:10
我把str换成s了,不报错了,但是结果出不来

最后要用print()把结果打印出来
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 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)
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 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
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2020-6-7 11:24:40 | 显示全部楼层
KevinHu 发表于 2020-6-7 11:15
最后要用print()把结果打印出来

加了但是显示出来的是错的输入4出来1
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 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)
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2020-6-7 11:52:22 | 显示全部楼层

我的这个程序该如何改进才能达到理想的效果呢?
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2020-6-7 11:57:23 | 显示全部楼层
波大大12138 发表于 2020-6-7 11:52
我的这个程序该如何改进才能达到理想的效果呢?

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

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

导致每次递归都是加入空的而不是在原有的基础上添加上
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2020-6-7 12:18:51 | 显示全部楼层
Twilight6 发表于 2020-6-7 11:57
9 楼发了代码了不是嘛,你看看和你代码差别是在哪

你要记着递归时候你的代码每次都会运行:temp=[]和  ...
def a(x):
    y=x%2
    s=''
    if  x==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))
我改了之后还是只出一个
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2020-6-7 12:21:59 | 显示全部楼层
波大大12138 发表于 2020-6-7 12:18
我改了之后还是只出一个

你不会复制我的拿去试试看吗?
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2020-6-7 12:23:03 | 显示全部楼层
波大大12138 发表于 2020-6-7 12:18
我改了之后还是只出一个

我的代码就是在你的基础上改动的,把没用的去了
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2020-6-7 12:25:24 | 显示全部楼层
Twilight6 发表于 2020-6-7 12:23
我的代码就是在你的基础上改动的,把没用的去了

你的和我的在倒序输出那里不一样我是用了一个str来操作的,你没有,你换了一种方法
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 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=''
    if  x==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=''
    if  x==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)

想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2020-6-7 13:20:12 | 显示全部楼层
Twilight6 发表于 2020-6-7 12:29
多余操作一大堆,帮你改了你说又是另一种方法,把多余的去掉叫另一种方法???

字符串去掉多余 ...

return a(x//2)+s
这个语句什么意思啊?为什么要加s
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2020-6-7 13:23:10 | 显示全部楼层
波大大12138 发表于 2020-6-7 13:20
return a(x//2)+s
这个语句什么意思啊?为什么要加s

每次递归都会把 s 给重新赋值为 ‘’  所以要把每次的字符串拼接上在返回
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2025-1-20 20:10

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表