社区所有版块导航
Python
python开源   Django   Python   DjangoApp   pycharm  
DATA
docker   Elasticsearch  
aigc
aigc   chatgpt  
WEB开发
linux   MongoDB   Redis   DATABASE   NGINX   其他Web框架   web工具   zookeeper   tornado   NoSql   Bootstrap   js   peewee   Git   bottle   IE   MQ   Jquery  
机器学习
机器学习算法  
Python88.com
反馈   公告   社区推广  
产品
短视频  
印度
印度  
Py学习  »  Python

5操作python计算器

Python • 5 年前 • 1356 次点击  

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

代码旨在通过执行这些操作,输出从第一个输入到第二个输入的可能性(程序)的数量:

  • 将屏幕上的当前数字乘以2

  • 将屏幕上的当前数字乘以3

  • 在屏幕上的当前号码上加5

  • 在屏幕上的当前号码上加7

  • 取屏幕上当前数字的平方

一些测试代码

样本输入1:

2个
10个

样本输出1:

0个

样本输入2:


20个

样本输出2:

5个

样本输入3:

5个
100个

样本输出3:

34660个

问题是由于某种原因,我在测试样本3中得到了34658!我不知道我错在哪一部分

x = int(input())
y = int(input())

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]
        if i ** (1/2) == x:
            num_of_programs[i] += num_of_programs[int(i ** (1/2))]

    print(num_of_programs[y])
Python社区是高质量的Python/Django开发社区
本文地址:http://www.python88.com/topic/51592
 
1356 次点击  
文章 [ 2 ]  |  最新文章 5 年前
finefoot
Reply   •   1 楼
finefoot    5 年前

下面是另一种使用递归函数的“暴力”解决方案:

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 :取屏幕上当前数字的平方
Anatoliy R
Reply   •   2 楼
Anatoliy R    5 年前

您犯了一个错误-必须确保平方根是整数并且大于或等于 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])