【问题标题】:Sum of numbers with exponent (N and P) in PythonPython中具有指数(N和P)的数字总和
【发布时间】:2021-01-28 23:51:15
【问题描述】:

我需要编写一个要求输入两个数字的 Python 程序。 N 是第一个数字,P 是第二个数字,程序必须计算前 N 个数字的总和,其值为 P,遵循以下公式:1^P + 2^P + 3^P + 4^P... + N^P

如果我输入例如 3 和 5,它将进行以下计算:1^5 + 2^5 + 3^5 = 276

这是我目前拥有的:


num1 = input('Enter first number: ')
num2 = input('Enter second number: ')
sum = float(num1) ** float(num2)
print('{0} raised to the power of {1} is {2}'.format(num1, num2, sum))

问题是我不知道如何让程序计算如果我输入的第一个数字是3,第二个是5,那么做1 ^ 5 + 2 ^ 5 + 3 ^ 5,而不是只做3 ^ 5(就像我的程序一样)。 有人能帮我吗?非常感谢!

【问题讨论】:

  • 你知道如何为数字 1 到 N 创建一个循环吗?另外,不要使用sum作为变量名,因为它是Python的内置函数。
  • 您在右侧有 ** 运算符,但您的问题并不完全清楚。也许您正在寻找range(1,3+1)
  • 我刚刚重命名了我的变量,感谢您的提示!关于如何使用ifrange () 为数字创建循环?我刚开始使用 Python 所以不知道是不是你的意思,对不起!

标签: python math formula


【解决方案1】:

总结一个列表理解可能会起作用:

p = 5
n = 3
sum((i+1) ** p for i in range(n)) # 276

(i+1) ** p for i in range(n) 是一个生成器表达式,为 [0, n-1] 中的每个 i 产生 (i+1)^p。对其调用 sum 会返回这些项的总和。

【讨论】:

  • 对此的两个改进: 1. sum 中的表达式可以是生成器表达式,不需要是列表(删除方括号[] 以删除列表理解)。 2.改变范围比(i+1)**p更清晰;所以sum(n**P for n in range(1, N+1)).
  • 同意生成器表达式。我有点同意range 在日常生活环境中的部分,但我认为我会保持这样的状态,因为它显示了与单个参数一起使用时的行为(特别是独占上限)。此外,PEP8 仅建议常量使用大写。我们可以讨论 pn 在这种情况下是否是常量,但由于它们是用户输入而不是强烈定义的常量,最好保留小写 IMO - 它更通用。
【解决方案2】:

正如@Gino Mempin 所说,循环是一个好的开始。

def sum_exponents(end_num, exp):
    sum_ = 0
    for n in range(int(end_num)):
        n += 1
        sum_ += n ** float(exp)
    return sum_

num1 = input('Enter first number: ')
num2 = input('Enter second number: ')

print('{0} raised to the power of {1} is {2}'.format(num1, num2, sum_exponents(num1, num2)))

【讨论】:

  • 为什么不:for n in range(1, end_num + 1)?你为什么要转换成float
  • 完美运行!我将阅读更多关于未来程序循环的信息,我期待学习 Python。非常感谢大家!
  • @ekhumoro 你是对的,for n in range(1, int(end_num)+1) 会同样有效,并且在每次迭代中都可以取消 n += 1。我刚刚离开了 op 的演员阵容。 float,但输入需要在某些时候转换为小数,否则输入将被评估为字符串。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-12-30
  • 2016-08-31
  • 1970-01-01
  • 1970-01-01
  • 2013-03-23
  • 1970-01-01
相关资源
最近更新 更多