python - 最接近用户输入的数字

标签 python algorithm

所以我想知道是否可以从用户那里获取 1-6 范围内的 3 个数字,再从用户那里获取 1-144 范围内的 1 个输入,然后制作一个程序来获取您获得的前 3 个数字并找到一种方法,使用加法、减法、乘法、除法、根和幂来找到一种方法,使用 3 个数字来获得第 4 个用户输入。如果您无法获得第 4 个用户输入,请从前 3 个输入中找到最接近它的输入。然后程序应该告诉您它使用的操作以及它使用的数字。这基本上是在重新创建 ThinkFun Math Dice 游戏。

例如:如果用户输入的前 3 个数字是 5、2 和 9,而第 4 个数字是 86,程序应该执行 9^2 即 81 和 81+5 即 86。在另一种情况下,如果3 个数字是 6、4 和 2,最终答案是(第 4 个输入)24,程序应该执行 6*4 -2 或 6*4 +2 或 4^2+6,因为这些都等于 26 或22 并且没有可能的解决方案来获得 24。

最佳答案

虽然 btilly 的答案绝对正确,但它比解决这个问题所需的要多一些,至少在 python 中是这样。使用 itertools 库和 eval() 函数,您可以使用更短、更简单的方法。请注意,eval()exec() 被认为是不安全的,因为它们会执行传递的任何内容,但是作为个人使用的脚本应该没问题。无论如何,任何恶意代码都可能会抛出将输入转换为整数的异常。 从 itertools 导入排列

coeffs = list(map(int, input("Coefficents, separated by spaces:\n").split()))
target = int(input("Target value:\n"))

operators = ["({}+{})","({}-{})","({}*{})","({}/{})","({}**{})","({}**(1.0/{}))"]

def make_expr(expr, coeffs, target):
    if not coeffs:
        try:
            return eval(expr), expr
        except OverflowError:
            return None
        except ArithmeticError:
            return None

    solutions =  [make_expr(op.format(expr, coeffs[0]), coeffs[1:], target) for op in operators]
    solutions += [make_expr(op.format(coeffs[0], expr), coeffs[1:], target) for op in operators]
    solutions = [x for x in solutions if x is not None]
    val, expr = min(solutions, key=lambda x: abs(x[0]-target))
    return val, expr

def find_best(coeffs, target):
    assert(len(coeffs) > 1)
    solutions = [make_expr(perm[0], perm[1:], target) for perm in permutations(coeffs)]
    solutions = [x for x in solutions if x is not None]
    val, expr = min(solutions, key=lambda x: abs(x[0]-target))
    return "Closest value: {0}\nExpression: {1}".format(val, expr)

print(find_best(coeffs, target))

要支持更多运算符,只需将它们插入到列表中,在参数所在的位置使用 {},并用括号括起来。我已经添加了对额外运算符的支持,但是由于在找到完美解决方案时我没有缩短迭代,因此 3+ 个运算符可能需要很长时间。

关于python - 最接近用户输入的数字,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51065918/

相关文章:

python - 如何在Python中渲染\left(\right)

python - 使用强化学习精炼边界框

python - SQLAlchemy 核心选择条件包含 bool 表达式 `is False`

algorithm - 表现不佳的非尾递归函数的实例

algorithm - 如何找到单链表的交集

algorithm - 多项式时间内精确的旅行商问题(TSP)解决方案?

python - Telegram bot API 对于每个联系该机器人的用户来说,chat_id 是唯一的吗?

python - 不和谐.py 未找到 : 404 Not Found (error code: 10062): Unknown interaction

php - 这应该很容易,但我无法弄清楚

C++将整数数组分成 block