【问题标题】:Python - Convert 8 bit binary number to decimalPython - 将 8 位二进制数转换为十进制数
【发布时间】:2018-08-07 22:27:20
【问题描述】:
import math

while True:
    try:
        user_bin = int(input('\nPlease enter binary number: '), 2)
    except ValueError:
        print('Please make sure your number contains digits 0-1 only.')
    else:
        print(user_bin)

我刚刚浏览了这个网站,寻找有关如何完成作业的提示,作业的基础是让用户输入一个 8 位二进制数,然后将其转换为十进制。或者在不符合要求的情况下弹出无效输入错误。上面的代码看起来很有趣,所以我测试了它,我真的不明白代码的哪一部分将二进制转换为十进制。任何有关作业的提示和解释都将不胜感激。

【问题讨论】:

  • int(num, 2) 会给你一个以 2 为基数的十进制数。
  • 作为后续问题,如果输入的数字不是 8 位,是否有一种简单的方法可以让它打印出一条消息?如果我不使用 1 或 0,atm 它只会发出错误。
  • int(num, 2) 从技术上讲不会给你一个以 2 为基数的十进制数。它为您提供一个整数,然后您可以以任何基数打印(默认为 10)。

标签: python


【解决方案1】:

转换二进制的部分是int。来自the documentation

如果给出 base,则 x 必须是字符串、bytesbytearray 实例,表示基数 base 中的整数文字。

这意味着int 接受一个表示整数的字符串,你告诉它它的基数。例如。这里我们给它"11",并告诉它这是基数2,所以它返回十进制整数3

>>> int("11", 2)
3

请注意,在提供 base 参数时,您必须提供一个字符串:

>>> int(11, 2)
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
TypeError: int() can't convert non-string with explicit base

而且你不能使用在给定基数中无效的数字:

>>> int("21", 2)
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
ValueError: invalid literal for int() with base 2: '21'

【讨论】:

  • 如果你不介意我问,我几乎没有使用过 try 和 except 函数。如果输入的数字不是 8 位,添加另一个 ValueError 会很简单吗?
  • 这将非常简单,但鉴于这是一个作业,我会让您考虑一下 8 位数字的外观以及如何检查您的输入是否为 8 位.
猜你喜欢
  • 1970-01-01
  • 2018-06-24
  • 1970-01-01
  • 2014-03-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2019-09-09
  • 1970-01-01
相关资源
最近更新 更多