如何編寫不使用乘法運算符而乘以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