[英]Python Homework - Not making sense
好吧,我們的教授解釋了(有點)這個問題,但它仍然沒有多大意義。
問題:實現函數knice(f,a,b,k)
將返回1,如果對於某個整數a <= x <= b
和一些整數n <= k
,N的應用f
x上是x,(例如f(f(f...(f(x)))) = x
),否則為0。
教授提供的是:
def knice(f,a,b,k):
f(f(f(...(f(x)))) = x
for i = a to b:
y = f(i)
if y = i break
for j = z to k:
y = f(y)
if y = i break
就個人而言,這個例子對我來說毫無意義,所以想看看我是否能得到澄清。
OP EDIT 1/19/2012 3:03 pm CST
這是在GTA的幫助下計算出來的最終功能:
def f(x):
return 2*x-3
def knice(f,a,b,k):
x = a
while x <= b:
n = 1
y = f(x)
if y == x:
return 1
while n <= k:
y = f(y)
n=n+1
if y == x:
return 1
x=x+1
return 0
忽略他的代碼; 你應該寫下你覺得舒服的東西,然后再解決問題。
你想弄清楚是否
f(a) = a
,或f(f(a)) = a
,或......,或f^n(a) = a
, 或 f(a+1) = a+1
,或f(f(a+1)) = a+1
,或......,或f^n(a+1) = a+1
, 或者 , f(b) = b
,或f(f(b)) = b
,或......,或f^n(b) = b
。 應立即想到一個明顯的算法:逐個嘗試所有這些值! 您將需要兩個(嵌套)循環,因為您正在迭代一個值的矩形。 你現在可以看看該怎么辦了?
是的,我可以看出為什么這可能會令人困惑。
是f(f(f(...(f(x)))) = x
用三重雙引號括起來嗎?這是一個函數文檔字符串,有點像評論你的代碼。它不應該是獨立的沒有保護它的東西。
想象一下f被稱為increment_by_one。
在x為2時調用increment_by_one 10次將得到12.無論你增加多少次,你似乎永遠不會回來2。
現在假設f被稱為multiply_by_one。
在x為3時調用multiply_by_one 5次將得到3. Sweet。
那么,你可以測試一些示例輸出(你必須編寫函數)
knice(increment_by_one, 1, 3, 5)
將返回0。
knice(multiply_by_one, 1, 3, 5)
將返回1。
另外一個提示,縮進在python中很重要。
這是一個具體的例子。 從小處開始,假設你稱為knice(f, a=1, b=2, k=1)
。 對於k==1
,我們不必擔心迭代函數。 要考慮的x
的唯一值是1和2,因此如果f(1)==1
或f(2)==2
, knice
可以返回1(即,True)。
現在假設你叫knice(f, a=1, b=2, k=2)
。 你還必須檢查f(f(1))
和f(f(2))
。
隨着k
變大,你將不得不再打電話給f
。 隨着a
和b
之間的范圍變大,你將不得不嘗試將更多的x
值作為f
的參數。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.