鱼C论坛

 找回密码
 立即注册
查看: 4050|回复: 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))
小甲鱼最新课程 -> https://ilovefishc.com
回复

使用道具 举报

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

       这条语句
  1. result += str(temp.pop())
复制代码

        是这条语句的简写形式
  1. result = result + str(temp.pop())
复制代码

       而后者是
  1. result = str(temp.pop()) + result
复制代码

       二者之间显然存在着差别。前者是把别的字符串添加到了原来字符串的后面,而后者是把别的字符串添加到了原来字符串的前面。
  1.        a = 'AB'
  2.        b = 'CD'
  3.        a = a + b      # a = 'ABCD'
  4.        a = b + a      # a = 'CDAB'  
复制代码

       代码写的也太不 Pythonic 了吧,我抛砖引玉。。。
  1. def Dec2Bin(dec):
  2.     s = ''
  3.     while dec:
  4.         s , dec = str(dec % 2) + s , dec // 2
  5.     return s

  6. print(Dec2Bin(62))
复制代码

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

  3. print(Dec2Bin(62))
复制代码
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

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

        是这条语句的简写形式

但是
result 当第一次循环的时候是 = '0'的  如果按照 result = result + str(temp()) 的方式  第二次循环 result = ‘01’
而不是 '10'   这个地方我就是没搞懂。。。
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

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

         没错呀,按你说的那种加法,加到最后确实是一个倒序的结果,所以,要按后面那种加法才对。
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

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

我自己加起来是 '0111111   但是  实际是1111110    我就是没搞懂。。。
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

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

  1. 第1次循环 :  result = ''      str(temp()) = '0'     result = str(temp())  + result = '0' + ''     = '0'
  2. 第2次循环 :  result = '0'     str(temp()) = '1'     result = str(temp())  + result = '1' + '0'    = '10'  
  3. 第3次循环 :  result = '10'    str(temp()) = '1'     result = str(temp())  + result = '1' + '10'   = '110'
  4. 第4次循环 :  result = '110'   str(temp()) = '1'     result = str(temp())  + result = '1' + '110'  = '1110'
  5. ......
  6. result = '111110'
复制代码
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

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

result += str(temp())  是  result = result + str(temp()) 的形式  而不是 result = str(temp())  + result
   前面你也给我解释了    这里我没搞懂。。;
小甲鱼最新课程 -> https://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 倒序的结果。
小甲鱼最新课程 -> https://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中的+不一样
前者是数学运算,后者是字符黏在一起
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

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

谢谢  这下懂了。。。
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

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

本版积分规则

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

GMT+8, 2025-6-25 11:57

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

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