2016-12-01 44 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

相关问题