python - 仅使用布尔和逻辑比较将二进制转换为十进制
问题描述
我正在参加 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”来描述这个问题,但这完全可以通过布尔逻辑和数值比较来完成。
打印此转换产生的数字。
解决方案
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:
推荐阅读
- laravel - 如何用 Eloquent 实现这个复杂的查询?
- javascript - 在JS中如何将字符串类型的十六进制转换为数字?
- python - bash:-c:第 0 行:从 python-os.system 内部运行 linux cmd 时出现意外标记“换行符”附近的语法错误
- javascript - 在 javascript 中创建特定输入(例如 CT10-0001)的正则表达式
- c# - HttpClientFactory BadRequest?
- python - 如何在其中更改 for 循环?
- c# - 我们可以在 C# 的方法中声明一个属性吗?
- java - 从 java 中的 maven /resource 读取 .json (lib: org.json)
- python - 抓取多个位置的谷歌街景图像
- python - 写入以读写模式打开的文件会改变结构