这个python程序中的错误是什么?

时间:2015-06-02 14:06:09

标签: python python-2.7 while-loop

我刚刚学习使用python编写代码。我正在尝试编写一个程序,其中给定的整数将给出具有根和功率的输出(范围例如设置为5)。这是代码:

user_input = int (raw_input ('Enter your number: '))
root = 1
pwr = 1
def noint ():
    return 'no intergers were found'

def output ():
    return root, '^', pwr
if user_input < 1:
    print noint ()

elif user_input == 1:
    print output ()

else:
    while root < user_input:
        root = root + 1
        if root == user_input:
            print output()   
        else:
            for power in range(5):
                if root ** power == user_input:
                    pwr = power
                    print output()

现在,如果我尝试25作为输入,输出是: (5,'^',2) (25,'^',2)

但如果我尝试任何素数如7,则输出为:

(7,'^',1)

编码中有什么问题给了我额外的输出(25,'^',2)?

4 个答案:

答案 0 :(得分:2)

你这样做:

while root < user_input:
    root = root + 1
    if root == user_input:
        print output()   

也就是说,对于root == 24,您仍然会进入循环,将其增加到25,然后根据root == user_input进行打印。

答案 1 :(得分:1)

如果您只想要具有最小根值的(根,幂)对,那么:

try:
    while root < user_input:
        root = root + 1
        pwr = 1
        for power in range(5):
            if root ** power == user_input:
                pwr = power
                raise Found
except Found:
    print output()

如果你想要所有(根,电)对,那么:

while root < user_input:
    root = root + 1
    pwr = 1
    for power in range(5):
        if root ** power == user_input:
            pwr = power
            print output()

答案 2 :(得分:1)

问题在于:

    if root == user_input:
        print output()   

root == 25时,您打印output(),但此时pwr2 root起仍为5,所以它打印25 ^ 2。打印pwr后,您必须重置output,甚至更好,使用参数而不是全局变量。

你可以试试这个(实际上,不需要root == user_input基础):

def output(root, pwr):
    return root, '^', pwr

if user_input < 1:
    print noint ()
else:
    for root in range(1, user_input + 1):
        for power in range(5):
            if root ** power == user_input:
                print output(root, power)

答案 3 :(得分:0)

问题出在这一行:

if root == user_input:
    print output()

root达到25时,您正在打印rootpwr,但pwr与之前的匹配相比为2,您有两个选项,将pwr更新为1或在第一场比赛后打破循环(如@Synergist回答)。