2013-03-05 20 views
0

我有一個CompSci問題(可選),不要擔心,你沒有做我的作業:)我有一個相當不可能的時間來理解這個問題,因爲這是我必須繼續。這是對python的一個相當基本的理解。設想簡單的Python作業

我必須創建一個滿足此要求的函數。我不知道爲什麼問題中有6個或它表示什麼。

「返回一對整數‘根’和‘PWR’S.T. 0 < PWR < 6和根** PWR =用戶輸入。 如果沒有對整數滿足這些條件,該函數將通知用戶。」

就像我說的那樣,它是可選的,所以不僅僅是得到我希望得到解答的答案。謝謝你們!

+0

「這樣,0小於pwr且pwr小於6 ...」 – 2013-03-05 02:09:47

+0

該任務是編寫一個小程序,它接受用戶輸入並返回兩個數字'a'和'b'。 'a'必須大於零且小於6,'b'的大小必須與用戶提供的值完全相同。 – 2013-03-05 02:10:52

+0

如果你知道指數運算是如何工作的,你總是可以爲任何積分的'user_input'返回user_input,1'。我不認爲這是你的老師想要的,但是如果你能解釋它爲什麼會起作用並證明它,那麼他可能會感到尷尬,以至於他沒有意識到這會給你額外的信用。 :) – abarnert 2013-03-05 02:41:37

回答

2

您正在尋找一個值,給定一個特定的根,以及一個0到6之間的獨佔權,這相當於用戶的輸入。一個例子是4 == 2 ** 2的輸入,因此您可能會輸出(2, 2)

root上似乎沒有任何界限。

+0

當然還有'4 == 4 ** 1'和'4 == -2 ** 2'。幸運的是,這個問題似乎表明任何有效的答案都是可以接受的,而不是一個特定的答案,或者所有答案。 – abarnert 2013-03-05 02:43:04

2

這是我讀它:

  1. 創建一個接受一個數字作爲自變量的函數(我假設一個整數,但目前尚不清楚)

  2. 找到次方根其中n是1,2,3,4或5中的一個。返回n和根。

  3. 如果找不到合適的根,會顯示錯誤。

+0

#1的好處。如果用戶輸入一個非整數浮點,顯然永遠不會有匹配(因爲如果'root'和'pwr'是整數,'pwr'是正數,'root ** pwr'是一個整數),但也許它應該嘗試和失敗,而不是引發'ValueError' ... – abarnert 2013-03-05 02:28:32

1

爲了讓你開始:

0 < pwr < 6 

...相當於:

(0 < pwr) and (pwr < 6) 

0 < pwr < 6符號是數學中很常見,而在一些編程語言(包括Python) 。詳情請參閱維基百科的Chained notation

因此,對於每個這樣的電源,嘗試找到一個root,使得root**pwr是用戶的輸入值。

有一個快速的方法來使用math.log來做到這一點,但如果你不知道對數是什麼,不要擔心。相反,你可以嘗試一切可能的root。如果有任何root太大,那麼所有更大的root也會太大。

除了一個問題:如果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)) 

關於如何寫循環提示見rangeitertools.count。您應該能夠從這裏填寫詳細信息,或者至少可以獲得足夠詳細的後續問題。

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)) 

例如,if the user input is 81; the output is

root: 81 pwr: 1 
root: 9 pwr: 2 
root: 3 pwr: 4 

注:root=npwr=1始終是一個解決方案,如果n是一個整數。如果用戶輸入不是整數,那麼代碼將提高ValueError(考慮到問題描述; root**pwr可能只是一個整數,因此不存在非整數輸入的解決方案)。

注意:如果root ** pwr == n那麼(-root) ** pwr == n即使是pwr。您可以添加:

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

包括負根作爲解決方案。