繁体   English   中英

不包括素数的计算器,最多10个素数

[英]Calculator that excludes primes up to 10th prime

我正在研究CodingBat python问题,并决定提出自己的问题以更好地理解事情。

我正在尝试制作一个加5个数字但不包括第10个质数(29)的质数(为了简单起见,质数不重要)的计算器,质数右边的任何数字都会加倍。 如果质数多于1,则不添加质数,并且质数右边的数字乘以该数字左侧的质数。

例如7 + 4 + 11 + 4 + 4 + 4 = 8 + 12 + 12 + 12。

我正在尝试以一种非常愚蠢和低效的方式(对编程来说是全新的)来做到这一点,因此查看我的代码可能会打扰您,但希望您能帮助我做得更好。

def Function(a,b,c,d,e):
    if a == 2 or a ==  3 or a == 5 or a == 7 or a == 11 or a == 13 or a == 17 or a == 19 or a == 23 or a == 29:
        return (b + c + d + e) * 2
    elif b == 2 or b ==  3 or b == 5 or b == 7 or b == 11 or b == 13 or b == 17 or b == 19 or b == 23 or b == 29:
        return a + ((c + d + e) * 2)
    elif c == 2 or c ==  3 or c == 5 or c == 7 or c == 11 or c == 13 or c == 17 or c == 19 or c == 23 or c == 29:
        return a + b + ((d + e) * 2)
    elif d == 2 or d ==  3 or d == 5 or d == 7 or d == 11 or d == 13 or d == 17 or d == 19 or d == 23 or d == 29:
        return a + b + c ((e) * 2)
    elif e == 2 or e ==  3 or e == 5 or e == 7 or e == 11 or e == 13 or e == 17 or e == 19 or e == 23 or e == 29:
        return a + b + c + d
.
.
.

您会看到这将要发生的事情……不会很漂亮。

我该如何快速完成? 有没有办法我可以做这样的事情:

if a == 2,3,5,7,11,17,19,23,29:
    return (b + c + d + e) * 2

一种选择是:

l = [2,3,5,7,11,17,19,23,29]

if a in l:
    return whatever

编辑:我从您的练习中看不到太多的逻辑(或需要学习的东西),但这是解决方案:

primes = [2,3,5,7,11,17,19,23,29]

def sum_except(l):
    numprimes = 0
    for item in l:
        if item in primes:
            numprimes = numprimes + 1
    if numprimes==0:
        return sum(l)
    elif numprimes==1:
        for (i,item) in enumerate(l):
            if item in primes:
                if i<len(l)-1:
                    l[i+1] = 2*l[i+1]
                else:
                    l[0] = 2*l[0]
                break
        del l[i]
        print l
        return sum(l)
    else: #numprimes >= 2
        numprimes_sofar = 1
        dropped = []
        for (i,item) in enumerate(l):
            if item in primes:
                numprimes_sofar = numprimes_sofar + 1
                dropped.append(i)
            else:
                l[i] = l[i]*numprimes_sofar
        l = [x for (i,x) in enumerate(l) if i not in dropped]
        print l
        return sum(l)

print sum_except([7 , 4 , 11 , 4 , 4 , 4])
print sum_except([ 4 ,  4 ,5, 4 , 4])

暂无
暂无

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

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