[英]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.