2016-12-01 3 views
-1

Итак, я создаю программу, которая дает случайные выходные данные, включая сложение, вычитание, умножение и деление. Для того, чтобы удалить повторяющиеся любой код, который я пытаюсь сузить функцию вниз по существуКак создать выход из заданного операнда и значений в Python?

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

Я ищу, чтобы быть в состоянии назвать сказать, сумма (*), так что с будет возвращать продукт а и Ь. Я чувствую, что это вопрос конкатенации Здесь я использую сумму как произвольное имя. Функция должна иметь возможность добавлять, вычитать, умножать и делить все в зависимости от пройденного операнда. Например, если «-» проходит через, с будет - б, если «/» был принят до конца, с бы а/б

Благодаря

+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

Под кнопками «вверх»/«вниз» есть кнопка «Принять». Если ответ не будет принят, люди будут продолжать приходить к этому вопросу, думая, что этот вопрос, возможно, не получил приемлемого ответа. – 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

Смежные вопросы