鱼C论坛

 找回密码
 立即注册
查看: 1589|回复: 20

[已解决]十进制变二进制的问题

[复制链接]
发表于 2018-1-23 23:11:47 | 显示全部楼层 |阅读模式

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

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

x
def m(a):
    temp=[]
    c=''
    while a:
        b=a%2
        a=a//2
        temp.append(b)
    reversed(temp)        
    for c in temp:
        print(c,end='')
        
    return c
print(m(789))   
为什么最后显示的数字是10101000111而不是1100010101,求高手解答错在哪里
最佳答案
2018-1-24 22:55:49
本帖最后由 冰封雪舞 于 2018-1-24 22:59 编辑
fan1993423 发表于 2018-1-24 21:22
另外我发现最return temp或者return c似乎都可以。是不是对于for a in b这种,最后return a或者b都可以? ...


如果你是想问为什么用retrun c后,在用print(m(789))后就会多打印一个1的话,我可以回答你,是你的返回值出了问题,这个问题很简单,只要你做几个判断就可以了,首先我们要判断出你主程序的print函数打印出什么了呢(也就是你的程序最后一句print(m(789)))?这里我可以明确告诉你这个print只打印出来一个数字,就是1,这个1就是你的程序最后多出来的那个1,因为你的m()函数返回值是c,而最后一个c的值是1,所以print打印出来一个1,那么前边那些正确答案1100010101是怎么来的呢?那个是你函数里边的print函数打印出来的,也就是for循环里边那个print打印出来的,当你在主程序中调用这个函数时,它会自动的打印出来。其实你要用你的程序里边判断这一点很轻松,你把程序稍微改动下,比如改成下边这个程序你就能看出来了:
def m(a):
    temp=[]
    c=''
    while a:
        b=a%2
        a=a//2
        temp.append(b)
    temp=reversed(temp)        
    for c in temp:
        print('*',c,end='')        
    return c
print(m(789))   
所以你这个程序即使不用return 跟最后print(m(789)),只要单纯执行下m(789)函数,正确答案就打印出来了。
或者你干脆把你m函数里边的print删掉,你就能更明白了,比如:
def m(a):
    temp=[]
    c=''
    while a:
        b=a%2
        a=a//2
        temp.append(b)
    temp=reversed(temp)        
    for c in temp:
        #print('*',c,end='')        
        return c
print(m(789))  
这次你的结果就是单纯的1.明白了吗?
另外我对你不好好看我的回答表示愤慨,每次我都是认真回答,你看看你回复的什么啊!
“你这个是对的,但是我是看的小甲鱼视频,哪个.join我还没学。所以我现在不忙看你这个,我希望的是了解我自己的是在哪里错误”
我的回答里边哪里用到了.join了?这简直是侮辱人,费劲巴拉的认真猜想回答你的提问,最后你都没好好看。这是我最后一次回复你的这个问题了。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2018-1-23 23:33:11 | 显示全部楼层
  1. def m(a):
  2.     temp=[]
  3.     while a:
  4.         b=a%2
  5.         a=a//2
  6.         temp.append(str(b))
  7.     temp.reverse() # 或 temp=reversed(temp)

  8.     return "".join(temp)
  9.    
  10. print(m(789))   
复制代码
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2018-1-24 00:57:14 | 显示全部楼层
使用reverse之后并没有赋值给某个变量,所以相当于没有改变。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2018-1-24 01:01:07 | 显示全部楼层

谢谢,我后面改成了temp=reversed(temp).但是末尾要多显示个1,不知道是怎么回事
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2018-1-24 01:02:53 | 显示全部楼层

主要麻烦你分析一下错误在哪
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2018-1-24 01:09:07 | 显示全部楼层
reversed(temp) 并不是把temp顺序反过来,正确用法应该是 xxx=reversed(temp),然后xxx才是temp的反序,temp排序依然不变,找到这个问题后,就知道你的问题出在哪里了。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2018-1-24 01:10:45 | 显示全部楼层
冰封雪舞 发表于 2018-1-24 01:09
reversed(temp) 并不是把temp顺序反过来,正确用法应该是 xxx=reversed(temp),然后xxx才是temp的反序,temp ...

这个问题我改了,但是现在的问题就是末尾后面老是多个数字1
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2018-1-24 01:17:56 | 显示全部楼层
本帖最后由 fan1993423 于 2018-1-24 01:21 编辑

现在的问题就是这样了,请各位大佬说一下我的错误在哪,上面小伙伴说的reversed内置函数要赋值我已做修改,而不是把其他解法写出来。
I{IE(@@)G7_{)7%%MX%S0(7.png
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2018-1-24 09:22:40 | 显示全部楼层
fan1993423 发表于 2018-1-24 01:17
现在的问题就是这样了,请各位大佬说一下我的错误在哪,上面小伙伴说的reversed内置函数要赋值我已做修改, ...

我测试你的逻辑并没有问题啊
  1. def m(a):
  2.     temp=[]
  3.     while a:
  4.         b=a%2
  5.         a//=2
  6.         temp.append(b)
  7.     temp.reverse()
  8.     for i in temp:
  9.         print(i,end='')
  10.         
  11. m(17)
复制代码


结果
  1. 10001
复制代码
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2018-1-24 10:18:13 | 显示全部楼层
本帖最后由 塔利班 于 2018-1-24 10:21 编辑

你多了一个return c,去掉就OK
而且不用print(m(17))
直接m(17)就Ok
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2018-1-24 10:57:10 | 显示全部楼层
fan1993423 发表于 2018-1-24 01:01
谢谢,我后面改成了temp=reversed(temp).但是末尾要多显示个1,不知道是怎么回事

正确代码给你上了。你能自己分析对比下不?
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2018-1-24 11:29:57 | 显示全部楼层
本帖最后由 冰封雪舞 于 2018-1-24 11:35 编辑
fan1993423 发表于 2018-1-24 01:10
这个问题我改了,但是现在的问题就是末尾后面老是多个数字1


能把你修改后的程序与结果打出来我看看吗?不看你改成什么样子,我无法具体判断你程序的问题,下边是我在你的程序基础上修改的,你看看应该能看明白吧?如果哪里不明白继续提问。
def m(a):
    temp=[]
    c=''
    while a:
        b=a%2
        a=a//2
        temp.append(b)
    temp=reversed(temp)        
    for c in temp:
        print(c,end='')
        
    return temp
m(789)   

======================== RESTART: D:/Python34/测试1.py ========================
1100010101
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 1 反对 0

使用道具 举报

 楼主| 发表于 2018-1-24 21:10:42 | 显示全部楼层
冰封雪舞 发表于 2018-1-24 11:29
能把你修改后的程序与结果打出来我看看吗?不看你改成什么样子,我无法具体判断你程序的问题,下边是我 ...

你这个是对的,但是我是看的小甲鱼视频,哪个.join我还没学。所以我现在不忙看你这个,我希望的是了解我自己的是在哪里错误
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2018-1-24 21:15:06 | 显示全部楼层
塔利班 发表于 2018-1-24 10:18
你多了一个return c,去掉就OK
而且不用print(m(17))
直接m(17)就Ok

谢谢,按你的方法就对了,但是你能告诉我为什么吗?return c为什么加了不行,另外如果只删了return c,用print()的话后面会多个None,现在把return 和print都删了就正常显示了
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2018-1-24 21:18:34 | 显示全部楼层
冰封雪舞 发表于 2018-1-24 11:29
能把你修改后的程序与结果打出来我看看吗?不看你改成什么样子,我无法具体判断你程序的问题,下边是我 ...

恩,这就是我改过的程序,但是如果我用print(m(789))末尾会多个1,直接用m(789)就没问题
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2018-1-24 21:22:33 | 显示全部楼层
冰封雪舞 发表于 2018-1-24 11:29
能把你修改后的程序与结果打出来我看看吗?不看你改成什么样子,我无法具体判断你程序的问题,下边是我 ...

另外我发现最return temp或者return c似乎都可以。是不是对于for a in b这种,最后return a或者b都可以?我是初学者哈,如果问的很低级请见谅
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2018-1-24 21:27:48 | 显示全部楼层
fan1993423 发表于 2018-1-24 21:15
谢谢,按你的方法就对了,但是你能告诉我为什么吗?return c为什么加了不行,另外如果只删了return c,用 ...

你得看C是什么意义,你再返回,c不是你要的目标值,而是变成了
for循环里最后temp轮到最后一位的数字,就是这一位是多的,
你本身又打印了东西,
如果你想用for循环
改成
for i in temp:
        print(i,end='')
此时就不用return c了,这里已经将反转过来的temp每一位进行了显示,
就已经得到最终结果了
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2018-1-24 22:25:20 | 显示全部楼层
fan1993423 发表于 2018-1-24 21:18
恩,这就是我改过的程序,但是如果我用print(m(789))末尾会多个1,直接用m(789)就没问题

你改的程序在哪里?我怎么看不到?
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2018-1-24 22:55:49 | 显示全部楼层    本楼为最佳答案   
本帖最后由 冰封雪舞 于 2018-1-24 22:59 编辑
fan1993423 发表于 2018-1-24 21:22
另外我发现最return temp或者return c似乎都可以。是不是对于for a in b这种,最后return a或者b都可以? ...


如果你是想问为什么用retrun c后,在用print(m(789))后就会多打印一个1的话,我可以回答你,是你的返回值出了问题,这个问题很简单,只要你做几个判断就可以了,首先我们要判断出你主程序的print函数打印出什么了呢(也就是你的程序最后一句print(m(789)))?这里我可以明确告诉你这个print只打印出来一个数字,就是1,这个1就是你的程序最后多出来的那个1,因为你的m()函数返回值是c,而最后一个c的值是1,所以print打印出来一个1,那么前边那些正确答案1100010101是怎么来的呢?那个是你函数里边的print函数打印出来的,也就是for循环里边那个print打印出来的,当你在主程序中调用这个函数时,它会自动的打印出来。其实你要用你的程序里边判断这一点很轻松,你把程序稍微改动下,比如改成下边这个程序你就能看出来了:
def m(a):
    temp=[]
    c=''
    while a:
        b=a%2
        a=a//2
        temp.append(b)
    temp=reversed(temp)        
    for c in temp:
        print('*',c,end='')        
    return c
print(m(789))   
所以你这个程序即使不用return 跟最后print(m(789)),只要单纯执行下m(789)函数,正确答案就打印出来了。
或者你干脆把你m函数里边的print删掉,你就能更明白了,比如:
def m(a):
    temp=[]
    c=''
    while a:
        b=a%2
        a=a//2
        temp.append(b)
    temp=reversed(temp)        
    for c in temp:
        #print('*',c,end='')        
        return c
print(m(789))  
这次你的结果就是单纯的1.明白了吗?
另外我对你不好好看我的回答表示愤慨,每次我都是认真回答,你看看你回复的什么啊!
“你这个是对的,但是我是看的小甲鱼视频,哪个.join我还没学。所以我现在不忙看你这个,我希望的是了解我自己的是在哪里错误”
我的回答里边哪里用到了.join了?这简直是侮辱人,费劲巴拉的认真猜想回答你的提问,最后你都没好好看。这是我最后一次回复你的这个问题了。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2018-1-24 23:41:38 | 显示全部楼层
冰封雪舞 发表于 2018-1-24 22:25
你改的程序在哪里?我怎么看不到?

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

使用道具 举报

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

本版积分规则

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

GMT+8, 2024-4-28 20:54

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

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