【问题标题】:Random mathematical operations between more than two numbers - point before line两个以上数字之间的随机数学运算 - 行前点
【发布时间】:2021-11-23 07:59:38
【问题描述】:

我想要通过随机数学运算连接的四个数字的结果。虽然 ONE 随机操作和两个数字非常简单,但由于我的代码“点前一行”失败的顺序性质,我很难处理两个以上的问题。

例如:

import random
import operator


def random_operation(desired_result):
    ops = {'+':operator.add,
           '-':operator.sub,
           '*':operator.mul,
           '/':operator.truediv}
    
    num = 8
    
    op1 = random.choice(list(ops.keys()))
    op2 = random.choice(list(ops.keys()))
    op3 = random.choice(list(ops.keys()))
    
    result = ops.get(op3)(ops.get(op2)(ops.get(op1)(num,num),num),num)
    
    if result == desired_result:
        print('Found {} {} {} {} {} {} {} = {}\n'.format(num, op1, num, op2, num, op3, num, result))
    return result, desired_result



random_operation(8)

可能的输出是

Found 8 - 8 / 8 + 8 = 8.0

这是错误的,因为操作是按顺序完成的,而不是按照数学规则。有一个更好的方法吗?一种崩溃的方式

result = ops.get(op3)(ops.get(op2)(ops.get(op1)(num,num),num),num)

这样“行前点”有效吗?

【问题讨论】:

标签: python random operators


【解决方案1】:

一种选择是使用 python 构建的eval() 函数。这需要一个字符串,它可以包含一个数学运算,并计算它。这是一个例子:

print(eval("5+5"))
>>> 6

然后您可以将运算符列表转换为数组并选择随机运算符。这是一个例子:

operators = ["+", "-", "*", "/"]
num = 8

ops = [random.choice(operators) for x in range(3)]

finalStr = str(num).join(ops)

print(eval(f'{num} {finalStr} {num}'))

【讨论】:

    【解决方案2】:

    您可以使用您的号码和运算符创建str,同时使用build-in function eval 将其评估为考虑算术规则的python 表达式。

    
    import random
    import operator
    
    
    def random_operation(desired_result):
        ops = {'+':operator.add,
               '-':operator.sub,
               '*':operator.mul,
               '/':operator.truediv}
        
        num = 8
        
        op1 = random.choice(list(ops.keys()))
        op2 = random.choice(list(ops.keys()))
        op3 = random.choice(list(ops.keys()))
        
        #result = ops.get(op3)(ops.get(op2)(ops.get(op1)(num,num),num),num)
        
        result = eval(f'{num} {op1} {num} {op2} {num} {op3} {num}')
    
        if result == desired_result:
            print('Found {} {} {} {} {} {} {} = {}\n'.format(num, op1, num, op2, num, op3, num, result))
        return result, desired_result
    
    

    【讨论】:

      猜你喜欢
      • 2012-04-25
      • 2023-03-19
      • 1970-01-01
      • 1970-01-01
      • 2011-07-14
      • 2014-06-09
      • 1970-01-01
      • 2015-01-31
      • 1970-01-01
      相关资源
      最近更新 更多