簡體   English   中英

函數內的 Python 3 While 循環

[英]Python 3 While Loop within a function

編寫一個名為powPosInt的函數。 該函數將采用兩個整數輸入參數,命名為xp 此函數將計算xp冪,其中p >= 0 ,定義為xp = x × · · · × xp = x × · · · × x | {z } p 次或 1 如果 p 是 0。

該函數將返回此計算結果。 此函數不應產生任何控制台輸出。

為了計算xp次方,我要求您使用 while 循環和累加器變量來實現計算。

您應該測試的值示例: x = 2p = 3應該返回8 x = 1 , p = 4應該返回1 x = 7 , p = 0應該返回1 x = −3 , p = 2應該返回9 x = −3 , p = 3應該返回−27

這就是我到目前為止所擁有的,我無法弄清楚如何在這個函數中放置一個 while 循環。 我在這里尋求幫助,因為我的老師不會提供幫助,(他希望我們將他的班級視為現實世界,在那里我們必須自己找出解決方案......為什么要支付他的薪水?)

def powPosInt(x,p):
    number = p
    count = 0
    while (number != 0):
        answer = (x**p)
        count = count + 1
        if (p<0):
            answer = (x**(1/abs(p)))
    return answer 

使用累加意味着您需要創建一個變量來存儲結果,而 while 循環會將其每一步乘以x 您不應該使用**運算符。

steps = 0
result = 1
while (steps < p):
    result *= x
    steps += 1
def powPosInt(x,p):
    number = p
    count = 0
    while (number != 0):
        answer = (x**p)
        count = count + 1
        if (p<0):
            answer = (x**(1/abs(p)))
    return answer 

我在這里看到一些問題:

  • 計算冪的循環將使用重復乘法,而不是求冪。 這里的原意是假定Python沒有一個冪運算符,否則這項任務將是徒勞的。

  • 沒有理由處理負冪,規范明確要求p >= 0 因此,您的最終if塊是不必要的。

  • 這只是一個風格問題:你應該養成使用有意義的變量名的習慣。 現在我使用單字母變量的唯一情況是一個短期的、非嵌套的循環,其中變量名無關緊要(我使用i )。 對於任何其他情況,我使用解釋性名稱(是的,對於嵌套循環,甚至不使用jk )。 我什至開始在這些簡單的情況下不再使用i

說了這么多,我建議重新審視您的解決方案以將這些考慮在內。


完成此操作后,您可以參考以下代碼以獲取一種解決方案:

def powPosInt(myBase, myPower):
    result = 1
    for _ in range(myPower):
        result *= myBase
    return result

而且,如果您想獲得額外的積分(a) ,您可以進行合同檢查以確保呼叫者做正確的事情:

def powPosInt(myBase, myPower):
    if type(myBase) != int:  raise TypeError("Base must be an integer")
    if type(myPower) != int: raise TypeError("Power must be an integer")
    if myPower < 1:          raise ValueError("Power must be >= 1")

    result = 1
    for _ in range(myPower):
        result *= myBase
    return result

(a)或者冒着成為聰明的亞歷克而失去分數的風險。 這在很大程度上取決於您老師的個性:-)

暫無
暫無

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

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