繁体   English   中英

如何通过在python中添加或减去给定的4个数字来获取数字列表

[英]how to get list of numbers by adding or subtracting given 4 numbers in python

给定 4 个数字,我试图从 1 到 n 获取可能的数字。 通过添加或减去 4 个数字中的 2 个或更多。

例如,它进入 numlist(1,2,3,16) 的循环。 下面是代码:

def numlist(a,b,c,d):  
    #user input of 4 numbers a,b,c,d
    # assigning variables value of -1. This will be used to provide -1 or +1 or 0
    p=-1 
    q=-1 
    r=-1
    s=-1
    count=0
    myarray=[]

    mysum=a+b+c+d  #sum of given 4 numbers


    for x in range(mysum):
        while count<mysum:
            if p<=1:
                if q<=1:
                    if r <=1:
                        if s<=1:
                            n1=p*a+q*b+r*c+s*d #number to be generated by adding/subtracting
                            s=s+1
                            #print(n1)
                            if n1>0 and (n1 in myarray)==False:
                                #print(n1)
                                myarray.append(n1) #add to myarray if number is positive and not already present
                                myarray.sort()  #sort myarray
                                count=count+1
                            if count==mysum:
                                 break
                        else:
                            s=-1

                        r=r+1
                    else:
                        r=-1

                    q=q+1
                else:
                    q=-1

                p=p+1
            else:
                p=-1

    print(len(myarray),'total')
    print(myarray)
numlist(1,3,4,14)

产出

[1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22]

但是如果 numlist(1,3,4,19) 它继续运行而不会以数组的输出结束。 只显示总数。

我哪里错了?

我认为你应该重新考虑你的算法。 考虑一下:

from itertools import combinations

def numlist(lst):
    lst = lst + [-i for i in lst]
    result = set()
    for i in range(2, 5):
        result.update(sum(k) for k in combinations(lst, i))
    return sorted(i for i in result if i > 0)

numlist([1, 3, 4, 19])
# [1, 2, 3, 4, 5, 6, 7, 8, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27]

我做了一些修补工作,发现了你的逻辑的高级问题。

count的当前值无法与输入值形成时,您的代码将进入无限循环。 在找到创建该值的方法之前,您的逻辑无法增加count 您可以在一个接一个的系数组合中进行旋转。

for x in range(mysum):
    print ("top of loop; x =", x)
    while count<mysum:
        print("count", count, "\tmysum", mysum, "\tcoeffs", p, q, r, s)
        if p<=1:
...

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM