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 は 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 のChained notationを参照してください。

rootしたがって、そのようなパワーごとroot**pwrに、ユーザーの入力値であるパワーを見つけようとします。

を使用してこれを行う簡単な方法がありmath.logますが、対数が何であるかを知らなくても心配する必要はありません。代わりに、可能な限りすべてを試すことができますroot。いずれかrootが大きすぎる場合、すべての大きなroots も大きすぎます。

1 つの問題を除いて: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=npwr=1は常に解です。nユーザー入力が整数でない場合、コードが発生しますValueError(問題の説明を考えるroot**pwrと、整数のみである可能性があるため、整数以外の入力に対する解決策は存在しません)。

注: if root ** pwr == nthen(-root) ** pwr == nの場合も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 に答える