Python 乘平方函数
我一直在尝试编写一个函数,它可以接受不同数量的整数参数,并返回参数平方的乘积 输出应为:Python 乘平方函数,python,python-3.x,Python,Python 3.x,我一直在尝试编写一个函数,它可以接受不同数量的整数参数,并返回参数平方的乘积 输出应为: multiply_squares(3,2,1) multiply_squares(2,5) 36 100 到目前为止,我一直在玩这个: def multiply_squares(*num_tuple): result = [] for num in num_tuple: c = num_tuple[num]**2 result.append(c) for i in result:
multiply_squares(3,2,1)
multiply_squares(2,5)
36
100
到目前为止,我一直在玩这个:
def multiply_squares(*num_tuple):
result = []
for num in num_tuple:
c = num_tuple[num]**2
result.append(c)
for i in result:
d *= result[i]
print(d)
multiply_squares(3,2,1)
multiply_squares(2,5)
我一直在得到“元组索引超出范围”,并没有能够正确地解决这个问题。有人能帮我吗?并演示如何将其转换为递归函数?(如果可能)
星期二我有一个考试,我正在努力理解这背后的逻辑:)
感谢您的任何反馈/指导
对于num\u tuple中的num
意味着迭代num\u tuple
,并将每个值设置为num
num
不是元组的索引
def multiply_squares(*num_tuple):
result = []
for num in num_tuple:
c = num**2
result.append(c)
d = 1
for i in result:
d *= i
print(d)
return d
multiply_squares(3,2,1)
multiply_squares(2,5)
关于递归解决方案:
def multiply_squares(*num_tuple):
if not num_tuple: # Base case:
return 1
return (num_tuple[0] ** 2) * multiply_squares(*num_tuple[1:])
对于num\u tuple中的num
意味着迭代num\u tuple
并将每个值设置为num
num
不是元组的索引
def multiply_squares(*num_tuple):
result = []
for num in num_tuple:
c = num**2
result.append(c)
d = 1
for i in result:
d *= i
print(d)
return d
multiply_squares(3,2,1)
multiply_squares(2,5)
关于递归解决方案:
def multiply_squares(*num_tuple):
if not num_tuple: # Base case:
return 1
return (num_tuple[0] ** 2) * multiply_squares(*num_tuple[1:])
为什么需要中间人列表?
def multiply_squares(*num_tuple):
r = 1
for n in num_tuple:
r *= n * n
return r
它的工作原理是:
>>> multiply_squares(3,2,1)
36
>>> multiply_squares(2,5)
100
递归:
def multiply_squares(*num_tuple):
return num_tuple[0] ** 2 * multiply_squares(*num_tuple[1:]) if num_tuple else 1
为了帮助理解,我将打印每个函数调用的输入:
>>> multiply_squares(3,2,1)
(3, 2, 1)
(2, 1)
(1,)
()
36
所以每个接到电话的人都知道:他们的工作和投入(数字)。所以它需要返回的(无论是最初的调用方(你)还是他上面的人)是输入平方的乘积
要做到这一点,这个人可以通过将第一个输入的平方乘以其他输入平方的乘积(通过递归调用自己)来解决问题。
这将非常有效。。。直到最终没有其他输入。在这种情况下,这家伙做什么?好吧,这是一个特殊的案例,只有解决同一问题的另一个人才能举例说明。他上面的人依靠他返回他剩余输入的平方的乘积,这样他就可以把他的结果乘以那个结果。因此,他必须返回1
,否则整个系统将无法工作
在Python中,我们可以通过检查输入元组的真实性来测试函数是否没有输入。这恰好等同于检查数据结构是否包含任何元素
即
我们可以很容易地检查元组的长度是否等于(或者在本例中不等于)0
即
因此,通过以下步骤:
num_tuple[0] ** 2 * multiply_squares(*num_tuple[1:]) if num_tuple else 1
# ^ ^ ^ ^ ^
# 1st input sqrd | by the prod of sqrs of rest | given inputs | otherwise 1
# multiplied only if
为什么您的代码不起作用:
def multiply_squares(*num_tuple):
return num_tuple[0] ** 2 * multiply_squares(*num_tuple[1:]) if num_tuple else 1
该行:
for num in num_tuple:
迭代num_tuple
tuple的元素,而不是索引
这意味着在第一个示例中,num
将是3
,然后是2
,然后是1
。然后,不是用您认为是标记(0
、1
和2
)的内容来索引num\u tuple
),而是用这些函数输入来索引
当元组的长度只有三个元素长时(使[2]
成为最后一个索引),当您尝试使用3
索引元组时,这会导致超出范围的错误
要补救您的解决方案,您可以将该行更改为:
for index in range(num_tuple):
然后,您的索引将起作用(如果您还将以前出现的所有num
替换为index
)
或者,更好的解决方案是完全放弃索引,直接使用元素,因为这是您想要的
这看起来像:
def multiply_squares(*num_tuple):
result = []
for num in num_tuple:
c = num**2
result.append(c)
r = 1
for i in result:
r *= i
return r
现在,它可以按预期工作。为什么需要中间人列表?
def multiply_squares(*num_tuple):
r = 1
for n in num_tuple:
r *= n * n
return r
它的工作原理是:
>>> multiply_squares(3,2,1)
36
>>> multiply_squares(2,5)
100
递归:
def multiply_squares(*num_tuple):
return num_tuple[0] ** 2 * multiply_squares(*num_tuple[1:]) if num_tuple else 1
为了帮助理解,我将打印每个函数调用的输入:
>>> multiply_squares(3,2,1)
(3, 2, 1)
(2, 1)
(1,)
()
36
所以每个接到电话的人都知道:他们的工作和投入(数字)。所以它需要返回的(无论是最初的调用方(你)还是他上面的人)是输入平方的乘积
要做到这一点,这个人可以通过将第一个输入的平方乘以其他输入平方的乘积(通过递归调用自己)来解决问题。
这将非常有效。。。直到最终没有其他输入。在这种情况下,这家伙做什么?好吧,这是一个特殊的案例,只有解决同一问题的另一个人才能举例说明。他上面的人依靠他返回他剩余输入的平方的乘积,这样他就可以把他的结果乘以那个结果。因此,他必须返回1
,否则整个系统将无法工作
在Python中,我们可以通过检查输入元组的真实性来测试函数是否没有输入。这恰好等同于检查数据结构是否包含任何元素
即
我们可以很容易地检查元组的长度是否等于(或者在本例中不等于)0
即
因此,通过以下步骤:
num_tuple[0] ** 2 * multiply_squares(*num_tuple[1:]) if num_tuple else 1
# ^ ^ ^ ^ ^
# 1st input sqrd | by the prod of sqrs of rest | given inputs | otherwise 1
# multiplied only if
为什么您的代码不起作用:
def multiply_squares(*num_tuple):
return num_tuple[0] ** 2 * multiply_squares(*num_tuple[1:]) if num_tuple else 1
该行:
for num in num_tuple:
迭代num_tuple
tuple的元素,而不是索引
这意味着在第一个示例中,num
将是3
,然后是2
,然后是1
。然后,不是用您认为是标记(0
、1
和2
)的内容来索引num\u tuple
),而是用这些函数输入来索引
当元组的长度只有三个元素长时(使[2]
成为最后一个索引),当您尝试使用3
索引元组时,这会导致超出范围的错误
要补救您的解决方案,您可以将该行更改为:
for index in range(num_tuple):
然后你的索引就可以了