fjsboy 发表于 2022-10-13 22:26:13

result += str(temp.pop())

关于这道作业,
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))

jackz007 发表于 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))

fjsboy 发表于 2022-10-13 22:57:27

jackz007 发表于 2022-10-13 22:32
这条语句

      是这条语句的简写形式


但是
result 当第一次循环的时候是 = '0'的如果按照 result = result + str(temp()) 的方式第二次循环 result = ‘01’
而不是 '10'   这个地方我就是没搞懂。。。

jackz007 发表于 2022-10-13 23:01:14

fjsboy 发表于 2022-10-13 22:57
但是
result 当第一次循环的时候是 = '0'的如果按照 result = result + str(temp()) 的方式第二次 ...

         没错呀,按你说的那种加法,加到最后确实是一个倒序的结果,所以,要按后面那种加法才对。

fjsboy 发表于 2022-10-13 23:02:19

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

我自己加起来是 '0111111   但是实际是1111110    我就是没搞懂。。。

jackz007 发表于 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'

fjsboy 发表于 2022-10-13 23:15:46

jackz007 发表于 2022-10-13 23:11


result += str(temp())是result = result + str(temp()) 的形式而不是 result = str(temp())+ result
前面你也给我解释了    这里我没搞懂。。;

jackz007 发表于 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 倒序的结果。

jcpython2 发表于 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中的+不一样
前者是数学运算,后者是字符黏在一起

fjsboy 发表于 2022-10-17 22:44:21

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

谢谢这下懂了。。。
页: [1]
查看完整版本: result += str(temp.pop())