簡體   English   中英

Python家庭作業 - 沒有意義

[英]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)==1f(2)==2knice可以返回1(即,True)。

現在假設你叫knice(f, a=1, b=2, k=2) 你還必須檢查f(f(1))f(f(2))

隨着k變大,你將不得不再打電話給f 隨着ab之間的范圍變大,你將不得不嘗試將更多的x值作為f的參數。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM