十泉浩 发表于 2020-9-11 15:25:06

python017讲作业十进制转换为二进制

def bin1(x):
    temp2 = []
    while x:
      temp1 = x % 2
      x = x // 2
      temp2.append(temp1)
    temp2 = temp2.reverse()
    result=str(temp2)
    return result
   


甲鱼老师 那个方法我看懂了
我觉得我写的这个好像差不多..
但是很有趣的是
当x=正数时(包括小数)他都会返回None
而x=负数时(包括小数)他不会返回任何东西                而且我的CPU使用一般不超过百分之五,x等于负数时直接飙到百分之二十多(多次验证)
请问大神这是什么原因

十泉浩 发表于 2020-9-11 15:25:43

def Dec2Bin(dec):
    temp = []
    result = ''

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

    while temp:
      result += str(temp.pop())

    return result

print(Dec2Bin(62))
甲鱼老师的

小甲鱼的铁粉 发表于 2020-9-11 15:30:48

这我还是真不知道

十泉浩 发表于 2020-9-11 15:34:44

小甲鱼的铁粉 发表于 2020-9-11 15:30
这我还是真不知道

直接把我干蒙了~

疾风怪盗 发表于 2020-9-11 15:38:28

描述
reverse() 函数用于反向列表中元素。

语法
reverse()方法语法:

list.reverse()
参数
NA。
返回值
该方法没有返回值,但是会对列表的元素进行反向排序。

def bin1(x):
    temp2 = []
    while x:
      temp1 = x % 2
      x = x // 2
      temp2.append(temp1)
    temp2.reverse()
    result = str(temp2)
    return result

print(bin1(14))



输入负数时貌似死循环了

疾风怪盗 发表于 2020-9-11 15:39:23

def bin1(x):
    temp2 = []
    while x:
      temp1 = x % 2
      print(temp1)
      x = x // 2
      print(x)
      temp2.append(temp1)
    temp2.reverse()
    result = str(temp2)
    return result

print(bin1(-14))
运行的时候打印输出看一下就知道了

十泉浩 发表于 2020-9-11 15:49:12

疾风怪盗 发表于 2020-9-11 15:39
运行的时候打印输出看一下就知道了

请问有什么办法能去掉结果中的中括号吗?

十泉浩 发表于 2020-9-11 15:53:03

比如14我的方法运行结果为''   有什么办法能让其变成'1110'吗#后面加点什么东西,类似小甲鱼的pop操作

疾风怪盗 发表于 2020-9-11 15:53:38

十泉浩 发表于 2020-9-11 15:49
请问有什么办法能去掉结果中的中括号吗?

一种就像你写的,str()转为字符串,然后可以切片啊
return result
不过这种方法不建议,用在程序里的时候要特别注意

还有就是列表循环打印出来
def bin1(x):
    temp2 = []
    while x:
      temp1 = x % 2
      x = x // 2
      temp2.append(temp1)
    temp2.reverse()
    return temp2

a=bin1(14)
for i in a:
    print(i,end=' ')

十泉浩 发表于 2020-9-11 15:53:44

我能想到的就只是pop再reserve一下,,,太麻烦了

宋立赢 发表于 2020-9-11 16:23:25

emmm...我试了一下,正数和小数为什么返回none这个问题最佳答案已经说了,就是reverse()方法不返回值,所以你的temp2 = temp2.reverse()的右边是没有值的,也就是说给左边赋值了none,可以这么理解吧。而负数的话,我试了几个数,当x循环到-1时就会陷入死循环,x的值一直是-1跳不出循环,所以说这也可以解释你的cpu使用提高吧,而一直死循环你的bin1函数就没有返回值,所以就啥也没有吧,连none都没返回。当然我只试了几个负数,结论不一定具有普遍性。

十泉浩 发表于 2020-9-11 16:31:33

小总结(以14为例)
0:结果为形式,我的方法即可(注意reserve的用法)
1:结果为1,1,1,0形式可以用切片(把前后两个中括号切掉)
2:结果为1110形式 可以用for i in result再 print(i,end='')
3:结果为'1110'形式用甲鱼老师的pop方法将列表转换为字符串,(必要时可以用reserve翻转一下列表)

十泉浩 发表于 2020-9-11 16:32:42

宋立赢 发表于 2020-9-11 16:23
emmm...我试了一下,正数和小数为什么返回none这个问题最佳答案已经说了,就是reverse()方法不返回值,所以 ...

结论一样哦,谢谢!

十泉浩 发表于 2020-9-11 16:33:33

疾风怪盗 发表于 2020-9-11 15:53
一种就像你写的,str()转为字符串,然后可以切片啊

不过这种方法不建议,用在程序里的时候要特别注意
...

谢谢大哥帮助!
页: [1]
查看完整版本: python017讲作业十进制转换为二进制