2014-10-11 98 views
0

如何编写不使用乘法运算符而乘以x * y的python脚本?我知道,基本上你应该有:在Python中乘以不带乘法运算符

def multi(): 
    x = raw_input('x is: ') 
    y = raw_input('y is: ') 
    z = #(x + x) y times 
    return z 

multi() 
+1

最简单的方法是反复添加。 – Jason 2014-10-11 21:57:22

回答

0

随着sum和范围或xrange

z = sum(x for _ in xrange(y)) 

它当然可以工作,周围的其他方法,并有效地做x+xy倍,你的要求。

这工作essentialy一样做:

z = 0 
for _ in range(y): 
    z += x 
+0

xrange不在Python 3.x中。在那里它更干净地称为“范围”。 – user1277476 2014-10-11 21:56:04

+0

尽管Python 3.x也没有'raw_input()'。 – 2014-10-11 21:57:04

+0

@ user1277476我不知道所有的答案都必须遵守2.x和3.x.无论如何,它在那里说“范围或xrange”。 – Korem 2014-10-11 22:22:08

1
x.__mul__(y) 
operator.mul(x, y) 
+2

厚颜无耻,但我敢于猜测,这个人的导师会认为这种方法是乘法运算符的另一种形式。 – Brionius 2014-10-11 22:05:38

1

您可以使用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),您将得到您想要的结果,并按照您所描述的方式进行计算。

+0

至少我的回答是遵循问题的*信*:P – 2014-10-11 22:06:50

+0

@seb,诚实地说,我不知道这里发生了什么......减少,lambda和:东西超过了我的头......你介意解释正在执行的操作? – 2014-10-11 22:30:24