2016-12-01 68 views
-1

所以我創建了一個程序,給出隨機輸出,包括加法,減法,乘法和除法。爲了消除重複我試圖縮小功能下降基本上如何從Python中的給定操作數和值創建輸出?

sum(operand) 
    a = random.randint(1, 10) 
    b = random.randint(1, 10) 
    c = a + operand + b 
    print c 

我期待能夠調用說SUM(*),所以C將返回a和b的產品的任何代碼。 我覺得這是一個並置問題 在這裏我使用sum作爲任意名稱。該函數應該能夠進行加,減,乘,除,全部取決於通過的操作數。例如,如果 「 - 」 被穿過,C將是一個 - B,如果 「/」 被穿過,C將是A/B

由於

+0

看到'operator'模塊。 –

+1

序列的「和」是所有元素的*加*。目前還不清楚你在問什麼,或者減法或乘法如何適應。 –

回答

2
import random 
def operate(a, b, operand): 
    return eval(str(a) + operand + str(b)) 

「操作數」 是一個字符串。例如, operate(50,5,"*")將返回250。

eval()函數接受一個字符串並執行它。這將a和b轉換爲字符串,因此在給出的例子中,結果字符串將是「50 * 5」,然後由eval()執行。

+0

這正是我所尋找的,謝謝! –

+0

在up/downvote按鈕下方有一個接受按鈕。如果答案不被接受,人們會繼續提出這個問題,認爲這個問題可能沒有得到一個可以接受的答案。 – Douglas

0

你可以試試這個:

import random 

def produce(func): 
    a = random.randint(1, 10) 
    b = random.randint(1, 10) 
    c = func(a,b) 
    return c 


def sum(a,b): 
    return a+b 

def multiply(a,b): 
    return a*b 

def substract(a,b): 
    return a-b 

operands = [ 
      sum, 
      multiply, 
      substract, 
     ] 

# tests 
print "\n".join(["%s: %d" % (op.__name__, produce(op)) for op in operands ]) 

輸出示例:

sum: 14 
multiply: 45 
substract: 7 
0

統一溶液(爲int號碼,作爲例子)模擬數字對象和呼叫__add____sub____mul__floordiv方法:

def do_arith_operation(a, b, op): 
    a = int(a).__int__() 
    b = int(b).__int__() 

    operators = {'+': '__add__', '-': '__sub__', '*': '__mul__', '/': '__floordiv__'} 

    return getattr(a, operators[op])(b) 


print(do_arith_operation(10, 2, '/')) 

輸出:

5 
  • int(a).__int__()將創建一個實例類的<class 'int'>
  • __add____sub____mul__floordiv方法: 每個方法都需要兩個對象(的+|-|*|/|操作數)作爲參數,並返回計算結果

https://docs.python.org/3/reference/datamodel.html#emulating-numeric-types

相關問題