我正在编写一本通过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 。如果问题不清楚,我可以尝试详细说明。我已经看到了关于这个确切问题的问题,但是他们都没有明确回答我的具体问题,所以我无意重新提出问题。如果要提出任何其他建议,我们非常感谢。谢谢!
答案 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
作为解决方案。