两个以上数字之间的随机数学运算 - 线前点
Random mathematical operations between more than two numbers - point before line
我想要通过随机数学运算连接的四个数字的结果。虽然对于一个随机操作和两个数字来说非常简单,但我很难处理两个以上的操作,因为我的代码的顺序性质“行前点”失败。
例如:
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)
这样“线前点”有效吗?
您可以根据您的数字和运算符创建一个 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
一种选择是使用 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}'))
我想要通过随机数学运算连接的四个数字的结果。虽然对于一个随机操作和两个数字来说非常简单,但我很难处理两个以上的操作,因为我的代码的顺序性质“行前点”失败。
例如:
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)
这样“线前点”有效吗?
您可以根据您的数字和运算符创建一个 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
一种选择是使用 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}'))