这是一个简单的问题,但我被困住了。
我正在编写一个简单的程序来获取一个输入值,该值是2
的一个独特倍数。也就是说,它必须是2^x
形式,包括1
2^0=1
。
因此,唯一有效的输入是1, 2, 4, 8, 16, 32,
等。如果用户键入输入3
,我的程序将抛出错误。我也限制了从1
到8192
(其中8192 = 2**13
)的输入。如果用户键入10000
或-3
或0
,则会抛出错误。
这是我到目前为止所拥有的。
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
的值),或许这是最有效的测试?
任何建议表示赞赏。谢谢。
答案 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.";