2016-09-16 20 views
2

オンラインでこの練習問題を教科書で見つけ出し、自分のやり方で戦うことを試みています。私は彼らがwhileループで答えられるように意図していると信じていますが、代わりにforループを使用していますが、これは私の問題です。初心者のためのPython:For Loop-後で行うこと

「0 < PWR < 6及びルート** PWRは、ユーザによって入力された整数に等しくなるよう整数を入力するようにユーザを促し、二つの整数PWRルートを返すプログラムを書く。もし整数のそのようなペアが存在しない、それは「そのような整数が存在しない。」印刷する必要があります

どのようにしていると言う、どの#Sが基準を満たすかどうかを確認するためにテストし、どれもあれば行うことができますか?

u_i = int(input("input a #:")) 
root = u_i**.5 

for pwr in range(1,6): 
    ans = root**pwr 

    if ans == u_i: 
     print(pwr) 
     print(int(root)) 
#here is where the problem comes in as it will do this every time and I'm\ failing to discover what I should do instead. 
if ans!= u_i: 
    print("No such integer exists") 

全開示:それは長い時間でした私の最後の数学授業以来、私は私の "解決策"が質問が何を求めているのか正しいと確信していません。私は、私が直面するジレンマを解決することにもっと興味を持っていますが、私はループを適切に使用して周りを包み込みたいと思っています。

+0

あなたはちょうど答えが見つかった直後に 'break'(Pythonコードと文字どおり:)が必要です。ループは常に最高値で終了し、最新のテストは偽である可能性があります。 –

+0

プログラムは '64'に対して何を返すべきですか? '4 ** 3'または' 8 ** 2'?単なる好奇心から。 – Rockybilly

+1

精度を失うことにも注意してください。 '(2 ** 5)** 2 = 2.0000000000000004'となります。基本的には、一度ルートを平方根にしてから元に戻すと、それは実数ではないかもしれません。 – MooingRawr

答えて

3

のような整数rootがあるかどうかを確認する必要があります。少しの計算で、上記の文をroot = user_input ** (1./pwr)と書き直すことができます。あなたはかなり小さい数のpwr値を選択できます。したがって、それらの値をループするだけで済みます(既にその部分が分かっているように見えます)。最後に行う必要があるのは、pwrの場合、rootが整数であるかどうかを確認することです。root % 1 == 0またはint(root) == rootを使用できます。

「ファンシー」にしたい場合は、pythonのfor ... else構文を使用できます。 forループ内のブロックelseは、ループが途切れることなく終了した場合にのみ実行されます。たとえば、次のように

def has_dogs(pets): 
    # This functions check to see if "dog" is one of the pets 
    for p in pets: 
     if p == "dog": 
      print "found a dog!" 
      break 
    else: 
     # This block only gets run if the loop finishes 
     # without hitting "break" 
     print "did not find any dogs :(" 

のための...他構文はこれを行うには空想の方法基本的にはこの程度

def has_dogs(pets): 
    # This functions check to see if "dog" is one of the pets 
    dog_found = False 
    for p in pets: 
     if p == "dog": 
      print "found a dog!" 
      dog_found = True 
      break 
    if not dog_found: 
     print "did not find any dogs :(" 
+1

と私はその質問について何かを学ぶことはないと思った!有用。 –

+0

それはすべて役に立ちました!ありがとうございました! – ovidnine

+1

@Ovidnine btw、任意の 'root ** 1 == root'、そのことを念頭に置いてください。 –

-1

どのように?ここで

userNum = int(input("Choose a number: ")) 

for i in range(1,6): 
    for j in range(userNum): 
    if j ** i == userNum: 
     pwr = i 
     root = j 

if pwr: 
    print('pwr = {}, root = {}'.format(pwr, root)) 
print("No such integers exist.") 
0

は、それがより効率的にするためにBiRicoのfor..else戦略と内側whileループ@使用して私のソリューションです。もちろん、には境界がなく、1つの解決策しか探していないため、簡単なケース(root = number, pwr = 1)しか見つけられません。

number = int(input("Choose a number: ")) 

for pwr in range(1,6): 
    root = 1 
    guess = root ** pwr 
    # We can stop guessing once it's too big 
    while guess < number: 
     root += 1 
     guess = root ** pwr 
    if guess == number: 
     print('root = {}, pwr = {}'.format(root, pwr)) 
     break 
else: # nobreak 
    print('No such integers exist') 
関連する問題