0

我的代码是测试,我试图弄清楚为什么不测试 2 的指数。无论如何,由于某种原因p & ~(p & (p - 1)),解释器不喜欢在 while 循环之前。in = 1

代码:

def getnumber(str):
    num=0
    for i in str:
        zz = ord(i)-48
        if zz<0 or zz>9:
            num=-1
            break
        else:
            num=(num*10)+zz
    return num

def testexp2(p):
    table = {1:1,2:2,4:3,8:4,16:5,32:6,64:7,128:8,256:9}
    if p & ~(p & (p - 1)):
        print "yes"
    else:
        print "no"


in = 1
while in is not -1:
    in = raw_input("> ")
    in = getnumber(in)
    if in>-1:
        testexp2(in)
    else:
        print "\nDone\n\n"
4

2 回答 2

5

几个问题:

  1. in是python中的保留关键字,因此不能将其用作变量名。
  2. while inp is not -1应该是while inp != -1。(我用inp代替in
  3. getnumber函数可以简化为:

代码:

def getnumber(strs):
    num = int(strs)
    return -1 if num < 0 else num
于 2013-08-04T14:12:10.093 回答
3

您不能声明一个名为 的变量in,它是语言的保留字(或关键字),它是一个测试成员资格的运算符。只需在代码中将其重命名为其他名称:

txt = raw_input("> ")
txt = getnumber(txt)
于 2013-08-04T14:07:29.203 回答