首页 > 解决方案 > 仅使用布尔和逻辑比较将二进制转换为十进制

问题描述

我正在参加 Python 认证课程,并参加了两次练习考试,为即将安排的定时考试做准备。但是,与教授的互动有限,讨论区主要是学生。我有一个问题在两次练习考试中都出现过,所以我想它也会出现在真正的考试中,我不知道如何解决它。课堂上没有办法看到如何解决你弄错的编码问题,这是一个很大的失望,因为这对我将来有帮助。我知道有用于解决二进制/十进制转换的内置函数,但教授希望使用布尔逻辑和数值比较来完成这项工作,因为我们仍处于课程的早期阶段。如果有人可以帮助“走”过为什么' 我将不胜感激。谢谢你。

数字 = 1101

您可以修改上面的代码行,但不要移动它们!当您提交代码时,我们将更改这些行以将不同的值分配给变量。

上面的数字代表一个二进制数。它始终最多为八位,并且所有八位始终为 1 或 0。

字符串给出数字的二进制表示。在二进制中,该字符串的每个数字对应于 2 的幂。最左边的数字代表 128,然后是 64,然后是 32,然后是 16,然后是 8,然后是 4,然后是 2,最后是最右边的 1。

因此,要将数字转换为十进制数,如果第一位是 1,您希望(例如)将 128 添加到总数中,如果第二位是 1,则添加 64,如果第三位是 1,则添加 32,等等。

例如,00001101 是数字 13:在 128s 位、64s 位、32s 位、16s 位和 2s 位中有一个 0。在 8s、4s 和 1s 的地方有 1s。8 + 4 + 1 = 13。

请注意,虽然我们经常使用“if”来描述这个问题,但这完全可以通过布尔逻辑和数值比较来完成。

打印此转换产生的数字。

标签: python

解决方案


number = "00001101" #in Python, leading zeros are not permitted, so use a string
total = 0 #this var will keep track of the number in decimal form
index = len(number)-1 #eg 1100 has 4 digits and the max power is 3, 2^3.

for str_digit in number: #for each digit (as a string) in the number,
    #total += int(str_digit)* 2**index #add the value (0 or 1) multiplied by 2 raised to the index power
    if int(str_digit): #either 'if 0' or 'if 1'
        total += 2**index #add 2 raised to the index power
    index -= 1 # decrease the index
print(total)

请注意,if int(str_digit):如果您改用注释行,则该行实际上是多余的total += int(str_digit)* 2**index,但我将其包含在内是因为您的问题指定您要测试布尔值。

此行与or 相同if 0:or与orif 1:相同。if False:if True:


推荐阅读