【问题标题】:5-operation python calculator5操作python计算器
【发布时间】:2019-12-21 01:56:14
【问题描述】:

我在这里实现了一个非常简单的计算器,只有 5 个操作。

【问题讨论】:

  • 不是i**(1/2) == x 应该是i**(1/2) >= x。如果是这样,其他输出也是错误的。
  • 用铅笔、纸和计算器逐行浏览您的程序。尝试打印诸如计算、比较、变量之类的东西,看看发生了什么。 How to debug small programs

标签: python jupyter-notebook calculator


【解决方案1】:

你犯了一个错误——你必须确保平方根是整数并且大于或等于x,但不完全是x(见下面的评论):

if x > 1 and y > x:
    num_of_programs = [None] * (y + 1)

    for i in range(x):
        num_of_programs[i] = 0

    num_of_programs[x] = 1

    for i in range(x + 1, y + 1):
        num_of_programs[i] = 0
        if i % 2 == 0 and i // 2 >= x:
            num_of_programs[i] += num_of_programs[i // 2]
        if i % 3 == 0 and i // 3 >= x:
            num_of_programs[i] += num_of_programs[i // 3]
        if i - 5 >= x:
            num_of_programs[i] += num_of_programs[i - 5]
        if i - 7 >= x:
            num_of_programs[i] += num_of_programs[i - 7]
        # fix here!
        if i ** (1/2) - int(i ** (1/2)) == 0 and i ** (1/2) >= x:
            num_of_programs[i] += num_of_programs[int(i ** (1/2))]

    print(num_of_programs[y])

【讨论】:

    【解决方案2】:

    这是使用递归函数的另一种“蛮力”解决方案:

    def calc(number, target, program="", programs=None):
        if programs is None:
            programs = []
        if number == target:
            programs.append(program)
            return
        if number > target:
            return
        calc(number * 2, target, program + "A", programs)
        calc(number * 3, target, program + "B", programs)
        calc(number + 5, target, program + "C", programs)
        calc(number + 7, target, program + "D", programs)
        calc(number ** 2, target, program + "E", programs)
        return programs
    

    示例调用:

    >>> len(calc(2, 10))
    0
    >>> len(calc(3, 20))
    5
    >>> len(calc(5, 100))
    34660
    

    您还可以检查导致目标的实际程序:

    >>> calc(3, 20)
    ['ADD', 'CCD', 'CDC', 'DA', 'DCC']
    
    • A:将屏幕上的当前数字乘以 2
    • B:将屏幕上的当前数字乘以 3
    • C:屏幕上的当前数字加5
    • D:在屏幕上的当前数字上加 7
    • E:取屏幕上当前数字的平方

    【讨论】:

    • OP 正在使用动态编程。在这种情况下,递归将非常低效(由于重复计算导致的指数复杂度)
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-04-15
    • 1970-01-01
    • 2023-03-11
    • 1970-01-01
    • 1970-01-01
    • 2013-11-19
    相关资源
    最近更新 更多