2

私は、Python によるコンピューター プログラミングの原則を教える本を読んでいます。ユーザーに整数を入力するように要求し、0 < pwr < 6 で root^pwr がユーザーによって入力された整数に等しくなるように、root と pwr の 2 つの整数を出力するプログラムを作成しますそのような整数のペアが存在しない場合は、その旨のメッセージを出力する必要があります。これが要求することを行うプログラムを書きました。リストの数字で方程式をテストすることについて、1 つだけ質問があります。これが私のコードです:

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]) < x listnum += 1...if...breakを繰り返し繰り返さなくても、5 つのインクリメントすべてについてテストする方法を知りたいです。質問が不明確な場合は、さらに詳しく説明することができます。この正確な問題に関する質問を見たことがありますが、私が持っている特定の質問に明確に答えている人はいないので、質問を再投稿するつもりはありません. 他に何か提案があれば、よろしくお願いします。ありがとう!

4

1 に答える 1

3

あなたが求めていることを行う1つの方法は次のとおりです。

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 では、べき乗ではなく、ビットごとの排他的論理和です。そのため、問題文が を使用したのは奇妙です^

もう 1 つの特徴は、"No combinations ..."に何を入力しても解決策として見つかるためx、が印刷されないことです。pow(x, 1) == x

于 2013-10-27T02:29:27.927 に答える