0

我有一个 CompSci 问题(可选),别担心,你没有做我的功课 :) 我很难理解这个问题,因为这就是我要做的全部。这是关于对python的相当基本的理解。

我必须创建一个满足这个要求的函数。我不知道为什么问题中有 6 或它意味着什么。

“返回一对整数 'root' 和 'pwr' st 0 < pwr < 6 和 root**pwr = 用户输入。如果没有成对的整数满足这些条件,函数将通知用户。”

就像我说的,它是可选的,所以我希望得到解释,而不是仅仅得到答案。谢谢你们!

4

4 回答 4

2

您正在寻找一个值,给定一个特定的根,以及 0 到 6 之间的幂,这相当于用户的输入。一个例子是 4 == 2**2 的输入,因此您可能会输出(2, 2).

似乎没有任何界限root

于 2013-03-05T02:10:41.017 回答
2

我是这样读的:

  1. 创建一个接受数字作为参数的函数(我假设一个整数,但不清楚)

  2. 找到该数字的第 n 个根,其中 n 是 1、2、3、4 或 5 之一。返回 n 和根。

  3. 如果找不到合适的根,则显示错误。

于 2013-03-05T02:12:25.797 回答
1

为了让你开始:

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您应该能够从这里填写详细信息,或者至少可以进行更具体的后续问题。

于 2013-03-05T02:27:09.443 回答
0

其他答案提供了问题描述的解释。这是正输入的可能解决方案:

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 == nthen 也(-root) ** pwr == n为 even pwr。您可以添加:

  if root**pwr == n:
      yield root, pwr # multiple solutions are possible
      if pwr % 2 == 0: # even
          yield -root, pwr

包括负根作为解决方案。

于 2013-03-05T03:39:02.007 回答