使用递增值测试列表的简单方法(Python 2.5.X)

时间:2013-10-27 02:06:12

标签: python increment pow

我正在编写一本通过Python教授计算机编程原理的书。其中一个手指练习要求我:编写一个程序,要求用户输入一个整数并打印两个整数,root和pwr,这样0< pwr< 6和root ^ pwr等于用户输入的整数。如果不存在这样的整数对,它应该打印一条消息。我编写了一个程序来完成这个问题。我只有一个关于用列表的数字测试方程的问题。这是我的代码:

x = int(raw_input('Enter an integer: '))
root = 0
pwr = [1,2,3,4,5]
listnum = 0

for root in range(0, x + 1):  
    while pow(root, pwr[listnum]) < x:
        root += 1
        if pow(root, pwr[listnum]) == x:
                print str(root) + '^' + str(pwr[listnum]) + ' = ' + str(x)
                break
        listnum += 1
        if pow(root, pwr[listnum]) == x:
                print str(root) + '^' + str(pwr[listnum]) + ' = ' + str(x)
                break
        listnum += 1
        if pow(root, pwr[listnum]) == x:
                print str(root) + '^' + str(pwr[listnum]) + ' = ' + str(x)
                break
        listnum += 1
        if pow(root, pwr[listnum]) == x:
                print str(root) + '^' + str(pwr[listnum]) + ' = ' + str(x)
                break
        listnum += 1
        if pow(root, pwr[listnum]) == x:
                print str(root) + '^' + str(pwr[listnum]) + ' = ' + str(x)
                break
        listnum = 0
    if pow(root, pwr[listnum]) == x:
        break
    else:
        print 'No combinations within parameters exist'

我想知道如果测试如果pow(root,pwr [listnum])&lt; x 所有5个增量,无需重复 listnum + = 1 ... if ... break 。如果问题不清楚,我可以尝试详细说明。我已经看到了关于这个确切问题的问题,但是他们都没有明确回答我的具体问题,所以我无意重新提出问题。如果要提出任何其他建议,我们非常感谢。谢谢!

1 个答案:

答案 0 :(得分:3)

这是实现目标的一种方式:

def find(x):
    for root in range(x + 1):
        for pwr in range(1, 6):
            y = pow(root, pwr)
            if y > x:
                break
            if y == x:
                return root, pwr
    return None

x = int(raw_input('Enter an integer: '))
result = find(x)
if result is None:
    print 'No combinations within parameters exist'
else:
    root, pwr = result
    print root, "**", pwr, "=", x

我不确定这是你做的想要的东西。 Python中的^是按位排他 - 或者不是取幂。所以问题陈述使用^

是特殊的

另一个特点是永远不会打印"No combinations ...",因为无论您为x输入什么内容,都会找到pow(x, 1) == x作为解决方案。