如何编写不使用乘法运算符而乘以x * y
的python脚本?我知道,基本上你应该有:在Python中乘以不带乘法运算符
def multi():
x = raw_input('x is: ')
y = raw_input('y is: ')
z = #(x + x) y times
return z
multi()
如何编写不使用乘法运算符而乘以x * y
的python脚本?我知道,基本上你应该有:在Python中乘以不带乘法运算符
def multi():
x = raw_input('x is: ')
y = raw_input('y is: ')
z = #(x + x) y times
return z
multi()
z = sum(x for _ in xrange(y))
它当然可以工作,周围的其他方法,并有效地做x+x
y
倍,你的要求。
这工作essentialy一样做:
z = 0
for _ in range(y):
z += x
xrange不在Python 3.x中。在那里它更干净地称为“范围”。 – user1277476 2014-10-11 21:56:04
尽管Python 3.x也没有'raw_input()'。 – 2014-10-11 21:57:04
@ user1277476我不知道所有的答案都必须遵守2.x和3.x.无论如何,它在那里说“范围或xrange”。 – Korem 2014-10-11 22:22:08
x.__mul__(y)
operator.mul(x, y)
厚颜无耻,但我敢于猜测,这个人的导师会认为这种方法是乘法运算符的另一种形式。 – Brionius 2014-10-11 22:05:38
您可以使用reduce这确实X * Y的方式,你描述:
x = raw_input('x is: ')
y = raw_input('y is: ')
reduce(lambda a, b: a+b, [x]*y)
这将计算((X + x)+ x)... y次。
编辑解释什么是减少的作用:
的第一个参数是服用正好2个参数,描述如何在每次迭代做一个功能。
lambda x,y: x+y
只是一个带2个参数并将它们加在一起的函数。因为如果你这样写道:
def my_operation(x, y):
return x + y
的第二个参数是输入数据,例如[1, 4, 2, 8, 9]
。
reduce
将遍历输入数据,与1和4。这是开始传递到你的函数将返回5.然后5和2传递给你的函数,... 所以计算将是((((1+4)+2)+8)+9)
因此,如果您的输入列表是长度为y的[x,x,x ...,x](即[x]*y
),您将得到您想要的结果,并按照您所描述的方式进行计算。
至少我的回答是遵循问题的*信*:P – 2014-10-11 22:06:50
@seb,诚实地说,我不知道这里发生了什么......减少,lambda和:东西超过了我的头......你介意解释正在执行的操作? – 2014-10-11 22:30:24
最简单的方法是反复添加。 – Jason 2014-10-11 21:57:22