尝试使用while循环将二进制转换为十进制。我做了这么多,但代码似乎只是添加所有输入的1,即1101011 = 5.任何关于我做错的想法?欢呼声。
编辑:要清楚,我知道我可以使用更简单的方法,但得到答案并不重要,试图专门开发一个while循环算法。
import sys
binary = sys.argv[1]
answer = 0
currentDigit = 0
currentPower = len(binary) - 1
while currentPower >= 0:
placeHolder = int(binary[currentDigit])
answer = answer + (placeHolder ** currentPower)
currentDigit += 1
currentPower -= 1
print answer
答案 0 :(得分:1)
第n个地方的1
应代表2 n ,而不是1 n 。
answer = answer + (placeHolder ** currentPower)
^^^^^^^^^^^
this is 1 in your code
希望你能看到要解决的问题。
答案 1 :(得分:0)
如果在shell中使用二进制文件后缀0b
,它将为您提供小数
>>> 0b111
7
int
以外的其他方式:
>>> def my_bin_dec(x):
... return eval("{:s}".format('0b' +x))
...
>>> my_bin_dec('111')
7
注意:
eval
使用起来不安全,但您可以使用ast.literal_eval
答案 2 :(得分:0)
您需要更改:
answer = answer + (placeHolder ** currentPower)
为:
answer = answer + placeHolder * 2 ** currentPower
或更简洁:
answer += placeHolder * 2 ** currentPower
希望这有帮助。
答案 3 :(得分:0)
这是使用while循环执行此操作的另一种方法。这会对运行值执行左移,如果该位为1:
则再加1class User {
private $account;
public function __construct() {
$this->account = new Account();
}
public function getAccount() {
return $this->account;
}
}
使用for循环更简单(也更快):
binary = '11001101101010101'
value = 0
i = 0
while i < len(binary):
value <<= 1 # Shift left 1 bit position. Same as multiplying by 2.
value += (binary[i] == '1')
i += 1
assert value == int(binary, 2)
最后,可以在一行中完成。以代码可读性为代价,这似乎比上面的循环更快:
binary = '11001101101010101'
value = 0
for bit in binary:
value <<= 1
value += (bit == '1')
assert value == int(binary, 2)