两个以上数字之间的随机数学运算 - 点在行之前

问题描述 投票:0回答:3

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

例如:

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
3个回答
1
投票

您可以使用数字和运算符创建

str
,同时使用 内置函数
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


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}'))

0
投票

hfgidhfidsfjnodopdhvdlddjdovjhxnod;sjhfnbditgrfisdgfsokhdfisisdfihdfadfksdfohfododhcodosohfood hmmmm hmm popa loc

© www.soinside.com 2019 - 2024. All rights reserved.