【问题标题】:How can I; if var is integer then execute我怎样才能;如果 var 是整数,则执行
【发布时间】:2016-10-23 23:24:44
【问题描述】:

我正在尝试创建一个十进制到二进制转换器。用户输入他们的值,金额每次除以 2 并添加到invertedbinary 列表中。然后将金额转换回整数,再次除以二,依此类推。

value = int(input("Please enter the decimal value to be converted to binary."))
    invertedbinary = []
    while value >= 1:
        value = (value/2)
        invertedbinary.append(value)
        value = int(value)
        print (invertedbinary)
    for n,i in enumerate(invertedbinary):
        if i == isinstance(invertedbinary,int):
            invertedbinary[n]=0
        else:
            invertedbinary[n]=1
    print (invertedbinary)

假设我输入了数字十七。这是输出:

[8.5]
[8.5, 4.0]
[8.5, 4.0, 2.0]
[8.5, 4.0, 2.0, 1.0]
[8.5, 4.0, 2.0, 1.0, 0.5]
[1, 1, 1, 1, 1]

所以我们可以从最后一行看出,我的isinstance 尝试没有成功。我想要做的是,如果金额是 anynumber.5 则将其显示为 1,如果是整数则显示为零。所以它应该是[1, 0, 0, 0, 1]。每个浮点值都是一个,整数是零。

我可以用什么来代替is instance 来实现这一点?

对于任何想知道的人,我将其命名为 invertedbinary,因为在打印时 invertedbinary 需要翻转,然后打印为字符串以显示正确的二进制值。

【问题讨论】:

  • 我将其更改为python-3.x,因为这需要int / int 提供float 行为; see this question.
  • 你不想要i == isinstance(invertedBinary,int) 你只想要isinstance(invertedBinary,int) 我很确定......
  • 虽然,实际上并非如此,因为您关心的是数字是否为整数,而不是 int 类型。
  • 无论如何,在这种情况下,您应该使用模数运算符:%

标签: python-3.x binary


【解决方案1】:

您可以随时检查round 值是否等于该值...

if (round(x) == x):
    # x is int
else:
    # x is float/double

【讨论】:

  • 哇!非常感谢。它现在按预期工作!
  • @AugustWilliams 有时,旧的和​​显而易见的效果最好;-)
  • @KenY-N 8.49999999999999999 有什么问题?
  • 我对 Python 还很陌生,所以我不明白您提供的示例 @KenY-N 。但是,在这个特定的程序中,浮点数将始终为 0.5。
  • @KenY-N 但这不是条件。 round(8.4999999) == 8.499999False,所以不会被当作 int 值处理
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2016-11-09
  • 2013-09-04
  • 2021-07-30
  • 1970-01-01
  • 2018-05-14
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多