鱼C论坛

 找回密码
 立即注册
查看: 3022|回复: 9

result += str(temp.pop())

[复制链接]
发表于 2022-10-13 22:26:13 | 显示全部楼层 |阅读模式

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

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

x
关于这道作业,
def Dec2Bin(dec):
        temp = []
        result = ''

        while dec:
            quo = dec % 2
            dec = dec // 2
            temp.append(quo)

        while temp:
            result += str(temp.pop())  # result = str(temp.pop()) + result   为什么结果就不一样。。。。   这两个意思应该是一样的啊,,,,求大神解答。。。。

        return result

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

使用道具 举报

发表于 2022-10-13 22:32:50 | 显示全部楼层
本帖最后由 jackz007 于 2022-10-13 22:57 编辑

       这条语句
result += str(temp.pop())
        是这条语句的简写形式
result = result + str(temp.pop()) 
       而后者是
result = str(temp.pop()) + result 
       二者之间显然存在着差别。前者是把别的字符串添加到了原来字符串的后面,而后者是把别的字符串添加到了原来字符串的前面。
       a = 'AB'
       b = 'CD'
       a = a + b      # a = 'ABCD'
       a = b + a      # a = 'CDAB'  
       代码写的也太不 Pythonic 了吧,我抛砖引玉。。。
def Dec2Bin(dec):
    s = ''
    while dec:
        s , dec = str(dec % 2) + s , dec // 2
    return s

print(Dec2Bin(62))
      递归函数版
def Dec2Bin(dec) : 
    return Dec2Bin(dec // 2) + str(dec % 2) if dec else ''

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

使用道具 举报

 楼主| 发表于 2022-10-13 22:57:27 | 显示全部楼层
jackz007 发表于 2022-10-13 22:32
这条语句

        是这条语句的简写形式

但是
result 当第一次循环的时候是 = '0'的  如果按照 result = result + str(temp()) 的方式  第二次循环 result = ‘01’
而不是 '10'   这个地方我就是没搞懂。。。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2022-10-13 23:01:14 | 显示全部楼层
fjsboy 发表于 2022-10-13 22:57
但是
result 当第一次循环的时候是 = '0'的  如果按照 result = result + str(temp()) 的方式  第二次 ...

         没错呀,按你说的那种加法,加到最后确实是一个倒序的结果,所以,要按后面那种加法才对。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2022-10-13 23:02:19 | 显示全部楼层
jackz007 发表于 2022-10-13 23:01
没错呀,按你说的那种加法,加到最后确实是一个倒序的结果,所以,要按后面那种加法才对。

我自己加起来是 '0111111   但是  实际是1111110    我就是没搞懂。。。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2022-10-13 23:11:02 | 显示全部楼层
本帖最后由 jackz007 于 2022-10-13 23:13 编辑
fjsboy 发表于 2022-10-13 23:02
我自己加起来是 '0111111   但是  实际是1111110    我就是没搞懂。。。

第1次循环 :  result = ''      str(temp()) = '0'     result = str(temp())  + result = '0' + ''     = '0'
第2次循环 :  result = '0'     str(temp()) = '1'     result = str(temp())  + result = '1' + '0'    = '10'  
第3次循环 :  result = '10'    str(temp()) = '1'     result = str(temp())  + result = '1' + '10'   = '110'
第4次循环 :  result = '110'   str(temp()) = '1'     result = str(temp())  + result = '1' + '110'  = '1110'
......
result = '111110'
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2022-10-13 23:15:46 | 显示全部楼层

result += str(temp())  是  result = result + str(temp()) 的形式  而不是 result = str(temp())  + result
   前面你也给我解释了    这里我没搞懂。。;
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2022-10-13 23:17:20 | 显示全部楼层
本帖最后由 jackz007 于 2022-10-13 23:21 编辑
fjsboy 发表于 2022-10-13 23:15
result += str(temp())  是  result = result + str(temp()) 的形式  而不是 result = str(temp())  + re ...


         是的,实际上就是 a = a + b 还是 a = b + a 的区别,采用后者才是正确的,不过,Python 的字符串倒序超级简单,result[::-1] 就是 result 倒序的结果。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2022-10-17 10:42:01 | 显示全部楼层
你的代码具体我不太懂,但你说一样的那部分是不一样的,你的str用+是连接,不是运算,比如数学1+2=3 但str字符连接1+2=12

你的 result += str(temp.pop()) 实际是 result =result + str(temp.pop())  而不是 str(temp.pop()) + result


int中的+ 和str中的+不一样
前者是数学运算,后者是字符黏在一起
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2022-10-17 22:44:21 | 显示全部楼层
jcpython2 发表于 2022-10-17 10:42
你的代码具体我不太懂,但你说一样的那部分是不一样的,你的str用+是连接,不是运算,比如数学1+2=3 但str ...

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

使用道具 举报

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

本版积分规则

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

GMT+8, 2024-9-26 01:28

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

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