我有一个 CompSci 问题(可选),别担心,你没有做我的功课 :) 我很难理解这个问题,因为这就是我要做的全部。这是关于对python的相当基本的理解。
我必须创建一个满足这个要求的函数。我不知道为什么问题中有 6 或它意味着什么。
“返回一对整数 'root' 和 'pwr' st 0 < pwr < 6 和 root**pwr = 用户输入。如果没有成对的整数满足这些条件,函数将通知用户。”
就像我说的,它是可选的,所以我希望得到解释,而不是仅仅得到答案。谢谢你们!
您正在寻找一个值,给定一个特定的根,以及 0 到 6 之间的幂,这相当于用户的输入。一个例子是 4 == 2**2 的输入,因此您可能会输出(2, 2)
.
似乎没有任何界限root
。
我是这样读的:
创建一个接受数字作为参数的函数(我假设一个整数,但不清楚)
找到该数字的第 n 个根,其中 n 是 1、2、3、4 或 5 之一。返回 n 和根。
如果找不到合适的根,则显示错误。
为了让你开始:
0 < pwr < 6
… 相当于:
(0 < pwr) and (pwr < 6)
这种0 < pwr < 6
表示法在数学和一些编程语言(包括 Python)中非常常见。有关详细信息,请参阅Wikipedia 上的链式表示法。
因此,对于每个这样的幂,尝试找到一个root
这样的,root**pwr
即用户的输入值。
使用 有一种快速的方法math.log
,但如果您不知道对数是什么,请不要担心。相反,您可以尝试所有可能的root
. 如果 anyroot
太大,那么所有更大root
的 s 也会太大。
除了一个问题:如果user_input
是负数怎么办?因此,您需要找到一种方法来计算所有正数和负数,直到找到绝对值太大的一个。
所以,一个简短的伪代码草图:
def find_root_pwr(user_input):
for every pwr such that 0 < pwr < 6:
for every possible root:
test_value = root**pwr
if it's a match:
return root, pwr
elif abs(test_value) is too big:
break # don't need to check larger roots
else:
# We tried all 5 powers, and no match
raise ValueError('No answer for {}'.format(user_input))
并对其进行测试:
user_input = int(input()) # raw_input if you're on Python 2.x
root, pwr = find_root_pwr(user_input)
print('{} ** {} = {}'.format(root, pwr, user_input))
有关如何编写循环的提示,请参见range
和。itertools.count
您应该能够从这里填写详细信息,或者至少可以进行更具体的后续问题。
其他答案提供了问题描述的解释。这是正输入的可能解决方案:
def find_root_power(n, minpower, maxpower):
for pwr in range(minpower, maxpower + 1): # minpower <= pwr <= maxpower
# find root such that root**pwr == n
f = n ** (1. / pwr) # float
root = int(f + 0.5) # int (per problem statement)
if root**pwr == n:
yield root, pwr # multiple solutions are possible
n = int(raw_input("Input a number:"))
for root, pwr in find_root_power(n, minpower=1, maxpower=5):
print("root: %d pwr: %d" % (root, pwr))
例如,如果用户输入是81
; 输出是:
root: 81 pwr: 1
root: 9 pwr: 2
root: 3 pwr: 4
注意:root=n
,如果是整数,pwr=1
则始终是解。n
如果用户输入不是整数,则代码会引发ValueError
(鉴于问题描述;root**pwr
可能只是整数,因此不存在非整数输入的解决方案)。
注意:如果root ** pwr == n
then 也(-root) ** pwr == n
为 even pwr
。您可以添加:
if root**pwr == n:
yield root, pwr # multiple solutions are possible
if pwr % 2 == 0: # even
yield -root, pwr
包括负根作为解决方案。