我有一個CompSci問題(可選),不要擔心,你沒有做我的作業:)我有一個相當不可能的時間來理解這個問題,因爲這是我必須繼續。這是對python的一個相當基本的理解。設想簡單的Python作業
我必須創建一個滿足此要求的函數。我不知道爲什麼問題中有6個或它表示什麼。
「返回一對整數‘根’和‘PWR’S.T. 0 < PWR < 6和根** PWR =用戶輸入。 如果沒有對整數滿足這些條件,該函數將通知用戶。」
就像我說的那樣,它是可選的,所以不僅僅是得到我希望得到解答的答案。謝謝你們!
我有一個CompSci問題(可選),不要擔心,你沒有做我的作業:)我有一個相當不可能的時間來理解這個問題,因爲這是我必須繼續。這是對python的一個相當基本的理解。設想簡單的Python作業
我必須創建一個滿足此要求的函數。我不知道爲什麼問題中有6個或它表示什麼。
「返回一對整數‘根’和‘PWR’S.T. 0 < PWR < 6和根** PWR =用戶輸入。 如果沒有對整數滿足這些條件,該函數將通知用戶。」
就像我說的那樣,它是可選的,所以不僅僅是得到我希望得到解答的答案。謝謝你們!
您正在尋找一個值,給定一個特定的根,以及一個0到6之間的獨佔權,這相當於用戶的輸入。一個例子是4 == 2 ** 2的輸入,因此您可能會輸出(2, 2)
。
在root
上似乎沒有任何界限。
當然還有'4 == 4 ** 1'和'4 == -2 ** 2'。幸運的是,這個問題似乎表明任何有效的答案都是可以接受的,而不是一個特定的答案,或者所有答案。 – abarnert 2013-03-05 02:43:04
這是我讀它:
創建一個接受一個數字作爲自變量的函數(我假設一個整數,但目前尚不清楚)
找到次方根其中n是1,2,3,4或5中的一個。返回n和根。
如果找不到合適的根,會顯示錯誤。
#1的好處。如果用戶輸入一個非整數浮點,顯然永遠不會有匹配(因爲如果'root'和'pwr'是整數,'pwr'是正數,'root ** pwr'是一個整數),但也許它應該嘗試和失敗,而不是引發'ValueError' ... – abarnert 2013-03-05 02:28:32
爲了讓你開始:
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))
關於如何寫循環提示見range
和itertools.count
。您應該能夠從這裏填寫詳細信息,或者至少可以獲得足夠詳細的後續問題。
其他答案提供了問題描述的解釋。下面是正輸入一個可能的解決方案:
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=n
,pwr=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
包括負根作爲解決方案。
「這樣,0小於pwr且pwr小於6 ...」 – 2013-03-05 02:09:47
該任務是編寫一個小程序,它接受用戶輸入並返回兩個數字'a'和'b'。 'a'必須大於零且小於6,'b'的大小必須與用戶提供的值完全相同。 – 2013-03-05 02:10:52
如果你知道指數運算是如何工作的,你總是可以爲任何積分的'user_input'返回user_input,1'。我不認爲這是你的老師想要的,但是如果你能解釋它爲什麼會起作用並證明它,那麼他可能會感到尷尬,以至於他沒有意識到這會給你額外的信用。 :) – abarnert 2013-03-05 02:41:37