【问题标题】:Python 3 While Loop within a function函数内的 Python 3 While 循环
【发布时间】:2021-02-27 06:28:28
【问题描述】:

编写一个名为powPosInt 的函数。该函数将采用两个整数输入参数,名为xp。此函数将计算x 的值的p 的幂,其中p >= 0 定义为xp = x × · · · × x 的幂 | {z} p次 如果 p 为 0,则为 1。

函数将返回这个计算结果。此函数不应产生任何控制台输出。

用于计算xp 的幂 ,我要求您使用 while 循环和累加器变量来实现计算。

您应该测试的值示例:x = 2p = 3 应该返回 8x = 1, p = 4 应该返回1x = 7p = 0 应该返回 1x = −3p = 2 应该返回 9x = −3p = 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 

【问题讨论】:

  • 你永远不会分配变量number
  • 老师在布置作业之前不教基本原理吗?
  • 这是他没有教的问题。现在退出他的课程为时已晚..
  • 但是 number is = p 将是分配。
  • 如果您有代码说明,请编辑您的问题。不要在注释中粘贴代码,因为它不可读。

标签: python python-3.x function while-loop


【解决方案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 &gt;= 0。因此,您最后的 if 块是不必要的。

  • 这只是一个风格问题:您应该养成使用有意义的变量名的习惯。我现在使用单字母变量的 only 情况是一个短暂的、非嵌套的循环,其中变量名是不相关的(为此我使用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) 否则可能会因为成为聪明的亚历克而失去分数。这在很大程度上取决于你老师的个性:-)

【讨论】:

  • 更正这一切都是正确的程序,因为我复制了错误的程序..
【解决方案2】:

使用累加意味着你需要创建一个变量来存储结果,while 循环会在每一步将它乘以x。您不应该使用 ** 运算符。

steps = 0
result = 1
while (steps < p):
    result *= x
    steps += 1

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2020-06-16
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-07-23
    • 2017-07-31
    • 1970-01-01
    相关资源
    最近更新 更多