输入输入功率仅为2

时间:2015-05-06 21:38:15

标签: python input types

这是一个简单的问题,但我被困住了。

我正在编写一个简单的程序来获取一个输入值,该值是2的一个独特倍数。也就是说,它必须是2^x形式,包括1 2^0=1

因此,唯一有效的输入是1, 2, 4, 8, 16, 32,等。如果用户键入输入3,我的程序将抛出错误。我也限制了从18192(其中8192 = 2**13)的输入。如果用户键入10000-30,则会抛出错误。

这是我到目前为止所拥有的。

def checkValue():
maxValue = 8192
while True:
    try:
        intValue = int(input('Please enter integer: '))
    except ValueError:
        print("Value must be an integer!")
        continue
    else:
        if intValue < 1:
            print("Value cannot be less than 1")
            continue
        elif intValue > 8192: 
            print("Value cannot be greater than 8192")
            continue
        else:
            return("The value is equal to " + str(intValue) )

必须有一种简单的方法来测试输入是2的幂。我不知道如何在我当前的代码中加入这样的测试。由于我只接受14个值作为有效输入(即1和最多2**13的值),或许这是最有效的测试?

任何建议表示赞赏。谢谢。

4 个答案:

答案 0 :(得分:1)

这个怎么样?

def checkValue():
    maxValue = 8192
    while True:
        try:
            intValue = int(input('Please enter integer: '))
        except ValueError:
            print("Value must be an integer!")
            continue
        else:
            if intValue in [1, 2, 4, 8, 16, 32]:
                return("The value is equal to " + str(intValue))
            elif intValue < 1:
                print("Value cannot be less than 1")
                continue
            elif intValue > 8192: 
                print("Value cannot be greater than 8192")
                continue
            else:
                return("Error")

答案 1 :(得分:0)

只需使用基数2的对数来执行此操作,并检查数字是否为完整:

float.is_integer(math.log(x, 2)) # test if number is whole

答案 2 :(得分:0)

如果您检查输入的log2的{​​{1}}是否为整数,该怎么样?

intValue

例如,如果import math if int(math.log2(intValue)) == math.log2(intValue): return("The value is equal to " + str(intValue) ) else: # print error... 为32,则会获得intValue,但对于33,您将获得True

此外,您还可以检查False是否小于或等于13,以满足值小于math.log2(intValue)的其他约束。

答案 3 :(得分:0)

你可以测试:

var str = "Hello, this is a test.";