2014-10-11 97 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